blob: 6be3ebce9420d43a3de8891722f1e97daa73c95b [file] [log] [blame]
Takahiro Suzuki241c10e2020-12-17 20:17:57 +09001/*
2* Copyright 2018-present Open Networking Foundation
3
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7
8* http://www.apache.org/licenses/LICENSE-2.0
9
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15 */
16
17//Package config provides the Log, kvstore, Kafka configuration
18package config
19
20import (
21 "flag"
22 "fmt"
23 "os"
24 "time"
25)
26
27// Open ONU default constants
28const (
29 etcdStoreName = "etcd"
30 defaultInstanceid = "epononu"
31 defaultKafkaadapterhost = "172.30.254.100"
32 defaultKafkaadapterport = 9092
33 defaultKafkaclusterhost = "172.30.254.100"
34 defaultKafkaclusterport = 9092
35 defaultKvstoretype = etcdStoreName
36 defaultKvstoretimeout = 5 * time.Second
37 defaultKvstorehost = "localhost"
38 defaultKvstoreport = 2379 // Consul = 8500; Etcd = 2379
39 defaultLoglevel = "DEBUG"
40 defaultBanner = false
41 defaultDisplayVersionOnly = false
42 defaultAccIncrEvto = false
43 defaultTopic = "epononu"
44 defaultCoretopic = "rwcore"
45 defaultEventtopic = "voltha.events"
46 defaultOnunumber = 1
47 defaultProbeHost = ""
48 defaultProbePort = 8080
49 defaultLiveProbeInterval = 60 * time.Second
50 defaultNotLiveProbeInterval = 5 * time.Second // Probe more frequently when not alive
51 defaultHearbeatCheckInterval = 30 * time.Second
52 defaultHearbeatFailReportInterval = 180 * time.Second
53 defaultKafkaReconnectRetries = -1
54 defaultCurrentReplica = 1
55 defaultTotalReplicas = 1
56)
57
58// AdapterFlags represents the set of configurations used by the read-write adaptercore service
59type AdapterFlags struct {
60 InstanceID string
61 KafkaAdapterHost string
62 KafkaAdapterPort int
63 KafkaClusterHost string
64 KafkaClusterPort int
65 KVStoreType string
66 KVStoreTimeout time.Duration
67 KVStoreHost string
68 KVStorePort int
69 Topic string
70 CoreTopic string
71 EventTopic string
72 LogLevel string
73 OnuNumber int
74 Banner bool
75 DisplayVersionOnly bool
76 AccIncrEvto bool
77 ProbeHost string
78 ProbePort int
79 LiveProbeInterval time.Duration
80 NotLiveProbeInterval time.Duration
81 HeartbeatCheckInterval time.Duration
82 HeartbeatFailReportInterval time.Duration
83 KafkaReconnectRetries int
84 CurrentReplica int
85 TotalReplicas int
86}
87
88// NewAdapterFlags returns a new RWCore config
89func NewAdapterFlags() *AdapterFlags {
90 var adapterFlags = AdapterFlags{ // Default values
91 InstanceID: defaultInstanceid,
92 KafkaAdapterHost: defaultKafkaadapterhost,
93 KafkaAdapterPort: defaultKafkaadapterport,
94 KafkaClusterHost: defaultKafkaclusterhost,
95 KafkaClusterPort: defaultKafkaclusterport,
96 KVStoreType: defaultKvstoretype,
97 KVStoreTimeout: defaultKvstoretimeout,
98 KVStoreHost: defaultKvstorehost,
99 KVStorePort: defaultKvstoreport,
100 Topic: defaultTopic,
101 CoreTopic: defaultCoretopic,
102 EventTopic: defaultEventtopic,
103 LogLevel: defaultLoglevel,
104 OnuNumber: defaultOnunumber,
105 Banner: defaultBanner,
106 DisplayVersionOnly: defaultDisplayVersionOnly,
107 AccIncrEvto: defaultAccIncrEvto,
108 ProbeHost: defaultProbeHost,
109 ProbePort: defaultProbePort,
110 LiveProbeInterval: defaultLiveProbeInterval,
111 NotLiveProbeInterval: defaultNotLiveProbeInterval,
112 HeartbeatCheckInterval: defaultHearbeatCheckInterval,
113 HeartbeatFailReportInterval: defaultHearbeatFailReportInterval,
114 KafkaReconnectRetries: defaultKafkaReconnectRetries,
115 CurrentReplica: defaultCurrentReplica,
116 TotalReplicas: defaultTotalReplicas,
117 }
118 return &adapterFlags
119}
120
121// ParseCommandArguments parses the arguments when running read-write adaptercore service
122func (so *AdapterFlags) ParseCommandArguments() {
123
124 help := fmt.Sprintf("Kafka - Adapter messaging host")
125 flag.StringVar(&(so.KafkaAdapterHost), "kafka_adapter_host", defaultKafkaadapterhost, help)
126
127 help = fmt.Sprintf("Kafka - Adapter messaging port")
128 flag.IntVar(&(so.KafkaAdapterPort), "kafka_adapter_port", defaultKafkaadapterport, help)
129
130 help = fmt.Sprintf("Kafka - Cluster messaging host")
131 flag.StringVar(&(so.KafkaClusterHost), "kafka_cluster_host", defaultKafkaclusterhost, help)
132
133 help = fmt.Sprintf("Kafka - Cluster messaging port")
134 flag.IntVar(&(so.KafkaClusterPort), "kafka_cluster_port", defaultKafkaclusterport, help)
135
136 help = fmt.Sprintf("Open ONU topic")
137 flag.StringVar(&(so.Topic), "adapter_topic", defaultTopic, help)
138
139 help = fmt.Sprintf("Core topic")
140 flag.StringVar(&(so.CoreTopic), "core_topic", defaultCoretopic, help)
141
142 help = fmt.Sprintf("Event topic")
143 flag.StringVar(&(so.EventTopic), "event_topic", defaultEventtopic, help)
144
145 help = fmt.Sprintf("KV store type")
146 flag.StringVar(&(so.KVStoreType), "kv_store_type", defaultKvstoretype, help)
147
148 help = fmt.Sprintf("The default timeout when making a kv store request")
149 flag.DurationVar(&(so.KVStoreTimeout), "kv_store_request_timeout", defaultKvstoretimeout, help)
150
151 help = fmt.Sprintf("KV store host")
152 flag.StringVar(&(so.KVStoreHost), "kv_store_host", defaultKvstorehost, help)
153
154 help = fmt.Sprintf("KV store port")
155 flag.IntVar(&(so.KVStorePort), "kv_store_port", defaultKvstoreport, help)
156
157 help = fmt.Sprintf("Log level")
158 flag.StringVar(&(so.LogLevel), "log_level", defaultLoglevel, help)
159
160 help = fmt.Sprintf("Number of ONUs")
161 flag.IntVar(&(so.OnuNumber), "onu_number", defaultOnunumber, help)
162
163 help = fmt.Sprintf("Show startup banner log lines")
164 flag.BoolVar(&(so.Banner), "banner", defaultBanner, help)
165
166 help = fmt.Sprintf("Show version information and exit")
167 flag.BoolVar(&(so.DisplayVersionOnly), "version", defaultDisplayVersionOnly, help)
168
169 help = fmt.Sprintf("Acceptance of incremental EVTOCD configuration")
170 flag.BoolVar(&(so.AccIncrEvto), "accept_incr_evto", defaultAccIncrEvto, help)
171
172 help = fmt.Sprintf("The address on which to listen to answer liveness and readiness probe queries over HTTP.")
173 flag.StringVar(&(so.ProbeHost), "probe_host", defaultProbeHost, help)
174
175 help = fmt.Sprintf("The port on which to listen to answer liveness and readiness probe queries over HTTP.")
176 flag.IntVar(&(so.ProbePort), "probe_port", defaultProbePort, help)
177
178 help = fmt.Sprintf("Number of seconds for the default liveliness check")
179 flag.DurationVar(&(so.LiveProbeInterval), "live_probe_interval", defaultLiveProbeInterval, help)
180
181 help = fmt.Sprintf("Number of seconds for liveliness check if probe is not running")
182 flag.DurationVar(&(so.NotLiveProbeInterval), "not_live_probe_interval", defaultNotLiveProbeInterval, help)
183
184 help = fmt.Sprintf("Number of seconds for heartbeat check interval.")
185 flag.DurationVar(&(so.HeartbeatCheckInterval), "hearbeat_check_interval", defaultHearbeatCheckInterval, help)
186
187 help = fmt.Sprintf("Number of seconds adapter has to wait before reporting core on the hearbeat check failure.")
188 flag.DurationVar(&(so.HeartbeatFailReportInterval), "hearbeat_fail_interval", defaultHearbeatFailReportInterval, help)
189
190 help = fmt.Sprintf("Number of retries to connect to Kafka.")
191 flag.IntVar(&(so.KafkaReconnectRetries), "kafka_reconnect_retries", defaultKafkaReconnectRetries, help)
192
193 help = "Replica number of this particular instance (default: %s)"
194 flag.IntVar(&(so.CurrentReplica), "current_replica", defaultCurrentReplica, help)
195
196 help = "Total number of instances for this adapter"
197 flag.IntVar(&(so.TotalReplicas), "total_replica", defaultTotalReplicas, help)
198
199 flag.Parse()
200 containerName := getContainerInfo()
201 if len(containerName) > 0 {
202 so.InstanceID = containerName
203 }
204
205}
206
207func getContainerInfo() string {
208 return os.Getenv("HOSTNAME")
209}