blob: 541f4a631b36dc2fc43bedb8daf0d0ce202c6897 [file] [log] [blame]
Girish Gowdru0c588b22019-04-23 23:24:56 -04001/*
cbabu116b73f2019-12-10 17:56:32 +05302* Copyright 2018-present Open Networking Foundation
Girish Gowdru0c588b22019-04-23 23:24:56 -04003
cbabu116b73f2019-12-10 17:56:32 +05304* 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
Girish Gowdru0c588b22019-04-23 23:24:56 -04007
cbabu116b73f2019-12-10 17:56:32 +05308* http://www.apache.org/licenses/LICENSE-2.0
Girish Gowdru0c588b22019-04-23 23:24:56 -04009
cbabu116b73f2019-12-10 17:56:32 +053010* 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.
Girish Gowdru0c588b22019-04-23 23:24:56 -040015 */
Girish Gowdru6a80bbd2019-07-02 07:36:09 -070016
17//Package config provides the Log, kvstore, Kafka configuration
Girish Gowdru0c588b22019-04-23 23:24:56 -040018package config
19
20import (
21 "flag"
22 "fmt"
Girish Gowdru0c588b22019-04-23 23:24:56 -040023 "os"
cbabu116b73f2019-12-10 17:56:32 +053024 "time"
Girish Gowdru0c588b22019-04-23 23:24:56 -040025)
26
27// Open OLT default constants
28const (
cbabu116b73f2019-12-10 17:56:32 +053029 EtcdStoreName = "etcd"
30 defaultInstanceid = "openOlt001"
Neha Sharma3f221ae2020-04-29 19:02:12 +000031 defaultKafkaadapteraddress = "127.0.0.1:9092"
32 defaultKafkaclusteraddress = "127.0.0.1:9094"
cbabu116b73f2019-12-10 17:56:32 +053033 defaultKvstoretype = EtcdStoreName
Neha Sharma3f221ae2020-04-29 19:02:12 +000034 defaultKvstoretimeout = 5 * time.Second
35 defaultKvstoreaddress = "127.0.0.1:2379" // Port: Consul = 8500; Etcd = 2379
David Bainbridge2b3d4882020-03-17 15:06:39 -070036 defaultLoglevel = "WARN"
cbabu116b73f2019-12-10 17:56:32 +053037 defaultBanner = false
38 defaultDisplayVersionOnly = false
39 defaultTopic = "openolt"
40 defaultCoretopic = "rwcore"
41 defaultEventtopic = "voltha.events"
42 defaultOnunumber = 1
Neha Sharma3f221ae2020-04-29 19:02:12 +000043 defaultProbeAddress = ":8080"
cbabu116b73f2019-12-10 17:56:32 +053044 defaultLiveProbeInterval = 60 * time.Second
45 defaultNotLiveProbeInterval = 5 * time.Second // Probe more frequently when not alive
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053046 //defaultHearbeatFailReportInterval is the time in seconds the adapter will keep checking the hardware for heartbeat.
Chaitrashree G Sa4649252020-03-11 21:24:11 -040047 defaultHearbeatCheckInterval = 15 * time.Second
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053048 // defaultHearbeatFailReportInterval is the time adapter will wait before updating the state to the core.
Chaitrashree G Sa4649252020-03-11 21:24:11 -040049 defaultHearbeatFailReportInterval = 0 * time.Second
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053050 //defaultGrpcTimeoutInterval is the time in seconds a grpc call will wait before returning error.
Girish Kumar11e15972020-06-15 14:51:10 +000051 defaultGrpcTimeoutInterval = 2 * time.Second
52 defaultCurrentReplica = 1
53 defaultTotalReplicas = 1
54 defaultTraceEnabled = false
55 defaultTraceAgentAddress = "127.0.0.1:6831"
56 defaultLogCorrelationEnabled = true
Girish Gowdru0c588b22019-04-23 23:24:56 -040057)
58
59// AdapterFlags represents the set of configurations used by the read-write adaptercore service
60type AdapterFlags struct {
61 // Command line parameters
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053062 InstanceID string
Neha Sharma3f221ae2020-04-29 19:02:12 +000063 KafkaAdapterAddress string
64 KafkaClusterAddress string
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053065 KVStoreType string
Neha Sharma3f221ae2020-04-29 19:02:12 +000066 KVStoreTimeout time.Duration
67 KVStoreAddress string
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053068 Topic string
69 CoreTopic string
70 EventTopic string
Rohan Agrawal2488f192020-01-31 09:26:55 +000071 LogLevel string
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053072 OnuNumber int
73 Banner bool
74 DisplayVersionOnly bool
Neha Sharma3f221ae2020-04-29 19:02:12 +000075 ProbeAddress string
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053076 LiveProbeInterval time.Duration
77 NotLiveProbeInterval time.Duration
78 HeartbeatCheckInterval time.Duration
79 HeartbeatFailReportInterval time.Duration
80 GrpcTimeoutInterval time.Duration
Matteo Scandolo3ad5d2b2020-04-02 17:02:04 -070081 CurrentReplica int
82 TotalReplicas int
Girish Kumar11e15972020-06-15 14:51:10 +000083 TraceEnabled bool
84 TraceAgentAddress string
85 LogCorrelationEnabled bool
Girish Gowdru0c588b22019-04-23 23:24:56 -040086}
87
Girish Gowdru6a80bbd2019-07-02 07:36:09 -070088// NewAdapterFlags returns a new RWCore config
Girish Gowdru0c588b22019-04-23 23:24:56 -040089func NewAdapterFlags() *AdapterFlags {
90 var adapterFlags = AdapterFlags{ // Default values
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053091 InstanceID: defaultInstanceid,
Neha Sharma3f221ae2020-04-29 19:02:12 +000092 KafkaAdapterAddress: defaultKafkaadapteraddress,
93 KafkaClusterAddress: defaultKafkaclusteraddress,
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053094 KVStoreType: defaultKvstoretype,
95 KVStoreTimeout: defaultKvstoretimeout,
Neha Sharma3f221ae2020-04-29 19:02:12 +000096 KVStoreAddress: defaultKvstoreaddress,
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053097 Topic: defaultTopic,
98 CoreTopic: defaultCoretopic,
99 EventTopic: defaultEventtopic,
100 LogLevel: defaultLoglevel,
101 OnuNumber: defaultOnunumber,
102 Banner: defaultBanner,
103 DisplayVersionOnly: defaultDisplayVersionOnly,
Neha Sharma3f221ae2020-04-29 19:02:12 +0000104 ProbeAddress: defaultProbeAddress,
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +0530105 LiveProbeInterval: defaultLiveProbeInterval,
106 NotLiveProbeInterval: defaultNotLiveProbeInterval,
107 HeartbeatCheckInterval: defaultHearbeatCheckInterval,
108 HeartbeatFailReportInterval: defaultHearbeatFailReportInterval,
109 GrpcTimeoutInterval: defaultGrpcTimeoutInterval,
Girish Kumar11e15972020-06-15 14:51:10 +0000110 TraceEnabled: defaultTraceEnabled,
111 TraceAgentAddress: defaultTraceAgentAddress,
112 LogCorrelationEnabled: defaultLogCorrelationEnabled,
Girish Gowdru0c588b22019-04-23 23:24:56 -0400113 }
114 return &adapterFlags
115}
116
117// ParseCommandArguments parses the arguments when running read-write adaptercore service
118func (so *AdapterFlags) ParseCommandArguments() {
119
Neha Sharma3f221ae2020-04-29 19:02:12 +0000120 help := fmt.Sprintf("Kafka - Adapter messaging address")
121 flag.StringVar(&(so.KafkaAdapterAddress), "kafka_adapter_address", defaultKafkaadapteraddress, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400122
Neha Sharma3f221ae2020-04-29 19:02:12 +0000123 help = fmt.Sprintf("Kafka - Cluster messaging address")
124 flag.StringVar(&(so.KafkaClusterAddress), "kafka_cluster_address", defaultKafkaclusteraddress, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400125
126 help = fmt.Sprintf("Open OLT topic")
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700127 flag.StringVar(&(so.Topic), "adapter_topic", defaultTopic, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400128
129 help = fmt.Sprintf("Core topic")
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700130 flag.StringVar(&(so.CoreTopic), "core_topic", defaultCoretopic, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400131
Devmalya Paulfb990a52019-07-09 10:01:49 -0400132 help = fmt.Sprintf("Event topic")
133 flag.StringVar(&(so.EventTopic), "event_topic", defaultEventtopic, help)
134
Girish Gowdru0c588b22019-04-23 23:24:56 -0400135 help = fmt.Sprintf("KV store type")
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700136 flag.StringVar(&(so.KVStoreType), "kv_store_type", defaultKvstoretype, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400137
138 help = fmt.Sprintf("The default timeout when making a kv store request")
Neha Sharmacc656962020-04-14 14:26:11 +0000139 flag.DurationVar(&(so.KVStoreTimeout), "kv_store_request_timeout", defaultKvstoretimeout, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400140
Neha Sharma3f221ae2020-04-29 19:02:12 +0000141 help = fmt.Sprintf("KV store address")
142 flag.StringVar(&(so.KVStoreAddress), "kv_store_address", defaultKvstoreaddress, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400143
144 help = fmt.Sprintf("Log level")
Rohan Agrawal2488f192020-01-31 09:26:55 +0000145 flag.StringVar(&(so.LogLevel), "log_level", defaultLoglevel, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400146
147 help = fmt.Sprintf("Number of ONUs")
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700148 flag.IntVar(&(so.OnuNumber), "onu_number", defaultOnunumber, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400149
150 help = fmt.Sprintf("Show startup banner log lines")
Matt Jeanneretf880eb62019-07-16 20:08:03 -0400151 flag.BoolVar(&(so.Banner), "banner", defaultBanner, help)
152
153 help = fmt.Sprintf("Show version information and exit")
154 flag.BoolVar(&(so.DisplayVersionOnly), "version", defaultDisplayVersionOnly, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400155
Rohan Agrawal828bf4e2019-10-22 10:13:19 +0000156 help = fmt.Sprintf("The address on which to listen to answer liveness and readiness probe queries over HTTP.")
Neha Sharma3f221ae2020-04-29 19:02:12 +0000157 flag.StringVar(&(so.ProbeAddress), "probe_address", defaultProbeAddress, help)
Rohan Agrawal828bf4e2019-10-22 10:13:19 +0000158
cbabu116b73f2019-12-10 17:56:32 +0530159 help = fmt.Sprintf("Number of seconds for the default liveliness check")
160 flag.DurationVar(&(so.LiveProbeInterval), "live_probe_interval", defaultLiveProbeInterval, help)
161
162 help = fmt.Sprintf("Number of seconds for liveliness check if probe is not running")
163 flag.DurationVar(&(so.NotLiveProbeInterval), "not_live_probe_interval", defaultNotLiveProbeInterval, help)
164
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +0530165 help = fmt.Sprintf("Number of seconds for heartbeat check interval.")
166 flag.DurationVar(&(so.HeartbeatCheckInterval), "hearbeat_check_interval", defaultHearbeatCheckInterval, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400167
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +0530168 help = fmt.Sprintf("Number of seconds adapter has to wait before reporting core on the hearbeat check failure.")
169 flag.DurationVar(&(so.HeartbeatFailReportInterval), "hearbeat_fail_interval", defaultHearbeatFailReportInterval, help)
170
171 help = fmt.Sprintf("Number of seconds for GRPC timeout.")
172 flag.DurationVar(&(so.GrpcTimeoutInterval), "grpc_timeout_interval", defaultGrpcTimeoutInterval, help)
173
Matteo Scandolo3ad5d2b2020-04-02 17:02:04 -0700174 help = "Replica number of this particular instance (default: %s)"
175 flag.IntVar(&(so.CurrentReplica), "current_replica", defaultCurrentReplica, help)
176
177 help = "Total number of instances for this adapter"
178 flag.IntVar(&(so.TotalReplicas), "total_replica", defaultTotalReplicas, help)
179
Girish Kumar11e15972020-06-15 14:51:10 +0000180 help = fmt.Sprintf("Whether to send logs to tracing agent?")
181 flag.BoolVar(&(so.TraceEnabled), "trace_enabled", defaultTraceEnabled, help)
182
183 help = fmt.Sprintf("The address of tracing agent to which span info should be sent.")
184 flag.StringVar(&(so.TraceAgentAddress), "trace_agent_address", defaultTraceAgentAddress, help)
185
186 help = fmt.Sprintf("Whether to enrich log statements with fields denoting operation being executed for achieving correlation?")
187 flag.BoolVar(&(so.LogCorrelationEnabled), "log_correlation_enabled", defaultLogCorrelationEnabled, help)
188
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +0530189 flag.Parse()
Girish Gowdru0c588b22019-04-23 23:24:56 -0400190 containerName := getContainerInfo()
191 if len(containerName) > 0 {
192 so.InstanceID = containerName
193 }
194
195}
196
197func getContainerInfo() string {
198 return os.Getenv("HOSTNAME")
199}