blob: 49c52e1d1dc4df27d2cc184296363f8568146545 [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"
31 defaultKafkaadapterhost = "127.0.0.1"
32 defaultKafkaadapterport = 9092
33 defaultKafkaclusterhost = "127.0.0.1"
34 defaultKafkaclusterport = 9094
35 defaultKvstoretype = EtcdStoreName
36 defaultKvstoretimeout = 5 //in seconds
37 defaultKvstorehost = "127.0.0.1"
38 defaultKvstoreport = 2379 // Consul = 8500; Etcd = 2379
David Bainbridge2b3d4882020-03-17 15:06:39 -070039 defaultLoglevel = "WARN"
cbabu116b73f2019-12-10 17:56:32 +053040 defaultBanner = false
41 defaultDisplayVersionOnly = false
42 defaultTopic = "openolt"
43 defaultCoretopic = "rwcore"
44 defaultEventtopic = "voltha.events"
45 defaultOnunumber = 1
46 defaultProbeHost = ""
47 defaultProbePort = 8080
48 defaultLiveProbeInterval = 60 * time.Second
49 defaultNotLiveProbeInterval = 5 * time.Second // Probe more frequently when not alive
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053050 //defaultHearbeatFailReportInterval is the time in seconds the adapter will keep checking the hardware for heartbeat.
Chaitrashree G Sa4649252020-03-11 21:24:11 -040051 defaultHearbeatCheckInterval = 15 * time.Second
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053052 // defaultHearbeatFailReportInterval is the time adapter will wait before updating the state to the core.
Chaitrashree G Sa4649252020-03-11 21:24:11 -040053 defaultHearbeatFailReportInterval = 0 * time.Second
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053054 //defaultGrpcTimeoutInterval is the time in seconds a grpc call will wait before returning error.
55 defaultGrpcTimeoutInterval = 2 * time.Second
Girish Gowdru0c588b22019-04-23 23:24:56 -040056)
57
58// AdapterFlags represents the set of configurations used by the read-write adaptercore service
59type AdapterFlags struct {
60 // Command line parameters
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053061 InstanceID string
62 KafkaAdapterHost string
63 KafkaAdapterPort int
64 KafkaClusterHost string
65 KafkaClusterPort int
66 KVStoreType string
67 KVStoreTimeout int // in seconds
68 KVStoreHost string
69 KVStorePort int
70 Topic string
71 CoreTopic string
72 EventTopic string
Rohan Agrawal2488f192020-01-31 09:26:55 +000073 LogLevel string
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053074 OnuNumber int
75 Banner bool
76 DisplayVersionOnly bool
77 ProbeHost string
78 ProbePort int
79 LiveProbeInterval time.Duration
80 NotLiveProbeInterval time.Duration
81 HeartbeatCheckInterval time.Duration
82 HeartbeatFailReportInterval time.Duration
83 GrpcTimeoutInterval time.Duration
Girish Gowdru0c588b22019-04-23 23:24:56 -040084}
85
Girish Gowdru6a80bbd2019-07-02 07:36:09 -070086// NewAdapterFlags returns a new RWCore config
Girish Gowdru0c588b22019-04-23 23:24:56 -040087func NewAdapterFlags() *AdapterFlags {
88 var adapterFlags = AdapterFlags{ // Default values
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053089 InstanceID: defaultInstanceid,
90 KafkaAdapterHost: defaultKafkaadapterhost,
91 KafkaAdapterPort: defaultKafkaadapterport,
92 KafkaClusterHost: defaultKafkaclusterhost,
93 KafkaClusterPort: defaultKafkaclusterport,
94 KVStoreType: defaultKvstoretype,
95 KVStoreTimeout: defaultKvstoretimeout,
96 KVStoreHost: defaultKvstorehost,
97 KVStorePort: defaultKvstoreport,
98 Topic: defaultTopic,
99 CoreTopic: defaultCoretopic,
100 EventTopic: defaultEventtopic,
101 LogLevel: defaultLoglevel,
102 OnuNumber: defaultOnunumber,
103 Banner: defaultBanner,
104 DisplayVersionOnly: defaultDisplayVersionOnly,
105 ProbeHost: defaultProbeHost,
106 ProbePort: defaultProbePort,
107 LiveProbeInterval: defaultLiveProbeInterval,
108 NotLiveProbeInterval: defaultNotLiveProbeInterval,
109 HeartbeatCheckInterval: defaultHearbeatCheckInterval,
110 HeartbeatFailReportInterval: defaultHearbeatFailReportInterval,
111 GrpcTimeoutInterval: defaultGrpcTimeoutInterval,
Girish Gowdru0c588b22019-04-23 23:24:56 -0400112 }
113 return &adapterFlags
114}
115
116// ParseCommandArguments parses the arguments when running read-write adaptercore service
117func (so *AdapterFlags) ParseCommandArguments() {
118
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700119 help := fmt.Sprintf("Kafka - Adapter messaging host")
120 flag.StringVar(&(so.KafkaAdapterHost), "kafka_adapter_host", defaultKafkaadapterhost, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400121
122 help = fmt.Sprintf("Kafka - Adapter messaging port")
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700123 flag.IntVar(&(so.KafkaAdapterPort), "kafka_adapter_port", defaultKafkaadapterport, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400124
125 help = fmt.Sprintf("Kafka - Cluster messaging host")
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700126 flag.StringVar(&(so.KafkaClusterHost), "kafka_cluster_host", defaultKafkaclusterhost, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400127
128 help = fmt.Sprintf("Kafka - Cluster messaging port")
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700129 flag.IntVar(&(so.KafkaClusterPort), "kafka_cluster_port", defaultKafkaclusterport, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400130
131 help = fmt.Sprintf("Open OLT topic")
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700132 flag.StringVar(&(so.Topic), "adapter_topic", defaultTopic, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400133
134 help = fmt.Sprintf("Core topic")
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700135 flag.StringVar(&(so.CoreTopic), "core_topic", defaultCoretopic, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400136
Devmalya Paulfb990a52019-07-09 10:01:49 -0400137 help = fmt.Sprintf("Event topic")
138 flag.StringVar(&(so.EventTopic), "event_topic", defaultEventtopic, help)
139
Girish Gowdru0c588b22019-04-23 23:24:56 -0400140 help = fmt.Sprintf("KV store type")
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700141 flag.StringVar(&(so.KVStoreType), "kv_store_type", defaultKvstoretype, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400142
143 help = fmt.Sprintf("The default timeout when making a kv store request")
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700144 flag.IntVar(&(so.KVStoreTimeout), "kv_store_request_timeout", defaultKvstoretimeout, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400145
146 help = fmt.Sprintf("KV store host")
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700147 flag.StringVar(&(so.KVStoreHost), "kv_store_host", defaultKvstorehost, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400148
149 help = fmt.Sprintf("KV store port")
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700150 flag.IntVar(&(so.KVStorePort), "kv_store_port", defaultKvstoreport, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400151
152 help = fmt.Sprintf("Log level")
Rohan Agrawal2488f192020-01-31 09:26:55 +0000153 flag.StringVar(&(so.LogLevel), "log_level", defaultLoglevel, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400154
155 help = fmt.Sprintf("Number of ONUs")
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700156 flag.IntVar(&(so.OnuNumber), "onu_number", defaultOnunumber, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400157
158 help = fmt.Sprintf("Show startup banner log lines")
Matt Jeanneretf880eb62019-07-16 20:08:03 -0400159 flag.BoolVar(&(so.Banner), "banner", defaultBanner, help)
160
161 help = fmt.Sprintf("Show version information and exit")
162 flag.BoolVar(&(so.DisplayVersionOnly), "version", defaultDisplayVersionOnly, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400163
Rohan Agrawal828bf4e2019-10-22 10:13:19 +0000164 help = fmt.Sprintf("The address on which to listen to answer liveness and readiness probe queries over HTTP.")
165 flag.StringVar(&(so.ProbeHost), "probe_host", defaultProbeHost, help)
166
167 help = fmt.Sprintf("The port on which to listen to answer liveness and readiness probe queries over HTTP.")
168 flag.IntVar(&(so.ProbePort), "probe_port", defaultProbePort, help)
169
cbabu116b73f2019-12-10 17:56:32 +0530170 help = fmt.Sprintf("Number of seconds for the default liveliness check")
171 flag.DurationVar(&(so.LiveProbeInterval), "live_probe_interval", defaultLiveProbeInterval, help)
172
173 help = fmt.Sprintf("Number of seconds for liveliness check if probe is not running")
174 flag.DurationVar(&(so.NotLiveProbeInterval), "not_live_probe_interval", defaultNotLiveProbeInterval, help)
175
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +0530176 help = fmt.Sprintf("Number of seconds for heartbeat check interval.")
177 flag.DurationVar(&(so.HeartbeatCheckInterval), "hearbeat_check_interval", defaultHearbeatCheckInterval, help)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400178
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +0530179 help = fmt.Sprintf("Number of seconds adapter has to wait before reporting core on the hearbeat check failure.")
180 flag.DurationVar(&(so.HeartbeatFailReportInterval), "hearbeat_fail_interval", defaultHearbeatFailReportInterval, help)
181
182 help = fmt.Sprintf("Number of seconds for GRPC timeout.")
183 flag.DurationVar(&(so.GrpcTimeoutInterval), "grpc_timeout_interval", defaultGrpcTimeoutInterval, help)
184
185 flag.Parse()
Girish Gowdru0c588b22019-04-23 23:24:56 -0400186 containerName := getContainerInfo()
187 if len(containerName) > 0 {
188 so.InstanceID = containerName
189 }
190
191}
192
193func getContainerInfo() string {
194 return os.Getenv("HOSTNAME")
195}