blob: f4ae0bf15a61a0fc4f69936f7259bb6a9a982590 [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"
Matteo Scandoloaab36db2018-10-09 19:54:11 -070021)
22
23var (
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053024 // voltha kpis
Matteo Scandoloaab36db2018-10-09 19:54:11 -070025 volthaTxBytesTotal = prometheus.NewGaugeVec(
26 prometheus.GaugeOpts{
27 Name: "voltha_tx_bytes_total",
28 Help: "Number of total bytes transmitted",
29 },
30 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
31 )
32 volthaRxBytesTotal = prometheus.NewGaugeVec(
33 prometheus.GaugeOpts{
34 Name: "voltha_rx_bytes_total",
35 Help: "Number of total bytes received",
36 },
37 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
38 )
39 volthaTxPacketsTotal = prometheus.NewGaugeVec(
40 prometheus.GaugeOpts{
41 Name: "voltha_tx_packets_total",
42 Help: "Number of total packets transmitted",
43 },
44 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
45 )
46 volthaRxPacketsTotal = prometheus.NewGaugeVec(
47 prometheus.GaugeOpts{
48 Name: "voltha_rx_packets_total",
49 Help: "Number of total packets received",
50 },
51 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
52 )
53
54 volthaTxErrorPacketsTotal = prometheus.NewGaugeVec(
55 prometheus.GaugeOpts{
56 Name: "voltha_tx_error_packets_total",
57 Help: "Number of total transmitted packets error",
58 },
59 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
60 )
61
62 volthaRxErrorPacketsTotal = prometheus.NewGaugeVec(
63 prometheus.GaugeOpts{
64 Name: "voltha_rx_error_packets_total",
65 Help: "Number of total received packets error",
66 },
67 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
68 )
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053069
70 // onos kpis
71 onosTxBytesTotal = prometheus.NewGaugeVec(
72 prometheus.GaugeOpts{
73 Name: "onos_tx_bytes_total",
74 Help: "Number of total bytes transmitted",
75 },
76 []string{"device_id", "port_id"},
77 )
78 onosRxBytesTotal = prometheus.NewGaugeVec(
79 prometheus.GaugeOpts{
80 Name: "onos_rx_bytes_total",
81 Help: "Number of total bytes received",
82 },
83 []string{"device_id", "port_id"},
84 )
85 onosTxPacketsTotal = prometheus.NewGaugeVec(
86 prometheus.GaugeOpts{
87 Name: "onos_tx_packets_total",
88 Help: "Number of total packets transmitted",
89 },
90 []string{"device_id", "port_id"},
91 )
92 onosRxPacketsTotal = prometheus.NewGaugeVec(
93 prometheus.GaugeOpts{
94 Name: "onos_rx_packets_total",
95 Help: "Number of total packets received",
96 },
97 []string{"device_id", "port_id"},
98 )
99
100 onosTxDropPacketsTotal = prometheus.NewGaugeVec(
101 prometheus.GaugeOpts{
102 Name: "onos_tx_drop_packets_total",
103 Help: "Number of total transmitted packets dropped",
104 },
105 []string{"device_id", "port_id"},
106 )
107
108 onosRxDropPacketsTotal = prometheus.NewGaugeVec(
109 prometheus.GaugeOpts{
110 Name: "onos_rx_drop_packets_total",
111 Help: "Number of total received packets dropped",
112 },
113 []string{"device_id", "port_id"},
114 )
kartikey dubey72ef3b82019-05-27 06:50:04 +0000115
116 // onos.aaa kpis
117 onosaaaRxAcceptResponses = prometheus.NewGauge(
118 prometheus.GaugeOpts{
119 Name: "onosaaa_rx_accept_responses",
120 Help: "Number of access accept packets received from the server",
121 })
122 onosaaaRxRejectResponses = prometheus.NewGauge(
123 prometheus.GaugeOpts{
124 Name: "onosaaa_rx_reject_responses",
125 Help: "Number of access reject packets received from the server",
126 })
127 onosaaaRxChallengeResponses = prometheus.NewGauge(
128 prometheus.GaugeOpts{
129 Name: "onosaaa_rx_challenge_response",
130 Help: "Number of access challenge packets received from the server",
131 })
132 onosaaaTxAccessRequests = prometheus.NewGauge(
133 prometheus.GaugeOpts{
134 Name: "onosaaa_tx_access_requests",
135 Help: "Number of access request packets sent to the server",
136 })
137 onosaaaRxInvalidValidators = prometheus.NewGauge(
138 prometheus.GaugeOpts{
139 Name: "onosaaa_rx_invalid_validators",
140 Help: "Number of access response packets received from the server with an invalid validator",
141 })
142 onosaaaRxUnknownType = prometheus.NewGauge(
143 prometheus.GaugeOpts{
144 Name: "onosaaa_rx_unknown_type",
145 Help: "Number of packets of an unknown RADIUS type received from the accounting server",
146 })
147 onosaaaPendingRequests = prometheus.NewGauge(
148 prometheus.GaugeOpts{
149 Name: "onosaaa_pending_responses",
150 Help: "Number of access request packets pending a response from the server",
151 })
152 onosaaaRxDroppedResponses = prometheus.NewGauge(
153 prometheus.GaugeOpts{
154 Name: "onosaaa_rx_dropped_responses",
155 Help: "Number of dropped packets received from the accounting server",
156 })
157 onosaaaRxMalformedResponses = prometheus.NewGauge(
158 prometheus.GaugeOpts{
159 Name: "onosaaa_rx_malformed_responses",
160 Help: "Number of malformed access response packets received from the server",
161 })
162 onosaaaRxUnknownserver = prometheus.NewGauge(
163 prometheus.GaugeOpts{
164 Name: "onosaaa_rx_from_unknown_server",
165 Help: "Number of packets received from an unknown server",
166 })
167 onosaaaRequestRttMillis = prometheus.NewGauge(
168 prometheus.GaugeOpts{
169 Name: "onosaaa_request_rttmillis",
170 Help: "Roundtrip packet time to the accounting server in Miliseconds",
171 })
172 onosaaaRequestReTx = prometheus.NewGauge(
173 prometheus.GaugeOpts{
174 Name: "onosaaa_request_re_tx",
175 Help: "Number of access request packets retransmitted to the server",
176 })
Matteo Scandoloaab36db2018-10-09 19:54:11 -0700177)
178
179func exportVolthaKPI(kpi VolthaKPI) {
180
181 for _, data := range kpi.SliceDatas {
182 switch title := data.Metadata.Title; title {
183 case "Ethernet", "PON":
184 volthaTxBytesTotal.WithLabelValues(
185 data.Metadata.LogicalDeviceID,
186 data.Metadata.SerialNumber,
187 data.Metadata.DeviceID,
188 data.Metadata.Context.InterfaceID,
189 data.Metadata.Context.PonID,
190 data.Metadata.Context.PortNumber,
191 data.Metadata.Title,
192 ).Set(data.Metrics.TxBytes)
193
194 volthaRxBytesTotal.WithLabelValues(
195 data.Metadata.LogicalDeviceID,
196 data.Metadata.SerialNumber,
197 data.Metadata.DeviceID,
198 data.Metadata.Context.InterfaceID,
199 data.Metadata.Context.PonID,
200 data.Metadata.Context.PortNumber,
201 data.Metadata.Title,
202 ).Set(data.Metrics.RxBytes)
203
204 volthaTxPacketsTotal.WithLabelValues(
205 data.Metadata.LogicalDeviceID,
206 data.Metadata.SerialNumber,
207 data.Metadata.DeviceID,
208 data.Metadata.Context.InterfaceID,
209 data.Metadata.Context.PonID,
210 data.Metadata.Context.PortNumber,
211 data.Metadata.Title,
212 ).Set(data.Metrics.TxPackets)
213
214 volthaRxPacketsTotal.WithLabelValues(
215 data.Metadata.LogicalDeviceID,
216 data.Metadata.SerialNumber,
217 data.Metadata.DeviceID,
218 data.Metadata.Context.InterfaceID,
219 data.Metadata.Context.PonID,
220 data.Metadata.Context.PortNumber,
221 data.Metadata.Title,
222 ).Set(data.Metrics.RxPackets)
223
224 volthaTxErrorPacketsTotal.WithLabelValues(
225 data.Metadata.LogicalDeviceID,
226 data.Metadata.SerialNumber,
227 data.Metadata.DeviceID,
228 data.Metadata.Context.InterfaceID,
229 data.Metadata.Context.PonID,
230 data.Metadata.Context.PortNumber,
231 data.Metadata.Title,
232 ).Set(data.Metrics.TxErrorPackets)
233
234 volthaRxErrorPacketsTotal.WithLabelValues(
235 data.Metadata.LogicalDeviceID,
236 data.Metadata.SerialNumber,
237 data.Metadata.DeviceID,
238 data.Metadata.Context.InterfaceID,
239 data.Metadata.Context.PonID,
240 data.Metadata.Context.PortNumber,
241 data.Metadata.Title,
242 ).Set(data.Metrics.RxErrorPackets)
243
244 // TODO add metrics for:
245 // TxBcastPackets
246 // TxUnicastPackets
247 // TxMulticastPackets
248 // RxBcastPackets
249 // RxMulticastPackets
250
251 case "Ethernet_Bridge_Port_History":
252 if data.Metadata.Context.Upstream == "True" {
253 // ONU. Extended Ethernet statistics.
254 volthaTxPacketsTotal.WithLabelValues(
255 data.Metadata.LogicalDeviceID,
256 data.Metadata.SerialNumber,
257 data.Metadata.DeviceID,
258 "NA", // InterfaceID
259 "NA", // PonID
260 "NA", // PortNumber
261 data.Metadata.Title,
262 ).Add(data.Metrics.Packets)
263
264 volthaTxBytesTotal.WithLabelValues(
265 data.Metadata.LogicalDeviceID,
266 data.Metadata.SerialNumber,
267 data.Metadata.DeviceID,
268 "NA", // InterfaceID
269 "NA", // PonID
270 "NA", // PortNumber
271 data.Metadata.Title,
272 ).Add(data.Metrics.Octets)
273 } else {
274 // ONU. Extended Ethernet statistics.
275 volthaRxPacketsTotal.WithLabelValues(
276 data.Metadata.LogicalDeviceID,
277 data.Metadata.SerialNumber,
278 data.Metadata.DeviceID,
279 "NA", // InterfaceID
280 "NA", // PonID
281 "NA", // PortNumber
282 data.Metadata.Title,
283 ).Add(data.Metrics.Packets)
284
285 volthaRxBytesTotal.WithLabelValues(
286 data.Metadata.LogicalDeviceID,
287 data.Metadata.SerialNumber,
288 data.Metadata.DeviceID,
289 "NA", // InterfaceID
290 "NA", // PonID
291 "NA", // PortNumber
292 data.Metadata.Title,
293 ).Add(data.Metrics.Octets)
294 }
295
296 case "Ethernet_UNI_History":
297 // ONU. Do nothing.
298
299 case "FEC_History":
300 // ONU. Do Nothing.
301
302 volthaTxBytesTotal.WithLabelValues(
303 data.Metadata.LogicalDeviceID,
304 data.Metadata.SerialNumber,
305 data.Metadata.DeviceID,
306 data.Metadata.Context.InterfaceID,
307 data.Metadata.Context.PonID,
308 data.Metadata.Context.PortNumber,
309 data.Metadata.Title,
310 ).Set(data.Metrics.TxBytes)
311
312 volthaRxBytesTotal.WithLabelValues(
313 data.Metadata.LogicalDeviceID,
314 data.Metadata.SerialNumber,
315 data.Metadata.DeviceID,
316 data.Metadata.Context.InterfaceID,
317 data.Metadata.Context.PonID,
318 data.Metadata.Context.PortNumber,
319 data.Metadata.Title,
320 ).Set(data.Metrics.RxBytes)
321
322 volthaTxPacketsTotal.WithLabelValues(
323 data.Metadata.LogicalDeviceID,
324 data.Metadata.SerialNumber,
325 data.Metadata.DeviceID,
326 data.Metadata.Context.InterfaceID,
327 data.Metadata.Context.PonID,
328 data.Metadata.Context.PortNumber,
329 data.Metadata.Title,
330 ).Set(data.Metrics.TxPackets)
331
332 volthaRxPacketsTotal.WithLabelValues(
333 data.Metadata.LogicalDeviceID,
334 data.Metadata.SerialNumber,
335 data.Metadata.DeviceID,
336 data.Metadata.Context.InterfaceID,
337 data.Metadata.Context.PonID,
338 data.Metadata.Context.PortNumber,
339 data.Metadata.Title,
340 ).Set(data.Metrics.RxPackets)
341
342 volthaTxErrorPacketsTotal.WithLabelValues(
343 data.Metadata.LogicalDeviceID,
344 data.Metadata.SerialNumber,
345 data.Metadata.DeviceID,
346 data.Metadata.Context.InterfaceID,
347 data.Metadata.Context.PonID,
348 data.Metadata.Context.PortNumber,
349 data.Metadata.Title,
350 ).Set(data.Metrics.TxErrorPackets)
351
352 volthaRxErrorPacketsTotal.WithLabelValues(
353 data.Metadata.LogicalDeviceID,
354 data.Metadata.SerialNumber,
355 data.Metadata.DeviceID,
356 data.Metadata.Context.InterfaceID,
357 data.Metadata.Context.PonID,
358 data.Metadata.Context.PortNumber,
359 data.Metadata.Title,
360 ).Set(data.Metrics.RxErrorPackets)
361
362 // TODO add metrics for:
363 // TxBcastPackets
364 // TxUnicastPackets
365 // TxMulticastPackets
366 // RxBcastPackets
367 // RxMulticastPackets
368
369 case "voltha.internal":
370 // Voltha Internal. Do nothing.
371 }
372 }
373}
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530374
375func exportOnosKPI(kpi OnosKPI) {
376
377 for _, data := range kpi.Ports {
378
379 onosTxBytesTotal.WithLabelValues(
380 kpi.DeviceID,
381 data.PortID,
382 ).Set(data.TxBytes)
383
384 onosRxBytesTotal.WithLabelValues(
385 kpi.DeviceID,
386 data.PortID,
387 ).Set(data.RxBytes)
388
389 onosTxPacketsTotal.WithLabelValues(
390 kpi.DeviceID,
391 data.PortID,
392 ).Set(data.TxPackets)
393
394 onosRxPacketsTotal.WithLabelValues(
395 kpi.DeviceID,
396 data.PortID,
397 ).Set(data.RxPackets)
398
399 onosTxDropPacketsTotal.WithLabelValues(
400 kpi.DeviceID,
401 data.PortID,
402 ).Set(data.TxPacketsDrop)
403
404 onosRxDropPacketsTotal.WithLabelValues(
405 kpi.DeviceID,
406 data.PortID,
407 ).Set(data.RxPacketsDrop)
408 }
409}
410
411func exportImporterKPI(kpi ImporterKPI) {
412 // TODO: add metrics for importer data
413 logger.Info("To be implemented")
414}
415
kartikey dubey72ef3b82019-05-27 06:50:04 +0000416func exportOnosAaaKPI(kpi OnosAaaKPI) {
417
418 onosaaaRxAcceptResponses.Set(kpi.RxAcceptResponses)
419
420 onosaaaRxRejectResponses.Set(kpi.RxRejectResponses)
421
422 onosaaaRxChallengeResponses.Set(kpi.RxChallengeResponses)
423
424 onosaaaTxAccessRequests.Set(kpi.TxAccessRequests)
425
426 onosaaaRxInvalidValidators.Set(kpi.RxInvalidValidators)
427
428 onosaaaRxUnknownType.Set(kpi.RxUnknownType)
429
430 onosaaaPendingRequests.Set(kpi.PendingRequests)
431
432 onosaaaRxDroppedResponses.Set(kpi.RxDroppedResponses)
433
434 onosaaaRxMalformedResponses.Set(kpi.RxMalformedResponses)
435
436 onosaaaRxUnknownserver.Set(kpi.RxUnknownserver)
437
438 onosaaaRequestRttMillis.Set(kpi.RequestRttMillis)
439
440 onosaaaRequestReTx.Set(kpi.RequestReTx)
441}
442
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530443func export(topic *string, data []byte) {
444 switch *topic {
445 case "voltha.kpis":
446 kpi := VolthaKPI{}
447 err := json.Unmarshal(data, &kpi)
448 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530449 logger.Error("Invalid msg on voltha.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530450 }
451 exportVolthaKPI(kpi)
452 case "onos.kpis":
453 kpi := OnosKPI{}
454 err := json.Unmarshal(data, &kpi)
455 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530456 logger.Error("Invalid msg on onos.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530457 }
458 exportOnosKPI(kpi)
459 case "importer.kpis":
460 kpi := ImporterKPI{}
461 err := json.Unmarshal(data, &kpi)
462 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530463 logger.Error("Invalid msg on importer.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530464 }
465 exportImporterKPI(kpi)
kartikey dubey72ef3b82019-05-27 06:50:04 +0000466 case "onos.aaa.stats.kpis":
467 kpi := OnosAaaKPI{}
468 err := json.Unmarshal(data, &kpi)
469 if err != nil {
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530470 logger.Error("Invalid msg on onos.aaa.stats.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
kartikey dubey72ef3b82019-05-27 06:50:04 +0000471 }
472 exportOnosAaaKPI(kpi)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530473 default:
Ganesh Bhure74fb7b02019-06-28 16:16:26 +0530474 logger.Warn("Unexpected export. Topic [%s] not supported. Should not come here", *topic)
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530475 }
476}