blob: eea60802a1351b35402f44a7a29dd40e79f0b77a [file] [log] [blame]
Stephane Barbariea75791c2019-01-24 10:58:06 -05001/*
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 */
16package config
17
18import (
19 "flag"
20 "fmt"
Scott Baker807addd2019-10-24 15:16:21 -070021 "github.com/opencord/voltha-lib-go/v2/pkg/log"
Stephane Barbariea75791c2019-01-24 10:58:06 -050022 "os"
Girish Kumar91482642019-11-08 11:38:03 +000023 "time"
Stephane Barbariea75791c2019-01-24 10:58:06 -050024)
25
26// RO Core service default constants
27const (
28 ConsulStoreName = "consul"
29 EtcdStoreName = "etcd"
30 default_InstanceID = "rocore001"
31 default_GrpcPort = 50057
32 default_GrpcHost = ""
33 default_KVStoreType = EtcdStoreName
34 default_KVStoreTimeout = 5 //in seconds
35 default_KVStoreHost = "127.0.0.1"
36 default_KVStorePort = 2379 // Consul = 8500; Etcd = 2379
37 default_KVTxnKeyDelTime = 60
38 default_LogLevel = 0
39 default_Banner = false
David K. Bainbridgef430cd52019-05-28 15:00:35 -070040 default_DisplayVersionOnly = false
Stephane Barbariea75791c2019-01-24 10:58:06 -050041 default_CoreTopic = "rocore"
42 default_ROCoreEndpoint = "rocore"
43 default_ROCoreKey = "pki/voltha.key"
44 default_ROCoreCert = "pki/voltha.crt"
45 default_ROCoreCA = "pki/voltha-CA.pem"
46 default_Affinity_Router_Topic = "affinityRouter"
Kent Hagermanc4618832019-10-07 12:24:36 -040047 default_ProbeHost = ""
Hardik Windlassdc63dde2019-09-30 07:15:13 +000048 default_ProbePort = 8080
Girish Kumar91482642019-11-08 11:38:03 +000049 default_LiveProbeInterval = 60 * time.Second
50 default_NotLiveProbeInterval = 5 * time.Second // Probe more frequently to detect Recovery early
Stephane Barbariea75791c2019-01-24 10:58:06 -050051)
52
53// ROCoreFlags represents the set of configurations used by the read-only core service
54type ROCoreFlags struct {
55 // Command line parameters
Girish Kumar91482642019-11-08 11:38:03 +000056 InstanceID string
57 ROCoreEndpoint string
58 GrpcHost string
59 GrpcPort int
60 KVStoreType string
61 KVStoreTimeout int // in seconds
62 KVStoreHost string
63 KVStorePort int
64 KVTxnKeyDelTime int
65 CoreTopic string
66 LogLevel int
67 Banner bool
68 DisplayVersionOnly bool
69 ROCoreKey string
70 ROCoreCert string
71 ROCoreCA string
72 AffinityRouterTopic string
73 ProbeHost string
74 ProbePort int
75 LiveProbeInterval time.Duration
76 NotLiveProbeInterval time.Duration
Stephane Barbariea75791c2019-01-24 10:58:06 -050077}
78
79func init() {
80 log.AddPackage(log.JSON, log.WarnLevel, nil)
81}
82
83// NewROCoreFlags returns a new ROCore config
84func NewROCoreFlags() *ROCoreFlags {
85 var roCoreFlag = ROCoreFlags{ // Default values
Girish Kumar91482642019-11-08 11:38:03 +000086 InstanceID: default_InstanceID,
87 ROCoreEndpoint: default_ROCoreEndpoint,
88 GrpcHost: default_GrpcHost,
89 GrpcPort: default_GrpcPort,
90 KVStoreType: default_KVStoreType,
91 KVStoreTimeout: default_KVStoreTimeout,
92 KVStoreHost: default_KVStoreHost,
93 KVStorePort: default_KVStorePort,
94 KVTxnKeyDelTime: default_KVTxnKeyDelTime,
95 CoreTopic: default_CoreTopic,
96 LogLevel: default_LogLevel,
97 Banner: default_Banner,
98 DisplayVersionOnly: default_DisplayVersionOnly,
99 ROCoreKey: default_ROCoreKey,
100 ROCoreCert: default_ROCoreCert,
101 ROCoreCA: default_ROCoreCA,
102 AffinityRouterTopic: default_Affinity_Router_Topic,
103 ProbeHost: default_ProbeHost,
104 ProbePort: default_ProbePort,
105 LiveProbeInterval: default_LiveProbeInterval,
106 NotLiveProbeInterval: default_NotLiveProbeInterval,
Stephane Barbariea75791c2019-01-24 10:58:06 -0500107 }
108 return &roCoreFlag
109}
110
111// ParseCommandArguments parses the arguments when running read-only core service
112func (cf *ROCoreFlags) ParseCommandArguments() {
113
114 var help string
115
116 help = fmt.Sprintf("RO core endpoint address")
117 flag.StringVar(&(cf.ROCoreEndpoint), "vcore-endpoint", default_ROCoreEndpoint, help)
118
119 help = fmt.Sprintf("GRPC server - host")
120 flag.StringVar(&(cf.GrpcHost), "grpc_host", default_GrpcHost, help)
121
122 help = fmt.Sprintf("GRPC server - port")
123 flag.IntVar(&(cf.GrpcPort), "grpc_port", default_GrpcPort, help)
124
125 help = fmt.Sprintf("RO Core topic")
126 flag.StringVar(&(cf.CoreTopic), "ro_core_topic", default_CoreTopic, help)
127
128 help = fmt.Sprintf("Affinity Router topic")
129 flag.StringVar(&(cf.AffinityRouterTopic), "affinity_router_topic", default_Affinity_Router_Topic, help)
130
131 help = fmt.Sprintf("KV store type")
132 flag.StringVar(&(cf.KVStoreType), "kv_store_type", default_KVStoreType, help)
133
134 help = fmt.Sprintf("The default timeout when making a kv store request")
135 flag.IntVar(&(cf.KVStoreTimeout), "kv_store_request_timeout", default_KVStoreTimeout, help)
136
137 help = fmt.Sprintf("KV store host")
138 flag.StringVar(&(cf.KVStoreHost), "kv_store_host", default_KVStoreHost, help)
139
140 help = fmt.Sprintf("KV store port")
141 flag.IntVar(&(cf.KVStorePort), "kv_store_port", default_KVStorePort, help)
142
143 help = fmt.Sprintf("The time to wait before deleting a completed transaction key")
144 flag.IntVar(&(cf.KVTxnKeyDelTime), "kv_txn_delete_time", default_KVTxnKeyDelTime, help)
145
146 help = fmt.Sprintf("Log level")
147 flag.IntVar(&(cf.LogLevel), "log_level", default_LogLevel, help)
148
149 help = fmt.Sprintf("Show startup banner log lines")
150 flag.BoolVar(&cf.Banner, "banner", default_Banner, help)
151
David K. Bainbridgef430cd52019-05-28 15:00:35 -0700152 help = fmt.Sprintf("Show version information and exit")
153 flag.BoolVar(&cf.DisplayVersionOnly, "version", default_DisplayVersionOnly, help)
154
Kent Hagermanc4618832019-10-07 12:24:36 -0400155 help = fmt.Sprintf("The address on which to listen to answer liveness and readiness probe queries over HTTP.")
156 flag.StringVar(&(cf.ProbeHost), "probe_host", default_ProbeHost, help)
157
Hardik Windlassdc63dde2019-09-30 07:15:13 +0000158 help = fmt.Sprintf("The port on which to listen to answer liveness and readiness probe queries over HTTP.")
159 flag.IntVar(&(cf.ProbePort), "probe_port", default_ProbePort, help)
160
Girish Kumar91482642019-11-08 11:38:03 +0000161 help = fmt.Sprintf("Time interval between liveness probes while in a live state")
162 flag.DurationVar(&(cf.LiveProbeInterval), "live_probe_interval", default_LiveProbeInterval, help)
163
164 help = fmt.Sprintf("Time interval between liveness probes while in a not live state")
165 flag.DurationVar(&(cf.NotLiveProbeInterval), "not_live_probe_interval", default_NotLiveProbeInterval, help)
166
Stephane Barbariea75791c2019-01-24 10:58:06 -0500167 flag.Parse()
168
169 containerName := getContainerInfo()
170 if len(containerName) > 0 {
171 cf.InstanceID = containerName
172 }
173
174}
175
176func getContainerInfo() string {
177 return os.Getenv("HOSTNAME")
178}