blob: 983f83a364ee2f72e7076964136367ed93e44b09 [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)",
341 })
Matteo Scandoloaab36db2018-10-09 19:54:11 -0700342)
343
344func exportVolthaKPI(kpi VolthaKPI) {
345
346 for _, data := range kpi.SliceDatas {
347 switch title := data.Metadata.Title; title {
348 case "Ethernet", "PON":
349 volthaTxBytesTotal.WithLabelValues(
350 data.Metadata.LogicalDeviceID,
351 data.Metadata.SerialNumber,
352 data.Metadata.DeviceID,
353 data.Metadata.Context.InterfaceID,
354 data.Metadata.Context.PonID,
355 data.Metadata.Context.PortNumber,
356 data.Metadata.Title,
357 ).Set(data.Metrics.TxBytes)
358
359 volthaRxBytesTotal.WithLabelValues(
360 data.Metadata.LogicalDeviceID,
361 data.Metadata.SerialNumber,
362 data.Metadata.DeviceID,
363 data.Metadata.Context.InterfaceID,
364 data.Metadata.Context.PonID,
365 data.Metadata.Context.PortNumber,
366 data.Metadata.Title,
367 ).Set(data.Metrics.RxBytes)
368
369 volthaTxPacketsTotal.WithLabelValues(
370 data.Metadata.LogicalDeviceID,
371 data.Metadata.SerialNumber,
372 data.Metadata.DeviceID,
373 data.Metadata.Context.InterfaceID,
374 data.Metadata.Context.PonID,
375 data.Metadata.Context.PortNumber,
376 data.Metadata.Title,
377 ).Set(data.Metrics.TxPackets)
378
379 volthaRxPacketsTotal.WithLabelValues(
380 data.Metadata.LogicalDeviceID,
381 data.Metadata.SerialNumber,
382 data.Metadata.DeviceID,
383 data.Metadata.Context.InterfaceID,
384 data.Metadata.Context.PonID,
385 data.Metadata.Context.PortNumber,
386 data.Metadata.Title,
387 ).Set(data.Metrics.RxPackets)
388
389 volthaTxErrorPacketsTotal.WithLabelValues(
390 data.Metadata.LogicalDeviceID,
391 data.Metadata.SerialNumber,
392 data.Metadata.DeviceID,
393 data.Metadata.Context.InterfaceID,
394 data.Metadata.Context.PonID,
395 data.Metadata.Context.PortNumber,
396 data.Metadata.Title,
397 ).Set(data.Metrics.TxErrorPackets)
398
399 volthaRxErrorPacketsTotal.WithLabelValues(
400 data.Metadata.LogicalDeviceID,
401 data.Metadata.SerialNumber,
402 data.Metadata.DeviceID,
403 data.Metadata.Context.InterfaceID,
404 data.Metadata.Context.PonID,
405 data.Metadata.Context.PortNumber,
406 data.Metadata.Title,
407 ).Set(data.Metrics.RxErrorPackets)
408
409 // TODO add metrics for:
410 // TxBcastPackets
411 // TxUnicastPackets
412 // TxMulticastPackets
413 // RxBcastPackets
414 // RxMulticastPackets
415
416 case "Ethernet_Bridge_Port_History":
417 if data.Metadata.Context.Upstream == "True" {
418 // ONU. Extended Ethernet statistics.
419 volthaTxPacketsTotal.WithLabelValues(
420 data.Metadata.LogicalDeviceID,
421 data.Metadata.SerialNumber,
422 data.Metadata.DeviceID,
423 "NA", // InterfaceID
424 "NA", // PonID
425 "NA", // PortNumber
426 data.Metadata.Title,
427 ).Add(data.Metrics.Packets)
428
429 volthaTxBytesTotal.WithLabelValues(
430 data.Metadata.LogicalDeviceID,
431 data.Metadata.SerialNumber,
432 data.Metadata.DeviceID,
433 "NA", // InterfaceID
434 "NA", // PonID
435 "NA", // PortNumber
436 data.Metadata.Title,
437 ).Add(data.Metrics.Octets)
438 } else {
439 // ONU. Extended Ethernet statistics.
440 volthaRxPacketsTotal.WithLabelValues(
441 data.Metadata.LogicalDeviceID,
442 data.Metadata.SerialNumber,
443 data.Metadata.DeviceID,
444 "NA", // InterfaceID
445 "NA", // PonID
446 "NA", // PortNumber
447 data.Metadata.Title,
448 ).Add(data.Metrics.Packets)
449
450 volthaRxBytesTotal.WithLabelValues(
451 data.Metadata.LogicalDeviceID,
452 data.Metadata.SerialNumber,
453 data.Metadata.DeviceID,
454 "NA", // InterfaceID
455 "NA", // PonID
456 "NA", // PortNumber
457 data.Metadata.Title,
458 ).Add(data.Metrics.Octets)
459 }
460
Ganesh Bhure967018e2019-07-29 14:48:32 +0530461 case "PON_Optical":
462 VolthaOnuLaserBiasCurrent.WithLabelValues(
463 data.Metadata.LogicalDeviceID,
464 data.Metadata.SerialNumber,
465 data.Metadata.DeviceID,
466 data.Metadata.Context.InterfaceID,
467 data.Metadata.Context.PonID,
468 data.Metadata.Context.PortNumber,
469 data.Metadata.Title,
470 ).Set(data.Metrics.LaserBiasCurrent)
471
472 volthaOnuTemperature.WithLabelValues(
473 data.Metadata.LogicalDeviceID,
474 data.Metadata.SerialNumber,
475 data.Metadata.DeviceID,
476 data.Metadata.Context.InterfaceID,
477 data.Metadata.Context.PonID,
478 data.Metadata.Context.PortNumber,
479 data.Metadata.Title,
480 ).Set(data.Metrics.Temperature)
481
482 VolthaOnuPowerFeedVoltage.WithLabelValues(
483 data.Metadata.LogicalDeviceID,
484 data.Metadata.SerialNumber,
485 data.Metadata.DeviceID,
486 data.Metadata.Context.InterfaceID,
487 data.Metadata.Context.PonID,
488 data.Metadata.Context.PortNumber,
489 data.Metadata.Title,
490 ).Set(data.Metrics.PowerFeedVoltage)
491
492 VolthaOnuMeanOpticalLaunchPower.WithLabelValues(
493 data.Metadata.LogicalDeviceID,
494 data.Metadata.SerialNumber,
495 data.Metadata.DeviceID,
496 data.Metadata.Context.InterfaceID,
497 data.Metadata.Context.PonID,
498 data.Metadata.Context.PortNumber,
499 data.Metadata.Title,
500 ).Set(data.Metrics.MeanOpticalLaunchPower)
501
502 VolthaOnuReceivedOpticalPower.WithLabelValues(
503 data.Metadata.LogicalDeviceID,
504 data.Metadata.SerialNumber,
505 data.Metadata.DeviceID,
506 data.Metadata.Context.InterfaceID,
507 data.Metadata.Context.PonID,
508 data.Metadata.Context.PortNumber,
509 data.Metadata.Title,
510 ).Set(data.Metrics.ReceivedOpticalPower)
511
Matteo Scandoloaab36db2018-10-09 19:54:11 -0700512 case "Ethernet_UNI_History":
513 // ONU. Do nothing.
514
515 case "FEC_History":
516 // ONU. Do Nothing.
517
518 volthaTxBytesTotal.WithLabelValues(
519 data.Metadata.LogicalDeviceID,
520 data.Metadata.SerialNumber,
521 data.Metadata.DeviceID,
522 data.Metadata.Context.InterfaceID,
523 data.Metadata.Context.PonID,
524 data.Metadata.Context.PortNumber,
525 data.Metadata.Title,
526 ).Set(data.Metrics.TxBytes)
527
528 volthaRxBytesTotal.WithLabelValues(
529 data.Metadata.LogicalDeviceID,
530 data.Metadata.SerialNumber,
531 data.Metadata.DeviceID,
532 data.Metadata.Context.InterfaceID,
533 data.Metadata.Context.PonID,
534 data.Metadata.Context.PortNumber,
535 data.Metadata.Title,
536 ).Set(data.Metrics.RxBytes)
537
538 volthaTxPacketsTotal.WithLabelValues(
539 data.Metadata.LogicalDeviceID,
540 data.Metadata.SerialNumber,
541 data.Metadata.DeviceID,
542 data.Metadata.Context.InterfaceID,
543 data.Metadata.Context.PonID,
544 data.Metadata.Context.PortNumber,
545 data.Metadata.Title,
546 ).Set(data.Metrics.TxPackets)
547
548 volthaRxPacketsTotal.WithLabelValues(
549 data.Metadata.LogicalDeviceID,
550 data.Metadata.SerialNumber,
551 data.Metadata.DeviceID,
552 data.Metadata.Context.InterfaceID,
553 data.Metadata.Context.PonID,
554 data.Metadata.Context.PortNumber,
555 data.Metadata.Title,
556 ).Set(data.Metrics.RxPackets)
557
558 volthaTxErrorPacketsTotal.WithLabelValues(
559 data.Metadata.LogicalDeviceID,
560 data.Metadata.SerialNumber,
561 data.Metadata.DeviceID,
562 data.Metadata.Context.InterfaceID,
563 data.Metadata.Context.PonID,
564 data.Metadata.Context.PortNumber,
565 data.Metadata.Title,
566 ).Set(data.Metrics.TxErrorPackets)
567
568 volthaRxErrorPacketsTotal.WithLabelValues(
569 data.Metadata.LogicalDeviceID,
570 data.Metadata.SerialNumber,
571 data.Metadata.DeviceID,
572 data.Metadata.Context.InterfaceID,
573 data.Metadata.Context.PonID,
574 data.Metadata.Context.PortNumber,
575 data.Metadata.Title,
576 ).Set(data.Metrics.RxErrorPackets)
577
578 // TODO add metrics for:
579 // TxBcastPackets
580 // TxUnicastPackets
581 // TxMulticastPackets
582 // RxBcastPackets
583 // RxMulticastPackets
584
585 case "voltha.internal":
586 // Voltha Internal. Do nothing.
587 }
588 }
589}
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530590
591func exportOnosKPI(kpi OnosKPI) {
592
593 for _, data := range kpi.Ports {
594
595 onosTxBytesTotal.WithLabelValues(
596 kpi.DeviceID,
597 data.PortID,
598 ).Set(data.TxBytes)
599
600 onosRxBytesTotal.WithLabelValues(
601 kpi.DeviceID,
602 data.PortID,
603 ).Set(data.RxBytes)
604
605 onosTxPacketsTotal.WithLabelValues(
606 kpi.DeviceID,
607 data.PortID,
608 ).Set(data.TxPackets)
609
610 onosRxPacketsTotal.WithLabelValues(
611 kpi.DeviceID,
612 data.PortID,
613 ).Set(data.RxPackets)
614
615 onosTxDropPacketsTotal.WithLabelValues(
616 kpi.DeviceID,
617 data.PortID,
618 ).Set(data.TxPacketsDrop)
619
620 onosRxDropPacketsTotal.WithLabelValues(
621 kpi.DeviceID,
622 data.PortID,
623 ).Set(data.RxPacketsDrop)
624 }
625}
626
627func exportImporterKPI(kpi ImporterKPI) {
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530628 deviceLaserBiasCurrent.Set(kpi.LaserBiasCurrent)
629 deviceTemperature.Set(kpi.Temperature)
630 deviceTxPower.Set(kpi.TxPower)
631 deviceVoltage.Set(kpi.Voltage)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530632}
633
kartikey dubey72ef3b82019-05-27 06:50:04 +0000634func exportOnosAaaKPI(kpi OnosAaaKPI) {
635
636 onosaaaRxAcceptResponses.Set(kpi.RxAcceptResponses)
637
638 onosaaaRxRejectResponses.Set(kpi.RxRejectResponses)
639
640 onosaaaRxChallengeResponses.Set(kpi.RxChallengeResponses)
641
642 onosaaaTxAccessRequests.Set(kpi.TxAccessRequests)
643
644 onosaaaRxInvalidValidators.Set(kpi.RxInvalidValidators)
645
646 onosaaaRxUnknownType.Set(kpi.RxUnknownType)
647
648 onosaaaPendingRequests.Set(kpi.PendingRequests)
649
650 onosaaaRxDroppedResponses.Set(kpi.RxDroppedResponses)
651
652 onosaaaRxMalformedResponses.Set(kpi.RxMalformedResponses)
653
654 onosaaaRxUnknownserver.Set(kpi.RxUnknownserver)
655
656 onosaaaRequestRttMillis.Set(kpi.RequestRttMillis)
657
658 onosaaaRequestReTx.Set(kpi.RequestReTx)
Shubham Sharma57600bf2019-08-09 07:09:57 +0000659
660 onosaaaRxEapolLogoff.Set(kpi.RxEapolLogoff)
661
662 onosaaaTxEapolResIdentityMsg.Set(kpi.TxEapolResIdentityMsg)
663
664 onosaaaTxAuthSuccess.Set(kpi.TxAuthSuccess)
665
666 onosaaaTxAuthFailure.Set(kpi.TxAuthFailure)
667
668 onosaaaTxStartReq.Set(kpi.TxStartReq)
669
670 onosaaaEapPktTxAuthChooseEap.Set(kpi.EapPktTxAuthChooseEap)
671
672 onosaaaTxRespnotNak.Set(kpi.TxResponseNotNak)
kartikey dubey72ef3b82019-05-27 06:50:04 +0000673}
674
Daniele Morobe242582019-10-01 14:02:46 -0700675func exportOnosPppoeKPI(kpi OnosPppoeKPI) {
676 for _, s := range kpi.Subscribers {
677
678 logger.WithFields(log.Fields{
679 "Mac": s.Mac,
680 "Ip": s.Ip,
681 "SessionId": strconv.Itoa(s.SessionId),
682 "STag": strconv.Itoa(s.STag),
683 "CTag": strconv.Itoa(s.CTag),
684 "onuSerialNumber": s.SerialNumber,
685 }).Trace("Received OnosPppoeKPI message")
686
687 onosPppoeUpTermBytes.WithLabelValues(
688 s.Mac,
689 s.Ip,
690 strconv.Itoa(s.SessionId),
691 strconv.Itoa(s.STag),
692 strconv.Itoa(s.CTag),
693 s.SerialNumber,
694 ).Set(s.UpTermBytes)
695 onosPppoeUpTermPackets.WithLabelValues(
696 s.Mac,
697 s.Ip,
698 strconv.Itoa(s.SessionId),
699 strconv.Itoa(s.STag),
700 strconv.Itoa(s.CTag),
701 s.SerialNumber,
702 ).Set(s.UpTermPackets)
703 onosPppoeUpDropBytes.WithLabelValues(
704 s.Mac,
705 s.Ip,
706 strconv.Itoa(s.SessionId),
707 strconv.Itoa(s.STag),
708 strconv.Itoa(s.CTag),
709 s.SerialNumber,
710 ).Set(s.UpDropBytes)
711 onosPppoeUpDropPackets.WithLabelValues(
712 s.Mac,
713 s.Ip,
714 strconv.Itoa(s.SessionId),
715 strconv.Itoa(s.STag),
716 strconv.Itoa(s.CTag),
717 s.SerialNumber,
718 ).Set(s.UpDropPackets)
719 onosPppoeUpControlPackets.WithLabelValues(
720 s.Mac,
721 s.Ip,
722 strconv.Itoa(s.SessionId),
723 strconv.Itoa(s.STag),
724 strconv.Itoa(s.CTag),
725 s.SerialNumber,
726 ).Set(s.UpControlPackets)
727 onosPppoeDownRxBytes.WithLabelValues(
728 s.Mac,
729 s.Ip,
730 strconv.Itoa(s.SessionId),
731 strconv.Itoa(s.STag),
732 strconv.Itoa(s.CTag),
733 s.SerialNumber,
734 ).Set(s.DownRxBytes)
735 onosPppoeDownRxPackets.WithLabelValues(
736 s.Mac,
737 s.Ip,
738 strconv.Itoa(s.SessionId),
739 strconv.Itoa(s.STag),
740 strconv.Itoa(s.CTag),
741 s.SerialNumber,
742 ).Set(s.DownRxPackets)
743 onosPppoeDownTxBytes.WithLabelValues(
744 s.Mac,
745 s.Ip,
746 strconv.Itoa(s.SessionId),
747 strconv.Itoa(s.STag),
748 strconv.Itoa(s.CTag),
749 s.SerialNumber,
750 ).Set(s.DownTxBytes)
751 onosPppoeDownTxPackets.WithLabelValues(
752 s.Mac,
753 s.Ip,
754 strconv.Itoa(s.SessionId),
755 strconv.Itoa(s.STag),
756 strconv.Itoa(s.CTag),
757 s.SerialNumber,
758 ).Set(s.DownTxPackets)
759 }
760}
761
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530762func export(topic *string, data []byte) {
763 switch *topic {
764 case "voltha.kpis":
765 kpi := VolthaKPI{}
766 err := json.Unmarshal(data, &kpi)
767 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530768 logger.Error("Invalid msg on voltha.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530769 break
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530770 }
771 exportVolthaKPI(kpi)
772 case "onos.kpis":
773 kpi := OnosKPI{}
774 err := json.Unmarshal(data, &kpi)
775 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530776 logger.Error("Invalid msg on onos.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530777 break
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530778 }
779 exportOnosKPI(kpi)
780 case "importer.kpis":
781 kpi := ImporterKPI{}
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530782 strData := string(data)
783 idx := strings.Index(strData, "{")
784 strData = strData[idx:]
785
786 var m map[string]interface{}
787 err := json.Unmarshal([]byte(strData), &m)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530788 if err != nil {
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530789 logger.Error("Invalid msg on importer.kpis: %s", err.Error())
790 logger.Debug("Unprocessed Msg: %s", strData)
791 break
792 }
793 if val, ok := m["TransceiverStatistics"]; ok {
794 stats := val.(map[string]interface{})
795 //kpi.Timestamp = time.Now().UnixNano()
796 kpi.LaserBiasCurrent = stats["BiasCurrent"].(map[string]interface{})["Reading"].(float64)
797 kpi.Temperature = stats["Temperature"].(map[string]interface{})["Reading"].(float64)
798 kpi.TxPower = stats["TxPower"].(map[string]interface{})["Reading"].(float64)
799 kpi.Voltage = stats["Voltage"].(map[string]interface{})["Reading"].(float64)
800 } else {
801 logger.Error("Optical stats (TransceiverStatistics) information missing [topic=importer.kpis")
802 logger.Debug("Unprocessed Msg: %s", strData)
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530803 break
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530804 }
805 exportImporterKPI(kpi)
kartikey dubey72ef3b82019-05-27 06:50:04 +0000806 case "onos.aaa.stats.kpis":
807 kpi := OnosAaaKPI{}
808 err := json.Unmarshal(data, &kpi)
809 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530810 logger.Error("Invalid msg on onos.aaa.stats.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530811 break
kartikey dubey72ef3b82019-05-27 06:50:04 +0000812 }
813 exportOnosAaaKPI(kpi)
Daniele Morobe242582019-10-01 14:02:46 -0700814 case "pppoe.stats":
815 kpi := OnosPppoeKPI{}
816 err := json.Unmarshal(data, &kpi)
817 if err != nil {
818 logger.Error("Invalid msg on pppoe.stats: %s, Unprocessed Msg: %s", err.Error(), string(data))
819 break
820 }
821 exportOnosPppoeKPI(kpi)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530822 default:
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530823 logger.Warn("Unexpected export. Topic [%s] not supported. Should not come here", *topic)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530824 }
825}