blob: 6838cd7d469b304e48264fa1d296eace1688f76f [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 (
kartikey dubey72ef3b82019-05-27 06:50:04 +000018 "gerrit.opencord.org/kafka-topic-exporter/common/logger"
19 "github.com/Shopify/sarama"
20 "github.com/prometheus/client_golang/prometheus"
Ganesh Bhure0f2449c2019-07-15 10:31:38 +053021 "github.com/prometheus/client_golang/prometheus/promhttp"
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053022 "gopkg.in/yaml.v2"
23 "io/ioutil"
24 "log"
Matteo Scandolo189526a2018-07-13 09:10:23 -070025 "net/http"
kartikey dubey72ef3b82019-05-27 06:50:04 +000026 "strconv"
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053027 "strings"
Matteo Scandoloaab36db2018-10-09 19:54:11 -070028 "sync"
Matteo Scandolo189526a2018-07-13 09:10:23 -070029)
30
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053031func kafkaInit(broker BrokerInfo) {
Matteo Scandolo189526a2018-07-13 09:10:23 -070032 config := sarama.NewConfig()
33 config.Consumer.Return.Errors = true
Matteo Scandoloaab36db2018-10-09 19:54:11 -070034 var wg sync.WaitGroup
35
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053036 master, err := sarama.NewConsumer([]string{broker.Host}, config)
kartikey dubey72ef3b82019-05-27 06:50:04 +000037
Matteo Scandolo189526a2018-07-13 09:10:23 -070038 if err != nil {
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053039 logger.Panic("kafkaInit panic")
Matteo Scandolo189526a2018-07-13 09:10:23 -070040 panic(err)
41 }
42 defer func() {
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053043 logger.Debug("kafkaInit close connection")
Matteo Scandolo189526a2018-07-13 09:10:23 -070044 if err := master.Close(); err != nil {
45 panic(err)
46 }
47 }()
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053048
49 // read topics from config
50 topics := broker.Topics
51
52 // we are spinning threads for each topic, we need to wait for
53 // them to exit before stopping the kafka connection
54 wg.Add(len(topics))
55
56 for _, topic := range topics {
57 t := topic
58 go topicListener(&t, master, wg)
59 }
Matteo Scandolo189526a2018-07-13 09:10:23 -070060
Matteo Scandoloaab36db2018-10-09 19:54:11 -070061 wg.Wait()
Matteo Scandolo189526a2018-07-13 09:10:23 -070062}
63
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053064func runServer(target TargetInfo) {
65 if target.Port == 0 {
66 logger.Warn("Prometheus target port not configured, using default 8080")
67 target.Port = 8080
68 }
69 logger.Debug("Starting HTTP Server on %d port", target.Port)
Ganesh Bhure0f2449c2019-07-15 10:31:38 +053070 http.Handle("/metrics", promhttp.Handler())
71 err := http.ListenAndServe(":"+strconv.Itoa(target.Port), nil)
72 if err != nil {
73 logger.Error("HTTP Server Error: %s", err.Error())
kesavand6753e5e2020-04-28 03:34:21 -040074 }
Matteo Scandolo189526a2018-07-13 09:10:23 -070075}
76
77func init() {
Matteo Scandolo189526a2018-07-13 09:10:23 -070078 // register metrics within Prometheus
kesavand6753e5e2020-04-28 03:34:21 -040079 prometheus.MustRegister(volthaOltTxBytesTotal)
80 prometheus.MustRegister(volthaOltRxBytesTotal)
81 prometheus.MustRegister(volthaOltTxPacketsTotal)
82 prometheus.MustRegister(volthaOltRxPacketsTotal)
83 prometheus.MustRegister(volthaOltTxErrorPacketsTotal)
84 prometheus.MustRegister(volthaOltRxErrorPacketsTotal)
85 prometheus.MustRegister(volthaOltTxBroadcastPacketsTotal)
86 prometheus.MustRegister(volthaOltTxUnicastPacketsTotal)
87 prometheus.MustRegister(volthaOltTxMulticastPacketsTotal)
88 prometheus.MustRegister(volthaOltRxBroadcastPacketsTotal)
89 prometheus.MustRegister(volthaOltRxUnicastPacketsTotal)
90 prometheus.MustRegister(volthaOltRxMulticastPacketsTotal)
Matteo Scandoloaab36db2018-10-09 19:54:11 -070091
Ganesh Bhure967018e2019-07-29 14:48:32 +053092 prometheus.MustRegister(VolthaOnuLaserBiasCurrent)
93 prometheus.MustRegister(volthaOnuTemperature)
94 prometheus.MustRegister(VolthaOnuPowerFeedVoltage)
95 prometheus.MustRegister(VolthaOnuMeanOpticalLaunchPower)
96 prometheus.MustRegister(VolthaOnuReceivedOpticalPower)
kesavand6753e5e2020-04-28 03:34:21 -040097 prometheus.MustRegister(VolthaOnuTransmtOpticalPower)
98
99 prometheus.MustRegister(volthaOnuFecCorrectedCodewordsTotal)
100 prometheus.MustRegister(volthaOnuFecCodewordsTotal)
101 prometheus.MustRegister(volthaOnuFecCorrectedBytesTotal)
102 prometheus.MustRegister(volthaOnuFecSecondsTotal)
103 prometheus.MustRegister(volthaOnuFecUncorrectablewordsTotal)
104
105 prometheus.MustRegister(volthaEthernetUniSingleCollisionTotal)
106 prometheus.MustRegister(volthaEthernetUniMacLayerTramsmitErrorTotal)
107 prometheus.MustRegister(volthaEthernetUniMultiCollisionTotal)
108 prometheus.MustRegister(volthaEthernetUniFramestooLongTotal)
109 prometheus.MustRegister(volthaEthernetUniAlignmentErrorTotal)
110 prometheus.MustRegister(volthaEthernetUniCarrierErrorTotal)
111 prometheus.MustRegister(volthaEthernetUniExcessiveCollisionErrorTotal)
112 prometheus.MustRegister(volthaEthernetUniDeferredTxTotal)
113 prometheus.MustRegister(volthaEthernetUniLateCollisionTotal)
114 prometheus.MustRegister(volthaEthernetUniBufferOverflowsRxErrorTotal)
115 prometheus.MustRegister(volthaEthernetUniFcsErrorTotal)
116 prometheus.MustRegister(volthaEthernetUniSqeErrorTotal)
117 prometheus.MustRegister(volthaEthernetUniBufferOverflowsTxErrorTotal)
118
119 prometheus.MustRegister(volthaOnuBridgePortRxBytesTotal)
120 prometheus.MustRegister(volthaOnuBridgePortRxPacketsTotal)
121 prometheus.MustRegister(volthaOnuBridgePort_64octetRxPacketsTotal)
122 prometheus.MustRegister(volthaOnuBridgePort_65_127_octetRxPacketsTotal)
123 prometheus.MustRegister(volthaOnuBridgePort_128_255_octetRxPacketsTotal)
124 prometheus.MustRegister(volthaOnuBridgePort_256_511_octetRxPacketsTotal)
125 prometheus.MustRegister(volthaOnuBridgePort_512_1023_octetRxPacketsTotal)
126 prometheus.MustRegister(volthaOnuBridgePort_1024_1518_octetRxPacketsTotal)
127 prometheus.MustRegister(volthaOnuBridgePortRxMulticastPacketsTotal)
128 prometheus.MustRegister(volthaOnuBridgePortRxBroadcastPacketsTotal)
129 prometheus.MustRegister(volthaOnuBridgePortRxOversizePacketsTotal)
130 prometheus.MustRegister(volthaOnuBridgePortRxCrcErrorPacketsTotal)
131 prometheus.MustRegister(volthaOnuBridgePortRxUndersizePacketsTotal)
132 prometheus.MustRegister(volthaOnuBridgePortRxDropEventsTotal)
133
134 prometheus.MustRegister(volthaOnuBridgePortTxBytesTotal)
135 prometheus.MustRegister(volthaOnuBridgePortTxPacketsTotal)
136 prometheus.MustRegister(volthaOnuBridgePort_64octetTxPacketsTotal)
137 prometheus.MustRegister(volthaOnuBridgePort_65_127_octetTxPacketsTotal)
138 prometheus.MustRegister(volthaOnuBridgePort_128_255_octetTxPacketsTotal)
139 prometheus.MustRegister(volthaOnuBridgePort_256_511_octetTxPacketsTotal)
140 prometheus.MustRegister(volthaOnuBridgePort_512_1023_octetTxPacketsTotal)
141 prometheus.MustRegister(volthaOnuBridgePort_1024_1518_octetTxPacketsTotal)
142 prometheus.MustRegister(volthaOnuBridgePortTxMulticastPacketsTotal)
143 prometheus.MustRegister(volthaOnuBridgePortTxBroadcastPacketsTotal)
144 prometheus.MustRegister(volthaOnuBridgePortTxOversizePacketsTotal)
145 prometheus.MustRegister(volthaOnuBridgePortTxCrcErrorPacketsTotal)
146 prometheus.MustRegister(volthaOnuBridgePortTxUndersizePacketsTotal)
147 prometheus.MustRegister(volthaOnuBridgePortTxDropEventsTotal)
Ganesh Bhure967018e2019-07-29 14:48:32 +0530148
Matteo Scandoloaab36db2018-10-09 19:54:11 -0700149 prometheus.MustRegister(onosTxBytesTotal)
150 prometheus.MustRegister(onosRxBytesTotal)
151 prometheus.MustRegister(onosTxPacketsTotal)
152 prometheus.MustRegister(onosRxPacketsTotal)
153 prometheus.MustRegister(onosTxDropPacketsTotal)
154 prometheus.MustRegister(onosRxDropPacketsTotal)
kartikey dubey72ef3b82019-05-27 06:50:04 +0000155
156 prometheus.MustRegister(onosaaaRxAcceptResponses)
157 prometheus.MustRegister(onosaaaRxRejectResponses)
158 prometheus.MustRegister(onosaaaRxChallengeResponses)
159 prometheus.MustRegister(onosaaaTxAccessRequests)
160 prometheus.MustRegister(onosaaaRxInvalidValidators)
161 prometheus.MustRegister(onosaaaRxUnknownType)
162 prometheus.MustRegister(onosaaaPendingRequests)
163 prometheus.MustRegister(onosaaaRxDroppedResponses)
164 prometheus.MustRegister(onosaaaRxMalformedResponses)
165 prometheus.MustRegister(onosaaaRxUnknownserver)
166 prometheus.MustRegister(onosaaaRequestRttMillis)
167 prometheus.MustRegister(onosaaaRequestReTx)
Daniele Morobe242582019-10-01 14:02:46 -0700168
Daniele Moro707c2092019-12-06 16:39:18 -0800169 prometheus.MustRegister(onosBngUpTxBytes)
170 prometheus.MustRegister(onosBngUpTxPackets)
171 prometheus.MustRegister(onosBngUpDropBytes)
172 prometheus.MustRegister(onosBngUpDropPackets)
173 prometheus.MustRegister(onosBngControlPackets)
174 prometheus.MustRegister(onosBngDownRxBytes)
175 prometheus.MustRegister(onosBngDownRxPackets)
176 prometheus.MustRegister(onosBngDownTxBytes)
177 prometheus.MustRegister(onosBngDownTxPackets)
178 prometheus.MustRegister(onosBngDownDropPackets)
179 prometheus.MustRegister(onosBngDownDropBytes)
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530180
181 prometheus.MustRegister(deviceLaserBiasCurrent)
182 prometheus.MustRegister(deviceTemperature)
183 prometheus.MustRegister(deviceTxPower)
184 prometheus.MustRegister(deviceVoltage)
Shubham Sharma57600bf2019-08-09 07:09:57 +0000185
186 prometheus.MustRegister(onosaaaRxEapolLogoff)
187 prometheus.MustRegister(onosaaaTxEapolResIdentityMsg)
188 prometheus.MustRegister(onosaaaTxAuthSuccess)
189 prometheus.MustRegister(onosaaaTxAuthFailure)
190 prometheus.MustRegister(onosaaaTxStartReq)
191 prometheus.MustRegister(onosaaaEapPktTxAuthChooseEap)
192 prometheus.MustRegister(onosaaaTxRespnotNak)
shubham sharmae7f85752019-09-16 13:37:18 +0000193
kesavand6753e5e2020-04-28 03:34:21 -0400194 prometheus.MustRegister(onosaaaEapolFramesTx)
shubham sharmae7f85752019-09-16 13:37:18 +0000195 prometheus.MustRegister(onosaaaAuthStateIdle)
196 prometheus.MustRegister(onosaaaRequestIdFramesTx)
197 prometheus.MustRegister(onosaaaRequestEapFramesTx)
198 prometheus.MustRegister(onosaaaInvalidPktType)
199 prometheus.MustRegister(onosaaaInvalidBodyLength)
200 prometheus.MustRegister(onosaaaValidEapolFramesRx)
201 prometheus.MustRegister(onosaaaPendingResSupplicant)
202 prometheus.MustRegister(onosaaaRxResIdEapFrames)
Matteo Scandolo189526a2018-07-13 09:10:23 -0700203}
204
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530205func loadConfigFile() Config {
206 m := Config{}
207 // this file path is configmap mounted in pod yaml
208 yamlFile, err := ioutil.ReadFile("/etc/config/conf.yaml")
209 if err != nil {
210 log.Printf("yamlFile.Get err: %v ", err)
211 }
212 err = yaml.Unmarshal(yamlFile, &m)
213 if err != nil {
214 log.Fatalf("Unmarshal: %v", err)
215 }
216 return m
Matteo Scandolo189526a2018-07-13 09:10:23 -0700217}
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530218
219func main() {
220 // load configuration
221 conf := loadConfigFile()
222
223 // logger setup
224 logger.Setup(conf.Logger.Host, strings.ToUpper(conf.Logger.LogLevel))
225 logger.Info("Connecting to broker: [%s]", conf.Broker.Host)
226
227 go kafkaInit(conf.Broker)
228 runServer(conf.Target)
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530229}