blob: 5e49e9d93cc0e6ac87597d1f046bb8a4121a0c56 [file] [log] [blame]
Matteo Scandoloaab36db2018-10-09 19:54:11 -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
15package main
16
17import (
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053018 "encoding/json"
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053019 "gerrit.opencord.org/kafka-topic-exporter/common/logger"
Ganesh Bhure74fb7b02019-06-28 16:16:26 +053020 "github.com/prometheus/client_golang/prometheus"
Daniele Morobe242582019-10-01 14:02:46 -070021 log "github.com/sirupsen/logrus"
22 "strconv"
Ganesh Bhuref15383e2019-11-11 15:15:14 +053023 "strings"
Matteo Scandoloaab36db2018-10-09 19:54:11 -070024)
25
26var (
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053027 // voltha kpis
Matteo Scandoloaab36db2018-10-09 19:54:11 -070028 volthaTxBytesTotal = prometheus.NewGaugeVec(
29 prometheus.GaugeOpts{
30 Name: "voltha_tx_bytes_total",
31 Help: "Number of total bytes transmitted",
32 },
33 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
34 )
35 volthaRxBytesTotal = prometheus.NewGaugeVec(
36 prometheus.GaugeOpts{
37 Name: "voltha_rx_bytes_total",
38 Help: "Number of total bytes received",
39 },
40 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
41 )
42 volthaTxPacketsTotal = prometheus.NewGaugeVec(
43 prometheus.GaugeOpts{
44 Name: "voltha_tx_packets_total",
45 Help: "Number of total packets transmitted",
46 },
47 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
48 )
49 volthaRxPacketsTotal = prometheus.NewGaugeVec(
50 prometheus.GaugeOpts{
51 Name: "voltha_rx_packets_total",
52 Help: "Number of total packets received",
53 },
54 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
55 )
56
57 volthaTxErrorPacketsTotal = prometheus.NewGaugeVec(
58 prometheus.GaugeOpts{
59 Name: "voltha_tx_error_packets_total",
60 Help: "Number of total transmitted packets error",
61 },
62 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
63 )
64
65 volthaRxErrorPacketsTotal = prometheus.NewGaugeVec(
66 prometheus.GaugeOpts{
67 Name: "voltha_rx_error_packets_total",
68 Help: "Number of total received packets error",
69 },
70 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
71 )
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053072
Ganesh Bhure967018e2019-07-29 14:48:32 +053073 // optical parameters
74 VolthaOnuLaserBiasCurrent = prometheus.NewGaugeVec(
75 prometheus.GaugeOpts{
76 Name: "voltha_onu_laser_bias_current",
77 Help: "ONU Laser bias current value",
78 },
79 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
80 )
81
82 volthaOnuTemperature = prometheus.NewGaugeVec(
83 prometheus.GaugeOpts{
84 Name: "voltha_onu_temperature",
85 Help: "ONU temperature value",
86 },
87 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
88 )
89
90 VolthaOnuPowerFeedVoltage = prometheus.NewGaugeVec(
91 prometheus.GaugeOpts{
92 Name: "voltha_onu_power_feed_voltage",
93 Help: "ONU power feed voltage",
94 },
95 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
96 )
97
98 VolthaOnuMeanOpticalLaunchPower = prometheus.NewGaugeVec(
99 prometheus.GaugeOpts{
100 Name: "voltha_onu_mean_optical_launch_power",
101 Help: "ONU mean optical launch power",
102 },
103 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
104 )
105
106 VolthaOnuReceivedOpticalPower = prometheus.NewGaugeVec(
107 prometheus.GaugeOpts{
108 Name: "voltha_onu_received_optical_power",
109 Help: "ONU received optical power",
110 },
111 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
112 )
113
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530114 // onos kpis
115 onosTxBytesTotal = prometheus.NewGaugeVec(
116 prometheus.GaugeOpts{
117 Name: "onos_tx_bytes_total",
118 Help: "Number of total bytes transmitted",
119 },
120 []string{"device_id", "port_id"},
121 )
122 onosRxBytesTotal = prometheus.NewGaugeVec(
123 prometheus.GaugeOpts{
124 Name: "onos_rx_bytes_total",
125 Help: "Number of total bytes received",
126 },
127 []string{"device_id", "port_id"},
128 )
129 onosTxPacketsTotal = prometheus.NewGaugeVec(
130 prometheus.GaugeOpts{
131 Name: "onos_tx_packets_total",
132 Help: "Number of total packets transmitted",
133 },
134 []string{"device_id", "port_id"},
135 )
136 onosRxPacketsTotal = prometheus.NewGaugeVec(
137 prometheus.GaugeOpts{
138 Name: "onos_rx_packets_total",
139 Help: "Number of total packets received",
140 },
141 []string{"device_id", "port_id"},
142 )
143
144 onosTxDropPacketsTotal = prometheus.NewGaugeVec(
145 prometheus.GaugeOpts{
146 Name: "onos_tx_drop_packets_total",
147 Help: "Number of total transmitted packets dropped",
148 },
149 []string{"device_id", "port_id"},
150 )
151
152 onosRxDropPacketsTotal = prometheus.NewGaugeVec(
153 prometheus.GaugeOpts{
154 Name: "onos_rx_drop_packets_total",
155 Help: "Number of total received packets dropped",
156 },
157 []string{"device_id", "port_id"},
158 )
kartikey dubey72ef3b82019-05-27 06:50:04 +0000159
160 // onos.aaa kpis
161 onosaaaRxAcceptResponses = prometheus.NewGauge(
162 prometheus.GaugeOpts{
163 Name: "onosaaa_rx_accept_responses",
164 Help: "Number of access accept packets received from the server",
165 })
166 onosaaaRxRejectResponses = prometheus.NewGauge(
167 prometheus.GaugeOpts{
168 Name: "onosaaa_rx_reject_responses",
169 Help: "Number of access reject packets received from the server",
170 })
171 onosaaaRxChallengeResponses = prometheus.NewGauge(
172 prometheus.GaugeOpts{
173 Name: "onosaaa_rx_challenge_response",
174 Help: "Number of access challenge packets received from the server",
175 })
176 onosaaaTxAccessRequests = prometheus.NewGauge(
177 prometheus.GaugeOpts{
178 Name: "onosaaa_tx_access_requests",
179 Help: "Number of access request packets sent to the server",
180 })
181 onosaaaRxInvalidValidators = prometheus.NewGauge(
182 prometheus.GaugeOpts{
183 Name: "onosaaa_rx_invalid_validators",
184 Help: "Number of access response packets received from the server with an invalid validator",
185 })
186 onosaaaRxUnknownType = prometheus.NewGauge(
187 prometheus.GaugeOpts{
188 Name: "onosaaa_rx_unknown_type",
189 Help: "Number of packets of an unknown RADIUS type received from the accounting server",
190 })
191 onosaaaPendingRequests = prometheus.NewGauge(
192 prometheus.GaugeOpts{
193 Name: "onosaaa_pending_responses",
194 Help: "Number of access request packets pending a response from the server",
195 })
196 onosaaaRxDroppedResponses = prometheus.NewGauge(
197 prometheus.GaugeOpts{
198 Name: "onosaaa_rx_dropped_responses",
199 Help: "Number of dropped packets received from the accounting server",
200 })
201 onosaaaRxMalformedResponses = prometheus.NewGauge(
202 prometheus.GaugeOpts{
203 Name: "onosaaa_rx_malformed_responses",
204 Help: "Number of malformed access response packets received from the server",
205 })
206 onosaaaRxUnknownserver = prometheus.NewGauge(
207 prometheus.GaugeOpts{
208 Name: "onosaaa_rx_from_unknown_server",
209 Help: "Number of packets received from an unknown server",
210 })
211 onosaaaRequestRttMillis = prometheus.NewGauge(
212 prometheus.GaugeOpts{
213 Name: "onosaaa_request_rttmillis",
214 Help: "Roundtrip packet time to the accounting server in Miliseconds",
215 })
216 onosaaaRequestReTx = prometheus.NewGauge(
217 prometheus.GaugeOpts{
218 Name: "onosaaa_request_re_tx",
219 Help: "Number of access request packets retransmitted to the server",
220 })
Daniele Morobe242582019-10-01 14:02:46 -0700221
Daniele Moro707c2092019-12-06 16:39:18 -0800222 // ONOS BNG kpis
Daniele Morobe242582019-10-01 14:02:46 -0700223
Daniele Moro707c2092019-12-06 16:39:18 -0800224 // --------------------- BNG UPSTREAM STATISTICS -----------------------------------------
225 onosBngUpTxBytes = prometheus.NewGaugeVec(
Daniele Morobe242582019-10-01 14:02:46 -0700226 prometheus.GaugeOpts{
Daniele Moro707c2092019-12-06 16:39:18 -0800227 Name: "onosBngUpTxBytes",
228 Help: "onosBngUpTxBytes",
Daniele Morobe242582019-10-01 14:02:46 -0700229 },
Daniele Moro707c2092019-12-06 16:39:18 -0800230 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial", "type"},
Daniele Morobe242582019-10-01 14:02:46 -0700231 )
Daniele Moro707c2092019-12-06 16:39:18 -0800232 onosBngUpTxPackets = prometheus.NewGaugeVec(
Daniele Morobe242582019-10-01 14:02:46 -0700233 prometheus.GaugeOpts{
Daniele Moro707c2092019-12-06 16:39:18 -0800234 Name: "onosBngUpTxPackets",
235 Help: "onosBngUpTxPackets",
Daniele Morobe242582019-10-01 14:02:46 -0700236 },
Daniele Moro707c2092019-12-06 16:39:18 -0800237 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial", "type"},
Daniele Morobe242582019-10-01 14:02:46 -0700238 )
Daniele Moro707c2092019-12-06 16:39:18 -0800239
240 onosBngUpRxBytes = prometheus.NewGaugeVec(
Daniele Morobe242582019-10-01 14:02:46 -0700241 prometheus.GaugeOpts{
Daniele Moro707c2092019-12-06 16:39:18 -0800242 Name: "onosBngUpRxBytes",
243 Help: "onosBngUpRxBytes",
Daniele Morobe242582019-10-01 14:02:46 -0700244 },
Daniele Moro707c2092019-12-06 16:39:18 -0800245 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial", "type"},
Daniele Morobe242582019-10-01 14:02:46 -0700246 )
Daniele Moro707c2092019-12-06 16:39:18 -0800247
248 onosBngUpRxPackets = prometheus.NewGaugeVec(
Daniele Morobe242582019-10-01 14:02:46 -0700249 prometheus.GaugeOpts{
Daniele Moro707c2092019-12-06 16:39:18 -0800250 Name: "onosBngUpRxPackets",
251 Help: "onosBngUpRxPackets",
Daniele Morobe242582019-10-01 14:02:46 -0700252 },
Daniele Moro707c2092019-12-06 16:39:18 -0800253 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial", "type"},
Daniele Morobe242582019-10-01 14:02:46 -0700254 )
Daniele Moro707c2092019-12-06 16:39:18 -0800255 onosBngUpDropBytes = prometheus.NewGaugeVec(
Daniele Morobe242582019-10-01 14:02:46 -0700256 prometheus.GaugeOpts{
Daniele Moro707c2092019-12-06 16:39:18 -0800257 Name: "onosBngUpDropBytes",
258 Help: "onosBngUpDropBytes",
Daniele Morobe242582019-10-01 14:02:46 -0700259 },
Daniele Moro707c2092019-12-06 16:39:18 -0800260 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial", "type"},
Daniele Morobe242582019-10-01 14:02:46 -0700261 )
Daniele Moro707c2092019-12-06 16:39:18 -0800262 onosBngUpDropPackets = prometheus.NewGaugeVec(
Daniele Morobe242582019-10-01 14:02:46 -0700263 prometheus.GaugeOpts{
Daniele Moro707c2092019-12-06 16:39:18 -0800264 Name: "onosBngUpDropPackets",
265 Help: "onosBngUpDropPackets",
Daniele Morobe242582019-10-01 14:02:46 -0700266 },
Daniele Moro707c2092019-12-06 16:39:18 -0800267 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial", "type"},
Daniele Morobe242582019-10-01 14:02:46 -0700268 )
Daniele Moro707c2092019-12-06 16:39:18 -0800269
270 // --------------------- BNG CONTROL STATISTICS ------------------------------------------
271 onosBngControlPackets = prometheus.NewGaugeVec(
Daniele Morobe242582019-10-01 14:02:46 -0700272 prometheus.GaugeOpts{
Daniele Moro707c2092019-12-06 16:39:18 -0800273 Name: "onosBngControlPackets",
274 Help: "onosBngControlPackets",
Daniele Morobe242582019-10-01 14:02:46 -0700275 },
Daniele Moro707c2092019-12-06 16:39:18 -0800276 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial", "type"},
Daniele Morobe242582019-10-01 14:02:46 -0700277 )
Daniele Moro707c2092019-12-06 16:39:18 -0800278
279 // -------------------- BNG DOWNSTREAM STATISTICS ----------------------------------------
280 onosBngDownTxBytes = prometheus.NewGaugeVec(
Daniele Morobe242582019-10-01 14:02:46 -0700281 prometheus.GaugeOpts{
Daniele Moro707c2092019-12-06 16:39:18 -0800282 Name: "onosBngDownTxBytes",
283 Help: "onosBngDownTxBytes",
Daniele Morobe242582019-10-01 14:02:46 -0700284 },
Daniele Moro707c2092019-12-06 16:39:18 -0800285 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial", "type"},
Daniele Morobe242582019-10-01 14:02:46 -0700286 )
Daniele Moro707c2092019-12-06 16:39:18 -0800287 onosBngDownTxPackets = prometheus.NewGaugeVec(
Daniele Morobe242582019-10-01 14:02:46 -0700288 prometheus.GaugeOpts{
Daniele Moro707c2092019-12-06 16:39:18 -0800289 Name: "onosBngDownTxPackets",
290 Help: "onosBngDownTxPackets",
Daniele Morobe242582019-10-01 14:02:46 -0700291 },
Daniele Moro707c2092019-12-06 16:39:18 -0800292 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial", "type"},
Daniele Morobe242582019-10-01 14:02:46 -0700293 )
Daniele Moro707c2092019-12-06 16:39:18 -0800294
295 onosBngDownRxBytes = prometheus.NewGaugeVec(
296 prometheus.GaugeOpts{
297 Name: "onosBngDownRxBytes",
298 Help: "onosBngDownRxBytes",
299 },
300 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial", "type"},
301 )
302 onosBngDownRxPackets = prometheus.NewGaugeVec(
303 prometheus.GaugeOpts{
304 Name: "onosBngDownRxPackets",
305 Help: "onosBngDownRxPackets",
306 },
307 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial", "type"},
308 )
309
310 onosBngDownDropBytes = prometheus.NewGaugeVec(
311 prometheus.GaugeOpts{
312 Name: "onosBngDownDropBytes",
313 Help: "onosBngDownDropBytes",
314 },
315 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial", "type"},
316 )
317 onosBngDownDropPackets = prometheus.NewGaugeVec(
318 prometheus.GaugeOpts{
319 Name: "onosBngDownDropPackets",
320 Help: "onosBngDownDropPackets",
321 },
322 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial", "type"},
323 )
324
325
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530326 deviceLaserBiasCurrent = prometheus.NewGauge(
327 prometheus.GaugeOpts{
Daniele Moro707c2092019-12-06 16:39:18 -0800328 Name: "device_laser_bias_current",
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530329 Help: "Device Laser Bias Current",
330 })
331 deviceTemperature = prometheus.NewGauge(
332 prometheus.GaugeOpts{
333 Name: "device_temperature",
334 Help: "Device Temperature",
335 })
336 deviceTxPower = prometheus.NewGauge(
337 prometheus.GaugeOpts{
338 Name: "device_tx_power",
339 Help: "Device Tx Power",
340 })
341 deviceVoltage = prometheus.NewGauge(
342 prometheus.GaugeOpts{
343 Name: "device_voltage",
344 Help: "Device Voltage",
Daniele Moro707c2092019-12-06 16:39:18 -0800345 })
Shubham Sharma57600bf2019-08-09 07:09:57 +0000346 onosaaaRxEapolLogoff = prometheus.NewGauge(
347 prometheus.GaugeOpts{
348 Name: "onosaaa_rx_eapol_Logoff",
349 Help: "Number of EAPOL logoff messages received resulting in disconnected state",
350 })
351 onosaaaTxEapolResIdentityMsg = prometheus.NewGauge(
352 prometheus.GaugeOpts{
353 Name: "onosaaa_tx_eapol_Res_IdentityMsg",
354 Help: "Number of authenticating transitions due to EAP response or identity message",
355 })
356 onosaaaTxAuthSuccess = prometheus.NewGauge(
357 prometheus.GaugeOpts{
358 Name: "onosaaa_tx_auth_Success",
359 Help: "Number of authenticated transitions due to successful authentication",
360 })
361 onosaaaTxAuthFailure = prometheus.NewGauge(
362 prometheus.GaugeOpts{
363 Name: "onosaaa_tx_auth_Failure",
364 Help: "Number of transitions to held due to authentication failure",
365 })
366 onosaaaTxStartReq = prometheus.NewGauge(
367 prometheus.GaugeOpts{
368 Name: "onosaaa_tx_start_Req",
369 Help: "Number of transitions to connecting due to start request",
370 })
371 onosaaaEapPktTxAuthChooseEap = prometheus.NewGauge(
372 prometheus.GaugeOpts{
373 Name: "onosaaa_eap_Pkt_tx_auth_choosing_Eap",
374 Help: "Number of EAP request packets sent due to the authenticator choosing the EAP method",
375 })
376 onosaaaTxRespnotNak = prometheus.NewGauge(
377 prometheus.GaugeOpts{
378 Name: "onosaaa_tx_Resp_not_Nak",
379 Help: "Number of transitions to response (received response other that NAK)",
Daniele Moro707c2092019-12-06 16:39:18 -0800380 })
shubham sharmae7f85752019-09-16 13:37:18 +0000381 onosaaaEapolFramesTx = prometheus.NewGauge(
382 prometheus.GaugeOpts{
383 Name: "onosaaa_eapol_frames_tx",
384 Help: "Number of EAPOL frames transmitted",
385 })
386 onosaaaAuthStateIdle = prometheus.NewGauge(
387 prometheus.GaugeOpts{
388 Name: "onosaaa_auth_state_idle",
389 Help: "Number of state machine status as Idle",
390 })
391 onosaaaRequestIdFramesTx = prometheus.NewGauge(
392 prometheus.GaugeOpts{
393 Name: "onosaaa_tx_request_id_frames",
394 Help: "Number of request ID EAP frames transmitted",
395 })
396 onosaaaRequestEapFramesTx = prometheus.NewGauge(
397 prometheus.GaugeOpts{
398 Name: "onosaaa_tx_request_eap_frames",
399 Help: "Number of request EAP frames transmitted",
400 })
401 onosaaaInvalidPktType = prometheus.NewGauge(
402 prometheus.GaugeOpts{
403 Name: "onosaaa_invalid_pkt_type",
404 Help: "Number of EAPOL frames received with invalid frame(Packet) type",
405 })
406 onosaaaInvalidBodyLength = prometheus.NewGauge(
407 prometheus.GaugeOpts{
408 Name: "onosaaa_invalid_body_length",
409 Help: "Number of EAPOL frames received with invalid body length",
410 })
411 onosaaaValidEapolFramesRx = prometheus.NewGauge(
412 prometheus.GaugeOpts{
413 Name: "onosaaa_rx_valid_eapol_frames",
414 Help: "Number of valid EAPOL frames received",
415 })
416 onosaaaPendingResSupplicant = prometheus.NewGauge(
417 prometheus.GaugeOpts{
418 Name: "onosaaa_pending_response_supplicant",
419 Help: "Number of request pending response from supplicant",
420 })
421 onosaaaRxResIdEapFrames = prometheus.NewGauge(
422 prometheus.GaugeOpts{
423 Name: "onosaaa_rx_res_id_eap_frames",
424 Help: "Number of response ID EAP frames received",
Shubham Sharma57600bf2019-08-09 07:09:57 +0000425 })
Matteo Scandoloaab36db2018-10-09 19:54:11 -0700426)
427
428func exportVolthaKPI(kpi VolthaKPI) {
429
430 for _, data := range kpi.SliceDatas {
431 switch title := data.Metadata.Title; title {
432 case "Ethernet", "PON":
433 volthaTxBytesTotal.WithLabelValues(
434 data.Metadata.LogicalDeviceID,
435 data.Metadata.SerialNumber,
436 data.Metadata.DeviceID,
437 data.Metadata.Context.InterfaceID,
438 data.Metadata.Context.PonID,
439 data.Metadata.Context.PortNumber,
440 data.Metadata.Title,
441 ).Set(data.Metrics.TxBytes)
442
443 volthaRxBytesTotal.WithLabelValues(
444 data.Metadata.LogicalDeviceID,
445 data.Metadata.SerialNumber,
446 data.Metadata.DeviceID,
447 data.Metadata.Context.InterfaceID,
448 data.Metadata.Context.PonID,
449 data.Metadata.Context.PortNumber,
450 data.Metadata.Title,
451 ).Set(data.Metrics.RxBytes)
452
453 volthaTxPacketsTotal.WithLabelValues(
454 data.Metadata.LogicalDeviceID,
455 data.Metadata.SerialNumber,
456 data.Metadata.DeviceID,
457 data.Metadata.Context.InterfaceID,
458 data.Metadata.Context.PonID,
459 data.Metadata.Context.PortNumber,
460 data.Metadata.Title,
461 ).Set(data.Metrics.TxPackets)
462
463 volthaRxPacketsTotal.WithLabelValues(
464 data.Metadata.LogicalDeviceID,
465 data.Metadata.SerialNumber,
466 data.Metadata.DeviceID,
467 data.Metadata.Context.InterfaceID,
468 data.Metadata.Context.PonID,
469 data.Metadata.Context.PortNumber,
470 data.Metadata.Title,
471 ).Set(data.Metrics.RxPackets)
472
473 volthaTxErrorPacketsTotal.WithLabelValues(
474 data.Metadata.LogicalDeviceID,
475 data.Metadata.SerialNumber,
476 data.Metadata.DeviceID,
477 data.Metadata.Context.InterfaceID,
478 data.Metadata.Context.PonID,
479 data.Metadata.Context.PortNumber,
480 data.Metadata.Title,
481 ).Set(data.Metrics.TxErrorPackets)
482
483 volthaRxErrorPacketsTotal.WithLabelValues(
484 data.Metadata.LogicalDeviceID,
485 data.Metadata.SerialNumber,
486 data.Metadata.DeviceID,
487 data.Metadata.Context.InterfaceID,
488 data.Metadata.Context.PonID,
489 data.Metadata.Context.PortNumber,
490 data.Metadata.Title,
491 ).Set(data.Metrics.RxErrorPackets)
492
493 // TODO add metrics for:
494 // TxBcastPackets
495 // TxUnicastPackets
496 // TxMulticastPackets
497 // RxBcastPackets
498 // RxMulticastPackets
499
500 case "Ethernet_Bridge_Port_History":
501 if data.Metadata.Context.Upstream == "True" {
502 // ONU. Extended Ethernet statistics.
503 volthaTxPacketsTotal.WithLabelValues(
504 data.Metadata.LogicalDeviceID,
505 data.Metadata.SerialNumber,
506 data.Metadata.DeviceID,
507 "NA", // InterfaceID
508 "NA", // PonID
509 "NA", // PortNumber
510 data.Metadata.Title,
511 ).Add(data.Metrics.Packets)
512
513 volthaTxBytesTotal.WithLabelValues(
514 data.Metadata.LogicalDeviceID,
515 data.Metadata.SerialNumber,
516 data.Metadata.DeviceID,
517 "NA", // InterfaceID
518 "NA", // PonID
519 "NA", // PortNumber
520 data.Metadata.Title,
521 ).Add(data.Metrics.Octets)
522 } else {
523 // ONU. Extended Ethernet statistics.
524 volthaRxPacketsTotal.WithLabelValues(
525 data.Metadata.LogicalDeviceID,
526 data.Metadata.SerialNumber,
527 data.Metadata.DeviceID,
528 "NA", // InterfaceID
529 "NA", // PonID
530 "NA", // PortNumber
531 data.Metadata.Title,
532 ).Add(data.Metrics.Packets)
533
534 volthaRxBytesTotal.WithLabelValues(
535 data.Metadata.LogicalDeviceID,
536 data.Metadata.SerialNumber,
537 data.Metadata.DeviceID,
538 "NA", // InterfaceID
539 "NA", // PonID
540 "NA", // PortNumber
541 data.Metadata.Title,
542 ).Add(data.Metrics.Octets)
543 }
544
Ganesh Bhure967018e2019-07-29 14:48:32 +0530545 case "PON_Optical":
546 VolthaOnuLaserBiasCurrent.WithLabelValues(
547 data.Metadata.LogicalDeviceID,
548 data.Metadata.SerialNumber,
549 data.Metadata.DeviceID,
550 data.Metadata.Context.InterfaceID,
551 data.Metadata.Context.PonID,
552 data.Metadata.Context.PortNumber,
553 data.Metadata.Title,
554 ).Set(data.Metrics.LaserBiasCurrent)
555
556 volthaOnuTemperature.WithLabelValues(
557 data.Metadata.LogicalDeviceID,
558 data.Metadata.SerialNumber,
559 data.Metadata.DeviceID,
560 data.Metadata.Context.InterfaceID,
561 data.Metadata.Context.PonID,
562 data.Metadata.Context.PortNumber,
563 data.Metadata.Title,
564 ).Set(data.Metrics.Temperature)
565
566 VolthaOnuPowerFeedVoltage.WithLabelValues(
567 data.Metadata.LogicalDeviceID,
568 data.Metadata.SerialNumber,
569 data.Metadata.DeviceID,
570 data.Metadata.Context.InterfaceID,
571 data.Metadata.Context.PonID,
572 data.Metadata.Context.PortNumber,
573 data.Metadata.Title,
574 ).Set(data.Metrics.PowerFeedVoltage)
575
576 VolthaOnuMeanOpticalLaunchPower.WithLabelValues(
577 data.Metadata.LogicalDeviceID,
578 data.Metadata.SerialNumber,
579 data.Metadata.DeviceID,
580 data.Metadata.Context.InterfaceID,
581 data.Metadata.Context.PonID,
582 data.Metadata.Context.PortNumber,
583 data.Metadata.Title,
584 ).Set(data.Metrics.MeanOpticalLaunchPower)
585
586 VolthaOnuReceivedOpticalPower.WithLabelValues(
587 data.Metadata.LogicalDeviceID,
588 data.Metadata.SerialNumber,
589 data.Metadata.DeviceID,
590 data.Metadata.Context.InterfaceID,
591 data.Metadata.Context.PonID,
592 data.Metadata.Context.PortNumber,
593 data.Metadata.Title,
594 ).Set(data.Metrics.ReceivedOpticalPower)
595
Matteo Scandoloaab36db2018-10-09 19:54:11 -0700596 case "Ethernet_UNI_History":
597 // ONU. Do nothing.
598
599 case "FEC_History":
600 // ONU. Do Nothing.
601
602 volthaTxBytesTotal.WithLabelValues(
603 data.Metadata.LogicalDeviceID,
604 data.Metadata.SerialNumber,
605 data.Metadata.DeviceID,
606 data.Metadata.Context.InterfaceID,
607 data.Metadata.Context.PonID,
608 data.Metadata.Context.PortNumber,
609 data.Metadata.Title,
610 ).Set(data.Metrics.TxBytes)
611
612 volthaRxBytesTotal.WithLabelValues(
613 data.Metadata.LogicalDeviceID,
614 data.Metadata.SerialNumber,
615 data.Metadata.DeviceID,
616 data.Metadata.Context.InterfaceID,
617 data.Metadata.Context.PonID,
618 data.Metadata.Context.PortNumber,
619 data.Metadata.Title,
620 ).Set(data.Metrics.RxBytes)
621
622 volthaTxPacketsTotal.WithLabelValues(
623 data.Metadata.LogicalDeviceID,
624 data.Metadata.SerialNumber,
625 data.Metadata.DeviceID,
626 data.Metadata.Context.InterfaceID,
627 data.Metadata.Context.PonID,
628 data.Metadata.Context.PortNumber,
629 data.Metadata.Title,
630 ).Set(data.Metrics.TxPackets)
631
632 volthaRxPacketsTotal.WithLabelValues(
633 data.Metadata.LogicalDeviceID,
634 data.Metadata.SerialNumber,
635 data.Metadata.DeviceID,
636 data.Metadata.Context.InterfaceID,
637 data.Metadata.Context.PonID,
638 data.Metadata.Context.PortNumber,
639 data.Metadata.Title,
640 ).Set(data.Metrics.RxPackets)
641
642 volthaTxErrorPacketsTotal.WithLabelValues(
643 data.Metadata.LogicalDeviceID,
644 data.Metadata.SerialNumber,
645 data.Metadata.DeviceID,
646 data.Metadata.Context.InterfaceID,
647 data.Metadata.Context.PonID,
648 data.Metadata.Context.PortNumber,
649 data.Metadata.Title,
650 ).Set(data.Metrics.TxErrorPackets)
651
652 volthaRxErrorPacketsTotal.WithLabelValues(
653 data.Metadata.LogicalDeviceID,
654 data.Metadata.SerialNumber,
655 data.Metadata.DeviceID,
656 data.Metadata.Context.InterfaceID,
657 data.Metadata.Context.PonID,
658 data.Metadata.Context.PortNumber,
659 data.Metadata.Title,
660 ).Set(data.Metrics.RxErrorPackets)
661
662 // TODO add metrics for:
663 // TxBcastPackets
664 // TxUnicastPackets
665 // TxMulticastPackets
666 // RxBcastPackets
667 // RxMulticastPackets
668
669 case "voltha.internal":
670 // Voltha Internal. Do nothing.
671 }
672 }
673}
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530674
675func exportOnosKPI(kpi OnosKPI) {
676
677 for _, data := range kpi.Ports {
678
679 onosTxBytesTotal.WithLabelValues(
680 kpi.DeviceID,
681 data.PortID,
682 ).Set(data.TxBytes)
683
684 onosRxBytesTotal.WithLabelValues(
685 kpi.DeviceID,
686 data.PortID,
687 ).Set(data.RxBytes)
688
689 onosTxPacketsTotal.WithLabelValues(
690 kpi.DeviceID,
691 data.PortID,
692 ).Set(data.TxPackets)
693
694 onosRxPacketsTotal.WithLabelValues(
695 kpi.DeviceID,
696 data.PortID,
697 ).Set(data.RxPackets)
698
699 onosTxDropPacketsTotal.WithLabelValues(
700 kpi.DeviceID,
701 data.PortID,
702 ).Set(data.TxPacketsDrop)
703
704 onosRxDropPacketsTotal.WithLabelValues(
705 kpi.DeviceID,
706 data.PortID,
707 ).Set(data.RxPacketsDrop)
708 }
709}
710
711func exportImporterKPI(kpi ImporterKPI) {
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530712 deviceLaserBiasCurrent.Set(kpi.LaserBiasCurrent)
713 deviceTemperature.Set(kpi.Temperature)
714 deviceTxPower.Set(kpi.TxPower)
715 deviceVoltage.Set(kpi.Voltage)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530716}
717
kartikey dubey72ef3b82019-05-27 06:50:04 +0000718func exportOnosAaaKPI(kpi OnosAaaKPI) {
719
720 onosaaaRxAcceptResponses.Set(kpi.RxAcceptResponses)
721
722 onosaaaRxRejectResponses.Set(kpi.RxRejectResponses)
723
724 onosaaaRxChallengeResponses.Set(kpi.RxChallengeResponses)
725
726 onosaaaTxAccessRequests.Set(kpi.TxAccessRequests)
727
728 onosaaaRxInvalidValidators.Set(kpi.RxInvalidValidators)
729
730 onosaaaRxUnknownType.Set(kpi.RxUnknownType)
731
732 onosaaaPendingRequests.Set(kpi.PendingRequests)
733
734 onosaaaRxDroppedResponses.Set(kpi.RxDroppedResponses)
735
736 onosaaaRxMalformedResponses.Set(kpi.RxMalformedResponses)
737
738 onosaaaRxUnknownserver.Set(kpi.RxUnknownserver)
739
740 onosaaaRequestRttMillis.Set(kpi.RequestRttMillis)
741
742 onosaaaRequestReTx.Set(kpi.RequestReTx)
Shubham Sharma57600bf2019-08-09 07:09:57 +0000743
744 onosaaaRxEapolLogoff.Set(kpi.RxEapolLogoff)
745
746 onosaaaTxEapolResIdentityMsg.Set(kpi.TxEapolResIdentityMsg)
747
748 onosaaaTxAuthSuccess.Set(kpi.TxAuthSuccess)
749
750 onosaaaTxAuthFailure.Set(kpi.TxAuthFailure)
751
752 onosaaaTxStartReq.Set(kpi.TxStartReq)
753
754 onosaaaEapPktTxAuthChooseEap.Set(kpi.EapPktTxAuthChooseEap)
755
756 onosaaaTxRespnotNak.Set(kpi.TxResponseNotNak)
shubham sharmae7f85752019-09-16 13:37:18 +0000757
758 onosaaaEapolFramesTx.Set(kpi.EapolFramesTx)
759
760 onosaaaAuthStateIdle.Set(kpi.AuthStateIdle)
761
762 onosaaaRequestIdFramesTx.Set(kpi.RequestIdFramesTx)
763
764 onosaaaRequestEapFramesTx.Set(kpi.RequestEapFramesTx)
765
766 onosaaaInvalidPktType.Set(kpi.InvalidPktType)
767
768 onosaaaInvalidBodyLength.Set(kpi.InvalidBodyLength)
769
770 onosaaaValidEapolFramesRx.Set(kpi.ValidEapolFramesRx)
771
772 onosaaaPendingResSupplicant.Set(kpi.PendingResSupplicant)
773
774 onosaaaRxResIdEapFrames.Set(kpi.RxResIdEapFrames)
kartikey dubey72ef3b82019-05-27 06:50:04 +0000775}
776
Daniele Moro707c2092019-12-06 16:39:18 -0800777func exportOnosBngKPI(kpi OnosBngKPI) {
778 logger.WithFields(log.Fields{
779 "Mac": kpi.Mac,
780 "Ip": kpi.Ip,
781 "PppoeSessionId": strconv.Itoa(kpi.PppoeSessionId),
782 "AttachmentType": kpi.AttachmentType,
783 "STag": strconv.Itoa(kpi.STag),
784 "CTag": strconv.Itoa(kpi.CTag),
785 "onuSerialNumber": kpi.OnuSerialNumber,
786 }).Trace("Received OnosBngKPI message")
Daniele Morobe242582019-10-01 14:02:46 -0700787
Daniele Moro707c2092019-12-06 16:39:18 -0800788 if kpi.UpTxBytes != nil {
789 onosBngUpTxBytes.WithLabelValues(
790 kpi.Mac,
791 kpi.Ip,
792 strconv.Itoa(kpi.PppoeSessionId),
793 strconv.Itoa(kpi.STag),
794 strconv.Itoa(kpi.CTag),
795 kpi.OnuSerialNumber,
796 kpi.AttachmentType,
797 ).Set(*kpi.UpTxBytes)
798 }
799 if kpi.UpTxPackets != nil {
800 onosBngUpTxPackets.WithLabelValues(
801 kpi.Mac,
802 kpi.Ip,
803 strconv.Itoa(kpi.PppoeSessionId),
804 strconv.Itoa(kpi.STag),
805 strconv.Itoa(kpi.CTag),
806 kpi.OnuSerialNumber,
807 kpi.AttachmentType,
808 ).Set(*kpi.UpTxPackets)
809 }
810 if kpi.UpRxBytes != nil {
811 onosBngUpRxBytes.WithLabelValues(
812 kpi.Mac,
813 kpi.Ip,
814 strconv.Itoa(kpi.PppoeSessionId),
815 strconv.Itoa(kpi.STag),
816 strconv.Itoa(kpi.CTag),
817 kpi.OnuSerialNumber,
818 kpi.AttachmentType,
819 ).Set(*kpi.UpRxBytes)
820 }
821 if kpi.UpRxPackets != nil {
822 onosBngUpRxPackets.WithLabelValues(
823 kpi.Mac,
824 kpi.Ip,
825 strconv.Itoa(kpi.PppoeSessionId),
826 strconv.Itoa(kpi.STag),
827 strconv.Itoa(kpi.CTag),
828 kpi.OnuSerialNumber,
829 kpi.AttachmentType,
830 ).Set(*kpi.UpRxPackets)
831 }
Daniele Morobe242582019-10-01 14:02:46 -0700832
Daniele Moro707c2092019-12-06 16:39:18 -0800833 if kpi.UpDropBytes != nil {
834 onosBngUpDropBytes.WithLabelValues(
835 kpi.Mac,
836 kpi.Ip,
837 strconv.Itoa(kpi.PppoeSessionId),
838 strconv.Itoa(kpi.STag),
839 strconv.Itoa(kpi.CTag),
840 kpi.OnuSerialNumber,
841 kpi.AttachmentType,
842 ).Set(*kpi.UpDropBytes)
843 }
844 if kpi.UpDropPackets != nil {
845 onosBngUpDropPackets.WithLabelValues(
846 kpi.Mac,
847 kpi.Ip,
848 strconv.Itoa(kpi.PppoeSessionId),
849 strconv.Itoa(kpi.STag),
850 strconv.Itoa(kpi.CTag),
851 kpi.OnuSerialNumber,
852 kpi.AttachmentType,
853 ).Set(*kpi.UpDropPackets)
854 }
855
856 if kpi.ControlPackets != nil {
857 onosBngControlPackets.WithLabelValues(
858 kpi.Mac,
859 kpi.Ip,
860 strconv.Itoa(kpi.PppoeSessionId),
861 strconv.Itoa(kpi.STag),
862 strconv.Itoa(kpi.CTag),
863 kpi.OnuSerialNumber,
864 kpi.AttachmentType,
865 ).Set(*kpi.ControlPackets)
866 }
867
868 if kpi.DownTxBytes != nil {
869 onosBngDownTxBytes.WithLabelValues(
870 kpi.Mac,
871 kpi.Ip,
872 strconv.Itoa(kpi.PppoeSessionId),
873 strconv.Itoa(kpi.STag),
874 strconv.Itoa(kpi.CTag),
875 kpi.OnuSerialNumber,
876 kpi.AttachmentType,
877 ).Set(*kpi.DownTxBytes)
878 }
879 if kpi.DownTxPackets != nil {
880 onosBngDownTxPackets.WithLabelValues(
881 kpi.Mac,
882 kpi.Ip,
883 strconv.Itoa(kpi.PppoeSessionId),
884 strconv.Itoa(kpi.STag),
885 strconv.Itoa(kpi.CTag),
886 kpi.OnuSerialNumber,
887 kpi.AttachmentType,
888 ).Set(*kpi.DownTxPackets)
889 }
890
891 if kpi.DownRxBytes != nil {
892 onosBngDownRxBytes.WithLabelValues(
893 kpi.Mac,
894 kpi.Ip,
895 strconv.Itoa(kpi.PppoeSessionId),
896 strconv.Itoa(kpi.STag),
897 strconv.Itoa(kpi.CTag),
898 kpi.OnuSerialNumber,
899 kpi.AttachmentType,
900 ).Set(*kpi.DownRxBytes)
901 }
902 if kpi.DownRxPackets != nil {
903 onosBngDownRxPackets.WithLabelValues(
904 kpi.Mac,
905 kpi.Ip,
906 strconv.Itoa(kpi.PppoeSessionId),
907 strconv.Itoa(kpi.STag),
908 strconv.Itoa(kpi.CTag),
909 kpi.OnuSerialNumber,
910 kpi.AttachmentType,
911 ).Set(*kpi.DownRxPackets)
912 }
913
914 if kpi.DownDropBytes != nil {
915 onosBngDownDropBytes.WithLabelValues(
916 kpi.Mac,
917 kpi.Ip,
918 strconv.Itoa(kpi.PppoeSessionId),
919 strconv.Itoa(kpi.STag),
920 strconv.Itoa(kpi.CTag),
921 kpi.OnuSerialNumber,
922 kpi.AttachmentType,
923 ).Set(*kpi.DownDropBytes)
924 }
925 if kpi.DownDropPackets != nil {
926 onosBngDownDropPackets.WithLabelValues(
927 kpi.Mac,
928 kpi.Ip,
929 strconv.Itoa(kpi.PppoeSessionId),
930 strconv.Itoa(kpi.STag),
931 strconv.Itoa(kpi.CTag),
932 kpi.OnuSerialNumber,
933 kpi.AttachmentType,
934 ).Set(*kpi.DownDropPackets)
Daniele Morobe242582019-10-01 14:02:46 -0700935 }
936}
937
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530938func export(topic *string, data []byte) {
939 switch *topic {
940 case "voltha.kpis":
941 kpi := VolthaKPI{}
942 err := json.Unmarshal(data, &kpi)
943 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530944 logger.Error("Invalid msg on voltha.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530945 break
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530946 }
947 exportVolthaKPI(kpi)
948 case "onos.kpis":
949 kpi := OnosKPI{}
950 err := json.Unmarshal(data, &kpi)
951 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530952 logger.Error("Invalid msg on onos.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530953 break
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530954 }
955 exportOnosKPI(kpi)
956 case "importer.kpis":
957 kpi := ImporterKPI{}
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530958 strData := string(data)
959 idx := strings.Index(strData, "{")
960 strData = strData[idx:]
961
962 var m map[string]interface{}
963 err := json.Unmarshal([]byte(strData), &m)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530964 if err != nil {
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530965 logger.Error("Invalid msg on importer.kpis: %s", err.Error())
966 logger.Debug("Unprocessed Msg: %s", strData)
967 break
968 }
969 if val, ok := m["TransceiverStatistics"]; ok {
970 stats := val.(map[string]interface{})
971 //kpi.Timestamp = time.Now().UnixNano()
972 kpi.LaserBiasCurrent = stats["BiasCurrent"].(map[string]interface{})["Reading"].(float64)
973 kpi.Temperature = stats["Temperature"].(map[string]interface{})["Reading"].(float64)
974 kpi.TxPower = stats["TxPower"].(map[string]interface{})["Reading"].(float64)
975 kpi.Voltage = stats["Voltage"].(map[string]interface{})["Reading"].(float64)
976 } else {
977 logger.Error("Optical stats (TransceiverStatistics) information missing [topic=importer.kpis")
978 logger.Debug("Unprocessed Msg: %s", strData)
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530979 break
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530980 }
981 exportImporterKPI(kpi)
kartikey dubey72ef3b82019-05-27 06:50:04 +0000982 case "onos.aaa.stats.kpis":
983 kpi := OnosAaaKPI{}
984 err := json.Unmarshal(data, &kpi)
985 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530986 logger.Error("Invalid msg on onos.aaa.stats.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530987 break
kartikey dubey72ef3b82019-05-27 06:50:04 +0000988 }
989 exportOnosAaaKPI(kpi)
Daniele Moro707c2092019-12-06 16:39:18 -0800990 case "bng.stats":
991 kpi := OnosBngKPI{}
Daniele Morobe242582019-10-01 14:02:46 -0700992 err := json.Unmarshal(data, &kpi)
993 if err != nil {
Daniele Moro707c2092019-12-06 16:39:18 -0800994 logger.Error("Invalid msg on bng.stats: %s, Unprocessed Msg: %s", err.Error(), string(data))
Daniele Morobe242582019-10-01 14:02:46 -0700995 break
996 }
Daniele Moro707c2092019-12-06 16:39:18 -0800997 exportOnosBngKPI(kpi)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530998 default:
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530999 logger.Warn("Unexpected export. Topic [%s] not supported. Should not come here", *topic)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +05301000 }
1001}