blob: 4e8d2f6054967b485c68e66f7306636e3919d142 [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
222 // ONOS PPPoE kpis
223
224 onosPppoeUpTermBytes = prometheus.NewGaugeVec(
225 prometheus.GaugeOpts{
226 Name: "onosPppoeupTermBytes",
227 Help: "onosPppoeupTermBytes",
228 },
229 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial"},
230 )
231 onosPppoeUpTermPackets = prometheus.NewGaugeVec(
232 prometheus.GaugeOpts{
233 Name: "onosPppoeupTermPackets",
234 Help: "onosPppoeupTermPackets",
235 },
236 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial"},
237 )
238 onosPppoeUpDropBytes = prometheus.NewGaugeVec(
239 prometheus.GaugeOpts{
240 Name: "onosPppoeupDropBytes",
241 Help: "onosPppoeupDropBytes",
242 },
243 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial"},
244 )
245 onosPppoeUpDropPackets = prometheus.NewGaugeVec(
246 prometheus.GaugeOpts{
247 Name: "onosPppoeupDropPackets",
248 Help: "onosPppoeupDropPackets",
249 },
250 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial"},
251 )
252 onosPppoeUpControlPackets = prometheus.NewGaugeVec(
253 prometheus.GaugeOpts{
254 Name: "onosPppoeupControlPackets",
255 Help: "onosPppoeupControlPackets",
256 },
257 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial"},
258 )
259 onosPppoeDownRxBytes = prometheus.NewGaugeVec(
260 prometheus.GaugeOpts{
261 Name: "onosPppoedownRxBytes",
262 Help: "onosPppoedownRxBytes",
263 },
264 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial"},
265 )
266 onosPppoeDownRxPackets = prometheus.NewGaugeVec(
267 prometheus.GaugeOpts{
268 Name: "onosPppoedownRxPackets",
269 Help: "onosPppoedownRxPackets",
270 },
271 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial"},
272 )
273 onosPppoeDownTxBytes = prometheus.NewGaugeVec(
274 prometheus.GaugeOpts{
275 Name: "onosPppoedownTxBytes",
276 Help: "onosPppoedownTxBytes",
277 },
278 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial"},
279 )
280 onosPppoeDownTxPackets = prometheus.NewGaugeVec(
281 prometheus.GaugeOpts{
282 Name: "onosPppoedownTxPackets",
283 Help: "onosPppoedownTxPackets",
284 },
285 []string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial"},
286 )
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530287 deviceLaserBiasCurrent = prometheus.NewGauge(
288 prometheus.GaugeOpts{
289 Name: "device_laser_bias_current",
290 Help: "Device Laser Bias Current",
291 })
292 deviceTemperature = prometheus.NewGauge(
293 prometheus.GaugeOpts{
294 Name: "device_temperature",
295 Help: "Device Temperature",
296 })
297 deviceTxPower = prometheus.NewGauge(
298 prometheus.GaugeOpts{
299 Name: "device_tx_power",
300 Help: "Device Tx Power",
301 })
302 deviceVoltage = prometheus.NewGauge(
303 prometheus.GaugeOpts{
304 Name: "device_voltage",
305 Help: "Device Voltage",
306 })
Shubham Sharma57600bf2019-08-09 07:09:57 +0000307 onosaaaRxEapolLogoff = prometheus.NewGauge(
308 prometheus.GaugeOpts{
309 Name: "onosaaa_rx_eapol_Logoff",
310 Help: "Number of EAPOL logoff messages received resulting in disconnected state",
311 })
312 onosaaaTxEapolResIdentityMsg = prometheus.NewGauge(
313 prometheus.GaugeOpts{
314 Name: "onosaaa_tx_eapol_Res_IdentityMsg",
315 Help: "Number of authenticating transitions due to EAP response or identity message",
316 })
317 onosaaaTxAuthSuccess = prometheus.NewGauge(
318 prometheus.GaugeOpts{
319 Name: "onosaaa_tx_auth_Success",
320 Help: "Number of authenticated transitions due to successful authentication",
321 })
322 onosaaaTxAuthFailure = prometheus.NewGauge(
323 prometheus.GaugeOpts{
324 Name: "onosaaa_tx_auth_Failure",
325 Help: "Number of transitions to held due to authentication failure",
326 })
327 onosaaaTxStartReq = prometheus.NewGauge(
328 prometheus.GaugeOpts{
329 Name: "onosaaa_tx_start_Req",
330 Help: "Number of transitions to connecting due to start request",
331 })
332 onosaaaEapPktTxAuthChooseEap = prometheus.NewGauge(
333 prometheus.GaugeOpts{
334 Name: "onosaaa_eap_Pkt_tx_auth_choosing_Eap",
335 Help: "Number of EAP request packets sent due to the authenticator choosing the EAP method",
336 })
337 onosaaaTxRespnotNak = prometheus.NewGauge(
338 prometheus.GaugeOpts{
339 Name: "onosaaa_tx_Resp_not_Nak",
340 Help: "Number of transitions to response (received response other that NAK)",
shubham sharmae7f85752019-09-16 13:37:18 +0000341 })
342 onosaaaEapolFramesTx = prometheus.NewGauge(
343 prometheus.GaugeOpts{
344 Name: "onosaaa_eapol_frames_tx",
345 Help: "Number of EAPOL frames transmitted",
346 })
347 onosaaaAuthStateIdle = prometheus.NewGauge(
348 prometheus.GaugeOpts{
349 Name: "onosaaa_auth_state_idle",
350 Help: "Number of state machine status as Idle",
351 })
352 onosaaaRequestIdFramesTx = prometheus.NewGauge(
353 prometheus.GaugeOpts{
354 Name: "onosaaa_tx_request_id_frames",
355 Help: "Number of request ID EAP frames transmitted",
356 })
357 onosaaaRequestEapFramesTx = prometheus.NewGauge(
358 prometheus.GaugeOpts{
359 Name: "onosaaa_tx_request_eap_frames",
360 Help: "Number of request EAP frames transmitted",
361 })
362 onosaaaInvalidPktType = prometheus.NewGauge(
363 prometheus.GaugeOpts{
364 Name: "onosaaa_invalid_pkt_type",
365 Help: "Number of EAPOL frames received with invalid frame(Packet) type",
366 })
367 onosaaaInvalidBodyLength = prometheus.NewGauge(
368 prometheus.GaugeOpts{
369 Name: "onosaaa_invalid_body_length",
370 Help: "Number of EAPOL frames received with invalid body length",
371 })
372 onosaaaValidEapolFramesRx = prometheus.NewGauge(
373 prometheus.GaugeOpts{
374 Name: "onosaaa_rx_valid_eapol_frames",
375 Help: "Number of valid EAPOL frames received",
376 })
377 onosaaaPendingResSupplicant = prometheus.NewGauge(
378 prometheus.GaugeOpts{
379 Name: "onosaaa_pending_response_supplicant",
380 Help: "Number of request pending response from supplicant",
381 })
382 onosaaaRxResIdEapFrames = prometheus.NewGauge(
383 prometheus.GaugeOpts{
384 Name: "onosaaa_rx_res_id_eap_frames",
385 Help: "Number of response ID EAP frames received",
Shubham Sharma57600bf2019-08-09 07:09:57 +0000386 })
Matteo Scandoloaab36db2018-10-09 19:54:11 -0700387)
388
389func exportVolthaKPI(kpi VolthaKPI) {
390
391 for _, data := range kpi.SliceDatas {
392 switch title := data.Metadata.Title; title {
393 case "Ethernet", "PON":
394 volthaTxBytesTotal.WithLabelValues(
395 data.Metadata.LogicalDeviceID,
396 data.Metadata.SerialNumber,
397 data.Metadata.DeviceID,
398 data.Metadata.Context.InterfaceID,
399 data.Metadata.Context.PonID,
400 data.Metadata.Context.PortNumber,
401 data.Metadata.Title,
402 ).Set(data.Metrics.TxBytes)
403
404 volthaRxBytesTotal.WithLabelValues(
405 data.Metadata.LogicalDeviceID,
406 data.Metadata.SerialNumber,
407 data.Metadata.DeviceID,
408 data.Metadata.Context.InterfaceID,
409 data.Metadata.Context.PonID,
410 data.Metadata.Context.PortNumber,
411 data.Metadata.Title,
412 ).Set(data.Metrics.RxBytes)
413
414 volthaTxPacketsTotal.WithLabelValues(
415 data.Metadata.LogicalDeviceID,
416 data.Metadata.SerialNumber,
417 data.Metadata.DeviceID,
418 data.Metadata.Context.InterfaceID,
419 data.Metadata.Context.PonID,
420 data.Metadata.Context.PortNumber,
421 data.Metadata.Title,
422 ).Set(data.Metrics.TxPackets)
423
424 volthaRxPacketsTotal.WithLabelValues(
425 data.Metadata.LogicalDeviceID,
426 data.Metadata.SerialNumber,
427 data.Metadata.DeviceID,
428 data.Metadata.Context.InterfaceID,
429 data.Metadata.Context.PonID,
430 data.Metadata.Context.PortNumber,
431 data.Metadata.Title,
432 ).Set(data.Metrics.RxPackets)
433
434 volthaTxErrorPacketsTotal.WithLabelValues(
435 data.Metadata.LogicalDeviceID,
436 data.Metadata.SerialNumber,
437 data.Metadata.DeviceID,
438 data.Metadata.Context.InterfaceID,
439 data.Metadata.Context.PonID,
440 data.Metadata.Context.PortNumber,
441 data.Metadata.Title,
442 ).Set(data.Metrics.TxErrorPackets)
443
444 volthaRxErrorPacketsTotal.WithLabelValues(
445 data.Metadata.LogicalDeviceID,
446 data.Metadata.SerialNumber,
447 data.Metadata.DeviceID,
448 data.Metadata.Context.InterfaceID,
449 data.Metadata.Context.PonID,
450 data.Metadata.Context.PortNumber,
451 data.Metadata.Title,
452 ).Set(data.Metrics.RxErrorPackets)
453
454 // TODO add metrics for:
455 // TxBcastPackets
456 // TxUnicastPackets
457 // TxMulticastPackets
458 // RxBcastPackets
459 // RxMulticastPackets
460
461 case "Ethernet_Bridge_Port_History":
462 if data.Metadata.Context.Upstream == "True" {
463 // ONU. Extended Ethernet statistics.
464 volthaTxPacketsTotal.WithLabelValues(
465 data.Metadata.LogicalDeviceID,
466 data.Metadata.SerialNumber,
467 data.Metadata.DeviceID,
468 "NA", // InterfaceID
469 "NA", // PonID
470 "NA", // PortNumber
471 data.Metadata.Title,
472 ).Add(data.Metrics.Packets)
473
474 volthaTxBytesTotal.WithLabelValues(
475 data.Metadata.LogicalDeviceID,
476 data.Metadata.SerialNumber,
477 data.Metadata.DeviceID,
478 "NA", // InterfaceID
479 "NA", // PonID
480 "NA", // PortNumber
481 data.Metadata.Title,
482 ).Add(data.Metrics.Octets)
483 } else {
484 // ONU. Extended Ethernet statistics.
485 volthaRxPacketsTotal.WithLabelValues(
486 data.Metadata.LogicalDeviceID,
487 data.Metadata.SerialNumber,
488 data.Metadata.DeviceID,
489 "NA", // InterfaceID
490 "NA", // PonID
491 "NA", // PortNumber
492 data.Metadata.Title,
493 ).Add(data.Metrics.Packets)
494
495 volthaRxBytesTotal.WithLabelValues(
496 data.Metadata.LogicalDeviceID,
497 data.Metadata.SerialNumber,
498 data.Metadata.DeviceID,
499 "NA", // InterfaceID
500 "NA", // PonID
501 "NA", // PortNumber
502 data.Metadata.Title,
503 ).Add(data.Metrics.Octets)
504 }
505
Ganesh Bhure967018e2019-07-29 14:48:32 +0530506 case "PON_Optical":
507 VolthaOnuLaserBiasCurrent.WithLabelValues(
508 data.Metadata.LogicalDeviceID,
509 data.Metadata.SerialNumber,
510 data.Metadata.DeviceID,
511 data.Metadata.Context.InterfaceID,
512 data.Metadata.Context.PonID,
513 data.Metadata.Context.PortNumber,
514 data.Metadata.Title,
515 ).Set(data.Metrics.LaserBiasCurrent)
516
517 volthaOnuTemperature.WithLabelValues(
518 data.Metadata.LogicalDeviceID,
519 data.Metadata.SerialNumber,
520 data.Metadata.DeviceID,
521 data.Metadata.Context.InterfaceID,
522 data.Metadata.Context.PonID,
523 data.Metadata.Context.PortNumber,
524 data.Metadata.Title,
525 ).Set(data.Metrics.Temperature)
526
527 VolthaOnuPowerFeedVoltage.WithLabelValues(
528 data.Metadata.LogicalDeviceID,
529 data.Metadata.SerialNumber,
530 data.Metadata.DeviceID,
531 data.Metadata.Context.InterfaceID,
532 data.Metadata.Context.PonID,
533 data.Metadata.Context.PortNumber,
534 data.Metadata.Title,
535 ).Set(data.Metrics.PowerFeedVoltage)
536
537 VolthaOnuMeanOpticalLaunchPower.WithLabelValues(
538 data.Metadata.LogicalDeviceID,
539 data.Metadata.SerialNumber,
540 data.Metadata.DeviceID,
541 data.Metadata.Context.InterfaceID,
542 data.Metadata.Context.PonID,
543 data.Metadata.Context.PortNumber,
544 data.Metadata.Title,
545 ).Set(data.Metrics.MeanOpticalLaunchPower)
546
547 VolthaOnuReceivedOpticalPower.WithLabelValues(
548 data.Metadata.LogicalDeviceID,
549 data.Metadata.SerialNumber,
550 data.Metadata.DeviceID,
551 data.Metadata.Context.InterfaceID,
552 data.Metadata.Context.PonID,
553 data.Metadata.Context.PortNumber,
554 data.Metadata.Title,
555 ).Set(data.Metrics.ReceivedOpticalPower)
556
Matteo Scandoloaab36db2018-10-09 19:54:11 -0700557 case "Ethernet_UNI_History":
558 // ONU. Do nothing.
559
560 case "FEC_History":
561 // ONU. Do Nothing.
562
563 volthaTxBytesTotal.WithLabelValues(
564 data.Metadata.LogicalDeviceID,
565 data.Metadata.SerialNumber,
566 data.Metadata.DeviceID,
567 data.Metadata.Context.InterfaceID,
568 data.Metadata.Context.PonID,
569 data.Metadata.Context.PortNumber,
570 data.Metadata.Title,
571 ).Set(data.Metrics.TxBytes)
572
573 volthaRxBytesTotal.WithLabelValues(
574 data.Metadata.LogicalDeviceID,
575 data.Metadata.SerialNumber,
576 data.Metadata.DeviceID,
577 data.Metadata.Context.InterfaceID,
578 data.Metadata.Context.PonID,
579 data.Metadata.Context.PortNumber,
580 data.Metadata.Title,
581 ).Set(data.Metrics.RxBytes)
582
583 volthaTxPacketsTotal.WithLabelValues(
584 data.Metadata.LogicalDeviceID,
585 data.Metadata.SerialNumber,
586 data.Metadata.DeviceID,
587 data.Metadata.Context.InterfaceID,
588 data.Metadata.Context.PonID,
589 data.Metadata.Context.PortNumber,
590 data.Metadata.Title,
591 ).Set(data.Metrics.TxPackets)
592
593 volthaRxPacketsTotal.WithLabelValues(
594 data.Metadata.LogicalDeviceID,
595 data.Metadata.SerialNumber,
596 data.Metadata.DeviceID,
597 data.Metadata.Context.InterfaceID,
598 data.Metadata.Context.PonID,
599 data.Metadata.Context.PortNumber,
600 data.Metadata.Title,
601 ).Set(data.Metrics.RxPackets)
602
603 volthaTxErrorPacketsTotal.WithLabelValues(
604 data.Metadata.LogicalDeviceID,
605 data.Metadata.SerialNumber,
606 data.Metadata.DeviceID,
607 data.Metadata.Context.InterfaceID,
608 data.Metadata.Context.PonID,
609 data.Metadata.Context.PortNumber,
610 data.Metadata.Title,
611 ).Set(data.Metrics.TxErrorPackets)
612
613 volthaRxErrorPacketsTotal.WithLabelValues(
614 data.Metadata.LogicalDeviceID,
615 data.Metadata.SerialNumber,
616 data.Metadata.DeviceID,
617 data.Metadata.Context.InterfaceID,
618 data.Metadata.Context.PonID,
619 data.Metadata.Context.PortNumber,
620 data.Metadata.Title,
621 ).Set(data.Metrics.RxErrorPackets)
622
623 // TODO add metrics for:
624 // TxBcastPackets
625 // TxUnicastPackets
626 // TxMulticastPackets
627 // RxBcastPackets
628 // RxMulticastPackets
629
630 case "voltha.internal":
631 // Voltha Internal. Do nothing.
632 }
633 }
634}
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530635
636func exportOnosKPI(kpi OnosKPI) {
637
638 for _, data := range kpi.Ports {
639
640 onosTxBytesTotal.WithLabelValues(
641 kpi.DeviceID,
642 data.PortID,
643 ).Set(data.TxBytes)
644
645 onosRxBytesTotal.WithLabelValues(
646 kpi.DeviceID,
647 data.PortID,
648 ).Set(data.RxBytes)
649
650 onosTxPacketsTotal.WithLabelValues(
651 kpi.DeviceID,
652 data.PortID,
653 ).Set(data.TxPackets)
654
655 onosRxPacketsTotal.WithLabelValues(
656 kpi.DeviceID,
657 data.PortID,
658 ).Set(data.RxPackets)
659
660 onosTxDropPacketsTotal.WithLabelValues(
661 kpi.DeviceID,
662 data.PortID,
663 ).Set(data.TxPacketsDrop)
664
665 onosRxDropPacketsTotal.WithLabelValues(
666 kpi.DeviceID,
667 data.PortID,
668 ).Set(data.RxPacketsDrop)
669 }
670}
671
672func exportImporterKPI(kpi ImporterKPI) {
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530673 deviceLaserBiasCurrent.Set(kpi.LaserBiasCurrent)
674 deviceTemperature.Set(kpi.Temperature)
675 deviceTxPower.Set(kpi.TxPower)
676 deviceVoltage.Set(kpi.Voltage)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530677}
678
kartikey dubey72ef3b82019-05-27 06:50:04 +0000679func exportOnosAaaKPI(kpi OnosAaaKPI) {
680
681 onosaaaRxAcceptResponses.Set(kpi.RxAcceptResponses)
682
683 onosaaaRxRejectResponses.Set(kpi.RxRejectResponses)
684
685 onosaaaRxChallengeResponses.Set(kpi.RxChallengeResponses)
686
687 onosaaaTxAccessRequests.Set(kpi.TxAccessRequests)
688
689 onosaaaRxInvalidValidators.Set(kpi.RxInvalidValidators)
690
691 onosaaaRxUnknownType.Set(kpi.RxUnknownType)
692
693 onosaaaPendingRequests.Set(kpi.PendingRequests)
694
695 onosaaaRxDroppedResponses.Set(kpi.RxDroppedResponses)
696
697 onosaaaRxMalformedResponses.Set(kpi.RxMalformedResponses)
698
699 onosaaaRxUnknownserver.Set(kpi.RxUnknownserver)
700
701 onosaaaRequestRttMillis.Set(kpi.RequestRttMillis)
702
703 onosaaaRequestReTx.Set(kpi.RequestReTx)
Shubham Sharma57600bf2019-08-09 07:09:57 +0000704
705 onosaaaRxEapolLogoff.Set(kpi.RxEapolLogoff)
706
707 onosaaaTxEapolResIdentityMsg.Set(kpi.TxEapolResIdentityMsg)
708
709 onosaaaTxAuthSuccess.Set(kpi.TxAuthSuccess)
710
711 onosaaaTxAuthFailure.Set(kpi.TxAuthFailure)
712
713 onosaaaTxStartReq.Set(kpi.TxStartReq)
714
715 onosaaaEapPktTxAuthChooseEap.Set(kpi.EapPktTxAuthChooseEap)
716
717 onosaaaTxRespnotNak.Set(kpi.TxResponseNotNak)
shubham sharmae7f85752019-09-16 13:37:18 +0000718
719 onosaaaEapolFramesTx.Set(kpi.EapolFramesTx)
720
721 onosaaaAuthStateIdle.Set(kpi.AuthStateIdle)
722
723 onosaaaRequestIdFramesTx.Set(kpi.RequestIdFramesTx)
724
725 onosaaaRequestEapFramesTx.Set(kpi.RequestEapFramesTx)
726
727 onosaaaInvalidPktType.Set(kpi.InvalidPktType)
728
729 onosaaaInvalidBodyLength.Set(kpi.InvalidBodyLength)
730
731 onosaaaValidEapolFramesRx.Set(kpi.ValidEapolFramesRx)
732
733 onosaaaPendingResSupplicant.Set(kpi.PendingResSupplicant)
734
735 onosaaaRxResIdEapFrames.Set(kpi.RxResIdEapFrames)
kartikey dubey72ef3b82019-05-27 06:50:04 +0000736}
737
Daniele Morobe242582019-10-01 14:02:46 -0700738func exportOnosPppoeKPI(kpi OnosPppoeKPI) {
739 for _, s := range kpi.Subscribers {
740
741 logger.WithFields(log.Fields{
742 "Mac": s.Mac,
743 "Ip": s.Ip,
744 "SessionId": strconv.Itoa(s.SessionId),
745 "STag": strconv.Itoa(s.STag),
746 "CTag": strconv.Itoa(s.CTag),
747 "onuSerialNumber": s.SerialNumber,
748 }).Trace("Received OnosPppoeKPI message")
749
750 onosPppoeUpTermBytes.WithLabelValues(
751 s.Mac,
752 s.Ip,
753 strconv.Itoa(s.SessionId),
754 strconv.Itoa(s.STag),
755 strconv.Itoa(s.CTag),
756 s.SerialNumber,
757 ).Set(s.UpTermBytes)
758 onosPppoeUpTermPackets.WithLabelValues(
759 s.Mac,
760 s.Ip,
761 strconv.Itoa(s.SessionId),
762 strconv.Itoa(s.STag),
763 strconv.Itoa(s.CTag),
764 s.SerialNumber,
765 ).Set(s.UpTermPackets)
766 onosPppoeUpDropBytes.WithLabelValues(
767 s.Mac,
768 s.Ip,
769 strconv.Itoa(s.SessionId),
770 strconv.Itoa(s.STag),
771 strconv.Itoa(s.CTag),
772 s.SerialNumber,
773 ).Set(s.UpDropBytes)
774 onosPppoeUpDropPackets.WithLabelValues(
775 s.Mac,
776 s.Ip,
777 strconv.Itoa(s.SessionId),
778 strconv.Itoa(s.STag),
779 strconv.Itoa(s.CTag),
780 s.SerialNumber,
781 ).Set(s.UpDropPackets)
782 onosPppoeUpControlPackets.WithLabelValues(
783 s.Mac,
784 s.Ip,
785 strconv.Itoa(s.SessionId),
786 strconv.Itoa(s.STag),
787 strconv.Itoa(s.CTag),
788 s.SerialNumber,
789 ).Set(s.UpControlPackets)
790 onosPppoeDownRxBytes.WithLabelValues(
791 s.Mac,
792 s.Ip,
793 strconv.Itoa(s.SessionId),
794 strconv.Itoa(s.STag),
795 strconv.Itoa(s.CTag),
796 s.SerialNumber,
797 ).Set(s.DownRxBytes)
798 onosPppoeDownRxPackets.WithLabelValues(
799 s.Mac,
800 s.Ip,
801 strconv.Itoa(s.SessionId),
802 strconv.Itoa(s.STag),
803 strconv.Itoa(s.CTag),
804 s.SerialNumber,
805 ).Set(s.DownRxPackets)
806 onosPppoeDownTxBytes.WithLabelValues(
807 s.Mac,
808 s.Ip,
809 strconv.Itoa(s.SessionId),
810 strconv.Itoa(s.STag),
811 strconv.Itoa(s.CTag),
812 s.SerialNumber,
813 ).Set(s.DownTxBytes)
814 onosPppoeDownTxPackets.WithLabelValues(
815 s.Mac,
816 s.Ip,
817 strconv.Itoa(s.SessionId),
818 strconv.Itoa(s.STag),
819 strconv.Itoa(s.CTag),
820 s.SerialNumber,
821 ).Set(s.DownTxPackets)
822 }
823}
824
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530825func export(topic *string, data []byte) {
826 switch *topic {
827 case "voltha.kpis":
828 kpi := VolthaKPI{}
829 err := json.Unmarshal(data, &kpi)
830 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530831 logger.Error("Invalid msg on voltha.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530832 break
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530833 }
834 exportVolthaKPI(kpi)
835 case "onos.kpis":
836 kpi := OnosKPI{}
837 err := json.Unmarshal(data, &kpi)
838 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530839 logger.Error("Invalid msg on onos.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530840 break
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530841 }
842 exportOnosKPI(kpi)
843 case "importer.kpis":
844 kpi := ImporterKPI{}
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530845 strData := string(data)
846 idx := strings.Index(strData, "{")
847 strData = strData[idx:]
848
849 var m map[string]interface{}
850 err := json.Unmarshal([]byte(strData), &m)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530851 if err != nil {
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530852 logger.Error("Invalid msg on importer.kpis: %s", err.Error())
853 logger.Debug("Unprocessed Msg: %s", strData)
854 break
855 }
856 if val, ok := m["TransceiverStatistics"]; ok {
857 stats := val.(map[string]interface{})
858 //kpi.Timestamp = time.Now().UnixNano()
859 kpi.LaserBiasCurrent = stats["BiasCurrent"].(map[string]interface{})["Reading"].(float64)
860 kpi.Temperature = stats["Temperature"].(map[string]interface{})["Reading"].(float64)
861 kpi.TxPower = stats["TxPower"].(map[string]interface{})["Reading"].(float64)
862 kpi.Voltage = stats["Voltage"].(map[string]interface{})["Reading"].(float64)
863 } else {
864 logger.Error("Optical stats (TransceiverStatistics) information missing [topic=importer.kpis")
865 logger.Debug("Unprocessed Msg: %s", strData)
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530866 break
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530867 }
868 exportImporterKPI(kpi)
kartikey dubey72ef3b82019-05-27 06:50:04 +0000869 case "onos.aaa.stats.kpis":
870 kpi := OnosAaaKPI{}
871 err := json.Unmarshal(data, &kpi)
872 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530873 logger.Error("Invalid msg on onos.aaa.stats.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530874 break
kartikey dubey72ef3b82019-05-27 06:50:04 +0000875 }
876 exportOnosAaaKPI(kpi)
Daniele Morobe242582019-10-01 14:02:46 -0700877 case "pppoe.stats":
878 kpi := OnosPppoeKPI{}
879 err := json.Unmarshal(data, &kpi)
880 if err != nil {
881 logger.Error("Invalid msg on pppoe.stats: %s, Unprocessed Msg: %s", err.Error(), string(data))
882 break
883 }
884 exportOnosPppoeKPI(kpi)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530885 default:
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530886 logger.Warn("Unexpected export. Topic [%s] not supported. Should not come here", *topic)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530887 }
888}