blob: f8d9d7033eaa553aaaf7b0623e52af1294ac5e70 [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 })
Matteo Scandoloaab36db2018-10-09 19:54:11 -0700307)
308
309func exportVolthaKPI(kpi VolthaKPI) {
310
311 for _, data := range kpi.SliceDatas {
312 switch title := data.Metadata.Title; title {
313 case "Ethernet", "PON":
314 volthaTxBytesTotal.WithLabelValues(
315 data.Metadata.LogicalDeviceID,
316 data.Metadata.SerialNumber,
317 data.Metadata.DeviceID,
318 data.Metadata.Context.InterfaceID,
319 data.Metadata.Context.PonID,
320 data.Metadata.Context.PortNumber,
321 data.Metadata.Title,
322 ).Set(data.Metrics.TxBytes)
323
324 volthaRxBytesTotal.WithLabelValues(
325 data.Metadata.LogicalDeviceID,
326 data.Metadata.SerialNumber,
327 data.Metadata.DeviceID,
328 data.Metadata.Context.InterfaceID,
329 data.Metadata.Context.PonID,
330 data.Metadata.Context.PortNumber,
331 data.Metadata.Title,
332 ).Set(data.Metrics.RxBytes)
333
334 volthaTxPacketsTotal.WithLabelValues(
335 data.Metadata.LogicalDeviceID,
336 data.Metadata.SerialNumber,
337 data.Metadata.DeviceID,
338 data.Metadata.Context.InterfaceID,
339 data.Metadata.Context.PonID,
340 data.Metadata.Context.PortNumber,
341 data.Metadata.Title,
342 ).Set(data.Metrics.TxPackets)
343
344 volthaRxPacketsTotal.WithLabelValues(
345 data.Metadata.LogicalDeviceID,
346 data.Metadata.SerialNumber,
347 data.Metadata.DeviceID,
348 data.Metadata.Context.InterfaceID,
349 data.Metadata.Context.PonID,
350 data.Metadata.Context.PortNumber,
351 data.Metadata.Title,
352 ).Set(data.Metrics.RxPackets)
353
354 volthaTxErrorPacketsTotal.WithLabelValues(
355 data.Metadata.LogicalDeviceID,
356 data.Metadata.SerialNumber,
357 data.Metadata.DeviceID,
358 data.Metadata.Context.InterfaceID,
359 data.Metadata.Context.PonID,
360 data.Metadata.Context.PortNumber,
361 data.Metadata.Title,
362 ).Set(data.Metrics.TxErrorPackets)
363
364 volthaRxErrorPacketsTotal.WithLabelValues(
365 data.Metadata.LogicalDeviceID,
366 data.Metadata.SerialNumber,
367 data.Metadata.DeviceID,
368 data.Metadata.Context.InterfaceID,
369 data.Metadata.Context.PonID,
370 data.Metadata.Context.PortNumber,
371 data.Metadata.Title,
372 ).Set(data.Metrics.RxErrorPackets)
373
374 // TODO add metrics for:
375 // TxBcastPackets
376 // TxUnicastPackets
377 // TxMulticastPackets
378 // RxBcastPackets
379 // RxMulticastPackets
380
381 case "Ethernet_Bridge_Port_History":
382 if data.Metadata.Context.Upstream == "True" {
383 // ONU. Extended Ethernet statistics.
384 volthaTxPacketsTotal.WithLabelValues(
385 data.Metadata.LogicalDeviceID,
386 data.Metadata.SerialNumber,
387 data.Metadata.DeviceID,
388 "NA", // InterfaceID
389 "NA", // PonID
390 "NA", // PortNumber
391 data.Metadata.Title,
392 ).Add(data.Metrics.Packets)
393
394 volthaTxBytesTotal.WithLabelValues(
395 data.Metadata.LogicalDeviceID,
396 data.Metadata.SerialNumber,
397 data.Metadata.DeviceID,
398 "NA", // InterfaceID
399 "NA", // PonID
400 "NA", // PortNumber
401 data.Metadata.Title,
402 ).Add(data.Metrics.Octets)
403 } else {
404 // ONU. Extended Ethernet statistics.
405 volthaRxPacketsTotal.WithLabelValues(
406 data.Metadata.LogicalDeviceID,
407 data.Metadata.SerialNumber,
408 data.Metadata.DeviceID,
409 "NA", // InterfaceID
410 "NA", // PonID
411 "NA", // PortNumber
412 data.Metadata.Title,
413 ).Add(data.Metrics.Packets)
414
415 volthaRxBytesTotal.WithLabelValues(
416 data.Metadata.LogicalDeviceID,
417 data.Metadata.SerialNumber,
418 data.Metadata.DeviceID,
419 "NA", // InterfaceID
420 "NA", // PonID
421 "NA", // PortNumber
422 data.Metadata.Title,
423 ).Add(data.Metrics.Octets)
424 }
425
Ganesh Bhure967018e2019-07-29 14:48:32 +0530426 case "PON_Optical":
427 VolthaOnuLaserBiasCurrent.WithLabelValues(
428 data.Metadata.LogicalDeviceID,
429 data.Metadata.SerialNumber,
430 data.Metadata.DeviceID,
431 data.Metadata.Context.InterfaceID,
432 data.Metadata.Context.PonID,
433 data.Metadata.Context.PortNumber,
434 data.Metadata.Title,
435 ).Set(data.Metrics.LaserBiasCurrent)
436
437 volthaOnuTemperature.WithLabelValues(
438 data.Metadata.LogicalDeviceID,
439 data.Metadata.SerialNumber,
440 data.Metadata.DeviceID,
441 data.Metadata.Context.InterfaceID,
442 data.Metadata.Context.PonID,
443 data.Metadata.Context.PortNumber,
444 data.Metadata.Title,
445 ).Set(data.Metrics.Temperature)
446
447 VolthaOnuPowerFeedVoltage.WithLabelValues(
448 data.Metadata.LogicalDeviceID,
449 data.Metadata.SerialNumber,
450 data.Metadata.DeviceID,
451 data.Metadata.Context.InterfaceID,
452 data.Metadata.Context.PonID,
453 data.Metadata.Context.PortNumber,
454 data.Metadata.Title,
455 ).Set(data.Metrics.PowerFeedVoltage)
456
457 VolthaOnuMeanOpticalLaunchPower.WithLabelValues(
458 data.Metadata.LogicalDeviceID,
459 data.Metadata.SerialNumber,
460 data.Metadata.DeviceID,
461 data.Metadata.Context.InterfaceID,
462 data.Metadata.Context.PonID,
463 data.Metadata.Context.PortNumber,
464 data.Metadata.Title,
465 ).Set(data.Metrics.MeanOpticalLaunchPower)
466
467 VolthaOnuReceivedOpticalPower.WithLabelValues(
468 data.Metadata.LogicalDeviceID,
469 data.Metadata.SerialNumber,
470 data.Metadata.DeviceID,
471 data.Metadata.Context.InterfaceID,
472 data.Metadata.Context.PonID,
473 data.Metadata.Context.PortNumber,
474 data.Metadata.Title,
475 ).Set(data.Metrics.ReceivedOpticalPower)
476
Matteo Scandoloaab36db2018-10-09 19:54:11 -0700477 case "Ethernet_UNI_History":
478 // ONU. Do nothing.
479
480 case "FEC_History":
481 // ONU. Do Nothing.
482
483 volthaTxBytesTotal.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.TxBytes)
492
493 volthaRxBytesTotal.WithLabelValues(
494 data.Metadata.LogicalDeviceID,
495 data.Metadata.SerialNumber,
496 data.Metadata.DeviceID,
497 data.Metadata.Context.InterfaceID,
498 data.Metadata.Context.PonID,
499 data.Metadata.Context.PortNumber,
500 data.Metadata.Title,
501 ).Set(data.Metrics.RxBytes)
502
503 volthaTxPacketsTotal.WithLabelValues(
504 data.Metadata.LogicalDeviceID,
505 data.Metadata.SerialNumber,
506 data.Metadata.DeviceID,
507 data.Metadata.Context.InterfaceID,
508 data.Metadata.Context.PonID,
509 data.Metadata.Context.PortNumber,
510 data.Metadata.Title,
511 ).Set(data.Metrics.TxPackets)
512
513 volthaRxPacketsTotal.WithLabelValues(
514 data.Metadata.LogicalDeviceID,
515 data.Metadata.SerialNumber,
516 data.Metadata.DeviceID,
517 data.Metadata.Context.InterfaceID,
518 data.Metadata.Context.PonID,
519 data.Metadata.Context.PortNumber,
520 data.Metadata.Title,
521 ).Set(data.Metrics.RxPackets)
522
523 volthaTxErrorPacketsTotal.WithLabelValues(
524 data.Metadata.LogicalDeviceID,
525 data.Metadata.SerialNumber,
526 data.Metadata.DeviceID,
527 data.Metadata.Context.InterfaceID,
528 data.Metadata.Context.PonID,
529 data.Metadata.Context.PortNumber,
530 data.Metadata.Title,
531 ).Set(data.Metrics.TxErrorPackets)
532
533 volthaRxErrorPacketsTotal.WithLabelValues(
534 data.Metadata.LogicalDeviceID,
535 data.Metadata.SerialNumber,
536 data.Metadata.DeviceID,
537 data.Metadata.Context.InterfaceID,
538 data.Metadata.Context.PonID,
539 data.Metadata.Context.PortNumber,
540 data.Metadata.Title,
541 ).Set(data.Metrics.RxErrorPackets)
542
543 // TODO add metrics for:
544 // TxBcastPackets
545 // TxUnicastPackets
546 // TxMulticastPackets
547 // RxBcastPackets
548 // RxMulticastPackets
549
550 case "voltha.internal":
551 // Voltha Internal. Do nothing.
552 }
553 }
554}
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530555
556func exportOnosKPI(kpi OnosKPI) {
557
558 for _, data := range kpi.Ports {
559
560 onosTxBytesTotal.WithLabelValues(
561 kpi.DeviceID,
562 data.PortID,
563 ).Set(data.TxBytes)
564
565 onosRxBytesTotal.WithLabelValues(
566 kpi.DeviceID,
567 data.PortID,
568 ).Set(data.RxBytes)
569
570 onosTxPacketsTotal.WithLabelValues(
571 kpi.DeviceID,
572 data.PortID,
573 ).Set(data.TxPackets)
574
575 onosRxPacketsTotal.WithLabelValues(
576 kpi.DeviceID,
577 data.PortID,
578 ).Set(data.RxPackets)
579
580 onosTxDropPacketsTotal.WithLabelValues(
581 kpi.DeviceID,
582 data.PortID,
583 ).Set(data.TxPacketsDrop)
584
585 onosRxDropPacketsTotal.WithLabelValues(
586 kpi.DeviceID,
587 data.PortID,
588 ).Set(data.RxPacketsDrop)
589 }
590}
591
592func exportImporterKPI(kpi ImporterKPI) {
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530593 deviceLaserBiasCurrent.Set(kpi.LaserBiasCurrent)
594 deviceTemperature.Set(kpi.Temperature)
595 deviceTxPower.Set(kpi.TxPower)
596 deviceVoltage.Set(kpi.Voltage)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530597}
598
kartikey dubey72ef3b82019-05-27 06:50:04 +0000599func exportOnosAaaKPI(kpi OnosAaaKPI) {
600
601 onosaaaRxAcceptResponses.Set(kpi.RxAcceptResponses)
602
603 onosaaaRxRejectResponses.Set(kpi.RxRejectResponses)
604
605 onosaaaRxChallengeResponses.Set(kpi.RxChallengeResponses)
606
607 onosaaaTxAccessRequests.Set(kpi.TxAccessRequests)
608
609 onosaaaRxInvalidValidators.Set(kpi.RxInvalidValidators)
610
611 onosaaaRxUnknownType.Set(kpi.RxUnknownType)
612
613 onosaaaPendingRequests.Set(kpi.PendingRequests)
614
615 onosaaaRxDroppedResponses.Set(kpi.RxDroppedResponses)
616
617 onosaaaRxMalformedResponses.Set(kpi.RxMalformedResponses)
618
619 onosaaaRxUnknownserver.Set(kpi.RxUnknownserver)
620
621 onosaaaRequestRttMillis.Set(kpi.RequestRttMillis)
622
623 onosaaaRequestReTx.Set(kpi.RequestReTx)
624}
625
Daniele Morobe242582019-10-01 14:02:46 -0700626func exportOnosPppoeKPI(kpi OnosPppoeKPI) {
627 for _, s := range kpi.Subscribers {
628
629 logger.WithFields(log.Fields{
630 "Mac": s.Mac,
631 "Ip": s.Ip,
632 "SessionId": strconv.Itoa(s.SessionId),
633 "STag": strconv.Itoa(s.STag),
634 "CTag": strconv.Itoa(s.CTag),
635 "onuSerialNumber": s.SerialNumber,
636 }).Trace("Received OnosPppoeKPI message")
637
638 onosPppoeUpTermBytes.WithLabelValues(
639 s.Mac,
640 s.Ip,
641 strconv.Itoa(s.SessionId),
642 strconv.Itoa(s.STag),
643 strconv.Itoa(s.CTag),
644 s.SerialNumber,
645 ).Set(s.UpTermBytes)
646 onosPppoeUpTermPackets.WithLabelValues(
647 s.Mac,
648 s.Ip,
649 strconv.Itoa(s.SessionId),
650 strconv.Itoa(s.STag),
651 strconv.Itoa(s.CTag),
652 s.SerialNumber,
653 ).Set(s.UpTermPackets)
654 onosPppoeUpDropBytes.WithLabelValues(
655 s.Mac,
656 s.Ip,
657 strconv.Itoa(s.SessionId),
658 strconv.Itoa(s.STag),
659 strconv.Itoa(s.CTag),
660 s.SerialNumber,
661 ).Set(s.UpDropBytes)
662 onosPppoeUpDropPackets.WithLabelValues(
663 s.Mac,
664 s.Ip,
665 strconv.Itoa(s.SessionId),
666 strconv.Itoa(s.STag),
667 strconv.Itoa(s.CTag),
668 s.SerialNumber,
669 ).Set(s.UpDropPackets)
670 onosPppoeUpControlPackets.WithLabelValues(
671 s.Mac,
672 s.Ip,
673 strconv.Itoa(s.SessionId),
674 strconv.Itoa(s.STag),
675 strconv.Itoa(s.CTag),
676 s.SerialNumber,
677 ).Set(s.UpControlPackets)
678 onosPppoeDownRxBytes.WithLabelValues(
679 s.Mac,
680 s.Ip,
681 strconv.Itoa(s.SessionId),
682 strconv.Itoa(s.STag),
683 strconv.Itoa(s.CTag),
684 s.SerialNumber,
685 ).Set(s.DownRxBytes)
686 onosPppoeDownRxPackets.WithLabelValues(
687 s.Mac,
688 s.Ip,
689 strconv.Itoa(s.SessionId),
690 strconv.Itoa(s.STag),
691 strconv.Itoa(s.CTag),
692 s.SerialNumber,
693 ).Set(s.DownRxPackets)
694 onosPppoeDownTxBytes.WithLabelValues(
695 s.Mac,
696 s.Ip,
697 strconv.Itoa(s.SessionId),
698 strconv.Itoa(s.STag),
699 strconv.Itoa(s.CTag),
700 s.SerialNumber,
701 ).Set(s.DownTxBytes)
702 onosPppoeDownTxPackets.WithLabelValues(
703 s.Mac,
704 s.Ip,
705 strconv.Itoa(s.SessionId),
706 strconv.Itoa(s.STag),
707 strconv.Itoa(s.CTag),
708 s.SerialNumber,
709 ).Set(s.DownTxPackets)
710 }
711}
712
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530713func export(topic *string, data []byte) {
714 switch *topic {
715 case "voltha.kpis":
716 kpi := VolthaKPI{}
717 err := json.Unmarshal(data, &kpi)
718 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530719 logger.Error("Invalid msg on voltha.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530720 break
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530721 }
722 exportVolthaKPI(kpi)
723 case "onos.kpis":
724 kpi := OnosKPI{}
725 err := json.Unmarshal(data, &kpi)
726 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530727 logger.Error("Invalid msg on onos.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530728 break
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530729 }
730 exportOnosKPI(kpi)
731 case "importer.kpis":
732 kpi := ImporterKPI{}
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530733 strData := string(data)
734 idx := strings.Index(strData, "{")
735 strData = strData[idx:]
736
737 var m map[string]interface{}
738 err := json.Unmarshal([]byte(strData), &m)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530739 if err != nil {
Ganesh Bhuref15383e2019-11-11 15:15:14 +0530740 logger.Error("Invalid msg on importer.kpis: %s", err.Error())
741 logger.Debug("Unprocessed Msg: %s", strData)
742 break
743 }
744 if val, ok := m["TransceiverStatistics"]; ok {
745 stats := val.(map[string]interface{})
746 //kpi.Timestamp = time.Now().UnixNano()
747 kpi.LaserBiasCurrent = stats["BiasCurrent"].(map[string]interface{})["Reading"].(float64)
748 kpi.Temperature = stats["Temperature"].(map[string]interface{})["Reading"].(float64)
749 kpi.TxPower = stats["TxPower"].(map[string]interface{})["Reading"].(float64)
750 kpi.Voltage = stats["Voltage"].(map[string]interface{})["Reading"].(float64)
751 } else {
752 logger.Error("Optical stats (TransceiverStatistics) information missing [topic=importer.kpis")
753 logger.Debug("Unprocessed Msg: %s", strData)
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530754 break
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530755 }
756 exportImporterKPI(kpi)
kartikey dubey72ef3b82019-05-27 06:50:04 +0000757 case "onos.aaa.stats.kpis":
758 kpi := OnosAaaKPI{}
759 err := json.Unmarshal(data, &kpi)
760 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530761 logger.Error("Invalid msg on onos.aaa.stats.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure0f2449c2019-07-15 10:31:38 +0530762 break
kartikey dubey72ef3b82019-05-27 06:50:04 +0000763 }
764 exportOnosAaaKPI(kpi)
Daniele Morobe242582019-10-01 14:02:46 -0700765 case "pppoe.stats":
766 kpi := OnosPppoeKPI{}
767 err := json.Unmarshal(data, &kpi)
768 if err != nil {
769 logger.Error("Invalid msg on pppoe.stats: %s, Unprocessed Msg: %s", err.Error(), string(data))
770 break
771 }
772 exportOnosPppoeKPI(kpi)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530773 default:
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530774 logger.Warn("Unexpected export. Topic [%s] not supported. Should not come here", *topic)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530775 }
776}