blob: 6fc6c77b845676d16e2919e3bc7b6a738f25dbd6 [file] [log] [blame]
Matteo Scandoloa8bd93e2018-09-13 13:36:50 -07001// Copyright 2018 Open Networking Foundation
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
Matteo Scandolo189526a2018-07-13 09:10:23 -070015package main
16
17import (
kesavandc71914f2022-03-25 11:19:03 +053018 "context"
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053019 "io/ioutil"
20 "log"
Matteo Scandolo189526a2018-07-13 09:10:23 -070021 "net/http"
kartikey dubey72ef3b82019-05-27 06:50:04 +000022 "strconv"
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053023 "strings"
Matteo Scandoloaab36db2018-10-09 19:54:11 -070024 "sync"
kesavand2cde6582020-06-22 04:56:23 -040025
26 "gerrit.opencord.org/kafka-topic-exporter/common/logger"
kesavandc71914f2022-03-25 11:19:03 +053027 "gerrit.opencord.org/kafka-topic-exporter/utils"
kesavand2cde6582020-06-22 04:56:23 -040028 "github.com/Shopify/sarama"
29 "github.com/prometheus/client_golang/prometheus"
30 "github.com/prometheus/client_golang/prometheus/promhttp"
31 "gopkg.in/yaml.v2"
Matteo Scandolo189526a2018-07-13 09:10:23 -070032)
33
kesavandc71914f2022-03-25 11:19:03 +053034const (
35 volthaEventsTopic = "voltha.events"
36 consumerGroup = "kte_grp"
37 cDefaultPartitions = 1
38 cDefaultReplicas = 1
39)
40
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053041func kafkaInit(broker BrokerInfo) {
Matteo Scandolo189526a2018-07-13 09:10:23 -070042 config := sarama.NewConfig()
kesavandc71914f2022-03-25 11:19:03 +053043
Matteo Scandolo189526a2018-07-13 09:10:23 -070044 config.Consumer.Return.Errors = true
kesavandc71914f2022-03-25 11:19:03 +053045 config.Metadata.AllowAutoTopicCreation = false
Matteo Scandoloaab36db2018-10-09 19:54:11 -070046 var wg sync.WaitGroup
47
kesavandc71914f2022-03-25 11:19:03 +053048 consumer, err := sarama.NewConsumerGroup([]string{broker.Host}, consumerGroup, config)
kartikey dubey72ef3b82019-05-27 06:50:04 +000049
Matteo Scandolo189526a2018-07-13 09:10:23 -070050 if err != nil {
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053051 logger.Panic("kafkaInit panic")
Matteo Scandolo189526a2018-07-13 09:10:23 -070052 panic(err)
53 }
54 defer func() {
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053055 logger.Debug("kafkaInit close connection")
kesavandc71914f2022-03-25 11:19:03 +053056 if err := consumer.Close(); err != nil {
Matteo Scandolo189526a2018-07-13 09:10:23 -070057 panic(err)
58 }
59 }()
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053060
kesavandc71914f2022-03-25 11:19:03 +053061 clusterAdmin, err := sarama.NewClusterAdmin([]string{broker.Host}, config)
62 if err != nil {
63 logger.Panic("Fail to create cluster admin")
64 panic(err)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053065 }
Matteo Scandolo189526a2018-07-13 09:10:23 -070066
kesavandc71914f2022-03-25 11:19:03 +053067 // read topics from config
68 topics := broker.Topics
69 //conusmerTopics := strings.Join(topics, ",")
70 logger.Info("conusmer topics are %s", topics)
71
72 if broker.Partitions == 0 {
73 broker.Partitions = cDefaultPartitions
74 }
75
76 if broker.Replicas == 0 {
77 broker.Replicas = cDefaultReplicas
78 }
79
80 // create topics
81 for _, topic := range topics {
82 if topic == volthaEventsTopic {
83 continue
84 }
85 logger.Info("creating topic [%s] with [%d] partitions and [%d] replicas ", topic, broker.Partitions, broker.Replicas)
86 err := createTopic(clusterAdmin, topic, broker.Partitions, broker.Replicas)
87 if err != nil {
88 logger.Panic("Fail to create topic %s", err)
89 }
90
91 }
92
93 ctx, cancel := context.WithCancel(context.Background())
94
95 wg.Add(1)
96
97 go topicListener(ctx, topics, consumer, wg)
98
Matteo Scandoloaab36db2018-10-09 19:54:11 -070099 wg.Wait()
kesavandc71914f2022-03-25 11:19:03 +0530100 cancel()
101}
102
103func createTopic(clusterAdmin sarama.ClusterAdmin, topic string, numPartitions int, replFactor int) error {
104 topicDetail := &sarama.TopicDetail{}
105
106 topicDetail.NumPartitions = int32(numPartitions)
107 topicDetail.ReplicationFactor = int16(replFactor)
108
109 topicDetail.ConfigEntries = make(map[string]*string)
110
111 err := clusterAdmin.CreateTopic(topic, topicDetail, false)
112 switch typedErr := err.(type) {
113 case *sarama.TopicError:
114 if typedErr.Err == sarama.ErrTopicAlreadyExists {
115 err = nil
116 }
117 }
118 if err != nil {
119 return err
120 }
121 return nil
Matteo Scandolo189526a2018-07-13 09:10:23 -0700122}
123
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530124func runServer(target TargetInfo) {
125 if target.Port == 0 {
126 logger.Warn("Prometheus target port not configured, using default 8080")
127 target.Port = 8080
128 }
129 logger.Debug("Starting HTTP Server on %d port", target.Port)
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530130 http.Handle("/metrics", promhttp.Handler())
131 err := http.ListenAndServe(":"+strconv.Itoa(target.Port), nil)
132 if err != nil {
133 logger.Error("HTTP Server Error: %s", err.Error())
kesavand6753e5e2020-04-28 03:34:21 -0400134 }
Matteo Scandolo189526a2018-07-13 09:10:23 -0700135}
136
137func init() {
Matteo Scandolo189526a2018-07-13 09:10:23 -0700138 // register metrics within Prometheus
kesavand6753e5e2020-04-28 03:34:21 -0400139 prometheus.MustRegister(volthaOltTxBytesTotal)
140 prometheus.MustRegister(volthaOltRxBytesTotal)
141 prometheus.MustRegister(volthaOltTxPacketsTotal)
142 prometheus.MustRegister(volthaOltRxPacketsTotal)
143 prometheus.MustRegister(volthaOltTxErrorPacketsTotal)
144 prometheus.MustRegister(volthaOltRxErrorPacketsTotal)
145 prometheus.MustRegister(volthaOltTxBroadcastPacketsTotal)
146 prometheus.MustRegister(volthaOltTxUnicastPacketsTotal)
147 prometheus.MustRegister(volthaOltTxMulticastPacketsTotal)
148 prometheus.MustRegister(volthaOltRxBroadcastPacketsTotal)
149 prometheus.MustRegister(volthaOltRxUnicastPacketsTotal)
150 prometheus.MustRegister(volthaOltRxMulticastPacketsTotal)
Matteo Scandoloaab36db2018-10-09 19:54:11 -0700151
Ganesh Bhure967018e2019-07-29 14:48:32 +0530152 prometheus.MustRegister(VolthaOnuLaserBiasCurrent)
153 prometheus.MustRegister(volthaOnuTemperature)
154 prometheus.MustRegister(VolthaOnuPowerFeedVoltage)
155 prometheus.MustRegister(VolthaOnuMeanOpticalLaunchPower)
156 prometheus.MustRegister(VolthaOnuReceivedOpticalPower)
kesavand6753e5e2020-04-28 03:34:21 -0400157 prometheus.MustRegister(VolthaOnuTransmtOpticalPower)
158
159 prometheus.MustRegister(volthaOnuFecCorrectedCodewordsTotal)
160 prometheus.MustRegister(volthaOnuFecCodewordsTotal)
161 prometheus.MustRegister(volthaOnuFecCorrectedBytesTotal)
162 prometheus.MustRegister(volthaOnuFecSecondsTotal)
163 prometheus.MustRegister(volthaOnuFecUncorrectablewordsTotal)
164
165 prometheus.MustRegister(volthaEthernetUniSingleCollisionTotal)
166 prometheus.MustRegister(volthaEthernetUniMacLayerTramsmitErrorTotal)
167 prometheus.MustRegister(volthaEthernetUniMultiCollisionTotal)
168 prometheus.MustRegister(volthaEthernetUniFramestooLongTotal)
169 prometheus.MustRegister(volthaEthernetUniAlignmentErrorTotal)
170 prometheus.MustRegister(volthaEthernetUniCarrierErrorTotal)
171 prometheus.MustRegister(volthaEthernetUniExcessiveCollisionErrorTotal)
172 prometheus.MustRegister(volthaEthernetUniDeferredTxTotal)
173 prometheus.MustRegister(volthaEthernetUniLateCollisionTotal)
174 prometheus.MustRegister(volthaEthernetUniBufferOverflowsRxErrorTotal)
175 prometheus.MustRegister(volthaEthernetUniFcsErrorTotal)
176 prometheus.MustRegister(volthaEthernetUniSqeErrorTotal)
177 prometheus.MustRegister(volthaEthernetUniBufferOverflowsTxErrorTotal)
178
179 prometheus.MustRegister(volthaOnuBridgePortRxBytesTotal)
180 prometheus.MustRegister(volthaOnuBridgePortRxPacketsTotal)
181 prometheus.MustRegister(volthaOnuBridgePort_64octetRxPacketsTotal)
182 prometheus.MustRegister(volthaOnuBridgePort_65_127_octetRxPacketsTotal)
183 prometheus.MustRegister(volthaOnuBridgePort_128_255_octetRxPacketsTotal)
184 prometheus.MustRegister(volthaOnuBridgePort_256_511_octetRxPacketsTotal)
185 prometheus.MustRegister(volthaOnuBridgePort_512_1023_octetRxPacketsTotal)
186 prometheus.MustRegister(volthaOnuBridgePort_1024_1518_octetRxPacketsTotal)
187 prometheus.MustRegister(volthaOnuBridgePortRxMulticastPacketsTotal)
188 prometheus.MustRegister(volthaOnuBridgePortRxBroadcastPacketsTotal)
189 prometheus.MustRegister(volthaOnuBridgePortRxOversizePacketsTotal)
190 prometheus.MustRegister(volthaOnuBridgePortRxCrcErrorPacketsTotal)
191 prometheus.MustRegister(volthaOnuBridgePortRxUndersizePacketsTotal)
192 prometheus.MustRegister(volthaOnuBridgePortRxDropEventsTotal)
193
194 prometheus.MustRegister(volthaOnuBridgePortTxBytesTotal)
195 prometheus.MustRegister(volthaOnuBridgePortTxPacketsTotal)
196 prometheus.MustRegister(volthaOnuBridgePort_64octetTxPacketsTotal)
197 prometheus.MustRegister(volthaOnuBridgePort_65_127_octetTxPacketsTotal)
198 prometheus.MustRegister(volthaOnuBridgePort_128_255_octetTxPacketsTotal)
199 prometheus.MustRegister(volthaOnuBridgePort_256_511_octetTxPacketsTotal)
200 prometheus.MustRegister(volthaOnuBridgePort_512_1023_octetTxPacketsTotal)
201 prometheus.MustRegister(volthaOnuBridgePort_1024_1518_octetTxPacketsTotal)
202 prometheus.MustRegister(volthaOnuBridgePortTxMulticastPacketsTotal)
203 prometheus.MustRegister(volthaOnuBridgePortTxBroadcastPacketsTotal)
204 prometheus.MustRegister(volthaOnuBridgePortTxOversizePacketsTotal)
205 prometheus.MustRegister(volthaOnuBridgePortTxCrcErrorPacketsTotal)
206 prometheus.MustRegister(volthaOnuBridgePortTxUndersizePacketsTotal)
207 prometheus.MustRegister(volthaOnuBridgePortTxDropEventsTotal)
Ganesh Bhure967018e2019-07-29 14:48:32 +0530208
Matteo Scandoloaab36db2018-10-09 19:54:11 -0700209 prometheus.MustRegister(onosTxBytesTotal)
210 prometheus.MustRegister(onosRxBytesTotal)
211 prometheus.MustRegister(onosTxPacketsTotal)
212 prometheus.MustRegister(onosRxPacketsTotal)
213 prometheus.MustRegister(onosTxDropPacketsTotal)
214 prometheus.MustRegister(onosRxDropPacketsTotal)
kartikey dubey72ef3b82019-05-27 06:50:04 +0000215
216 prometheus.MustRegister(onosaaaRxAcceptResponses)
217 prometheus.MustRegister(onosaaaRxRejectResponses)
218 prometheus.MustRegister(onosaaaRxChallengeResponses)
219 prometheus.MustRegister(onosaaaTxAccessRequests)
220 prometheus.MustRegister(onosaaaRxInvalidValidators)
221 prometheus.MustRegister(onosaaaRxUnknownType)
222 prometheus.MustRegister(onosaaaPendingRequests)
223 prometheus.MustRegister(onosaaaRxDroppedResponses)
224 prometheus.MustRegister(onosaaaRxMalformedResponses)
225 prometheus.MustRegister(onosaaaRxUnknownserver)
226 prometheus.MustRegister(onosaaaRequestRttMillis)
227 prometheus.MustRegister(onosaaaRequestReTx)
Daniele Morobe242582019-10-01 14:02:46 -0700228
Daniele Moro707c2092019-12-06 16:39:18 -0800229 prometheus.MustRegister(onosBngUpTxBytes)
230 prometheus.MustRegister(onosBngUpTxPackets)
231 prometheus.MustRegister(onosBngUpDropBytes)
232 prometheus.MustRegister(onosBngUpDropPackets)
233 prometheus.MustRegister(onosBngControlPackets)
234 prometheus.MustRegister(onosBngDownRxBytes)
235 prometheus.MustRegister(onosBngDownRxPackets)
236 prometheus.MustRegister(onosBngDownTxBytes)
237 prometheus.MustRegister(onosBngDownTxPackets)
238 prometheus.MustRegister(onosBngDownDropPackets)
239 prometheus.MustRegister(onosBngDownDropBytes)
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530240
241 prometheus.MustRegister(deviceLaserBiasCurrent)
242 prometheus.MustRegister(deviceTemperature)
243 prometheus.MustRegister(deviceTxPower)
244 prometheus.MustRegister(deviceVoltage)
Shubham Sharma57600bf2019-08-09 07:09:57 +0000245
246 prometheus.MustRegister(onosaaaRxEapolLogoff)
247 prometheus.MustRegister(onosaaaTxEapolResIdentityMsg)
248 prometheus.MustRegister(onosaaaTxAuthSuccess)
249 prometheus.MustRegister(onosaaaTxAuthFailure)
250 prometheus.MustRegister(onosaaaTxStartReq)
251 prometheus.MustRegister(onosaaaEapPktTxAuthChooseEap)
252 prometheus.MustRegister(onosaaaTxRespnotNak)
shubham sharmae7f85752019-09-16 13:37:18 +0000253
kesavand6753e5e2020-04-28 03:34:21 -0400254 prometheus.MustRegister(onosaaaEapolFramesTx)
shubham sharmae7f85752019-09-16 13:37:18 +0000255 prometheus.MustRegister(onosaaaAuthStateIdle)
256 prometheus.MustRegister(onosaaaRequestIdFramesTx)
257 prometheus.MustRegister(onosaaaRequestEapFramesTx)
258 prometheus.MustRegister(onosaaaInvalidPktType)
259 prometheus.MustRegister(onosaaaInvalidBodyLength)
260 prometheus.MustRegister(onosaaaValidEapolFramesRx)
261 prometheus.MustRegister(onosaaaPendingResSupplicant)
262 prometheus.MustRegister(onosaaaRxResIdEapFrames)
kesavand2cde6582020-06-22 04:56:23 -0400263
264 //device metrics
265 //TODO: Check if component level temperatures are supported by Devices,If not remove in later versions of exporter
266 prometheus.MustRegister(oltDeviceCpuTemp)
267 prometheus.MustRegister(oltDeviceCpuUsagePercent)
268 prometheus.MustRegister(oltDeviceFanSpeed)
269 prometheus.MustRegister(oltDeviceDiskTemp)
270 prometheus.MustRegister(oltDeviceDiskUsagePercent)
271 prometheus.MustRegister(oltDeviceRamTemp)
272 prometheus.MustRegister(oltDeviceRamUsagePercent)
273 prometheus.MustRegister(oltDevicePowerUsagePercent)
274 prometheus.MustRegister(oltDeviceInnerSurroundTemp)
275 prometheus.MustRegister(oltDevicePowerUsage)
Matteo Scandolo189526a2018-07-13 09:10:23 -0700276}
277
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530278func loadConfigFile() Config {
279 m := Config{}
280 // this file path is configmap mounted in pod yaml
281 yamlFile, err := ioutil.ReadFile("/etc/config/conf.yaml")
282 if err != nil {
283 log.Printf("yamlFile.Get err: %v ", err)
284 }
285 err = yaml.Unmarshal(yamlFile, &m)
286 if err != nil {
287 log.Fatalf("Unmarshal: %v", err)
288 }
289 return m
Matteo Scandolo189526a2018-07-13 09:10:23 -0700290}
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530291
292func main() {
293 // load configuration
294 conf := loadConfigFile()
295
296 // logger setup
297 logger.Setup(conf.Logger.Host, strings.ToUpper(conf.Logger.LogLevel))
298 logger.Info("Connecting to broker: [%s]", conf.Broker.Host)
kesavand0c064922020-12-15 15:36:25 +0530299 utils.OnuSNhex = conf.Conv.Onusnhex
300 logger.Info("The utils.OnuSNhex : [%t]", utils.OnuSNhex)
301 logger.Info("The conf.Conv.Onusnformat is : [%t]", conf.Conv.Onusnhex)
302
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530303 go kafkaInit(conf.Broker)
304 runServer(conf.Target)
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530305}