blob: 3313f469009ec8dc2a960d148676ef5f6729782b [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"
19 "log"
Matteo Scandoloaab36db2018-10-09 19:54:11 -070020 "github.com/prometheus/client_golang/prometheus"
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053021 "gerrit.opencord.org/kafka-topic-exporter/common/logger"
Matteo Scandoloaab36db2018-10-09 19:54:11 -070022)
23
24var (
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053025 // voltha kpis
Matteo Scandoloaab36db2018-10-09 19:54:11 -070026 volthaTxBytesTotal = prometheus.NewGaugeVec(
27 prometheus.GaugeOpts{
28 Name: "voltha_tx_bytes_total",
29 Help: "Number of total bytes transmitted",
30 },
31 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
32 )
33 volthaRxBytesTotal = prometheus.NewGaugeVec(
34 prometheus.GaugeOpts{
35 Name: "voltha_rx_bytes_total",
36 Help: "Number of total bytes received",
37 },
38 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
39 )
40 volthaTxPacketsTotal = prometheus.NewGaugeVec(
41 prometheus.GaugeOpts{
42 Name: "voltha_tx_packets_total",
43 Help: "Number of total packets transmitted",
44 },
45 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
46 )
47 volthaRxPacketsTotal = prometheus.NewGaugeVec(
48 prometheus.GaugeOpts{
49 Name: "voltha_rx_packets_total",
50 Help: "Number of total packets received",
51 },
52 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
53 )
54
55 volthaTxErrorPacketsTotal = prometheus.NewGaugeVec(
56 prometheus.GaugeOpts{
57 Name: "voltha_tx_error_packets_total",
58 Help: "Number of total transmitted packets error",
59 },
60 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
61 )
62
63 volthaRxErrorPacketsTotal = prometheus.NewGaugeVec(
64 prometheus.GaugeOpts{
65 Name: "voltha_rx_error_packets_total",
66 Help: "Number of total received packets error",
67 },
68 []string{"logical_device_id", "serial_number", "device_id", "interface_id", "pon_id", "port_number", "title"},
69 )
Ganesh Bhure8d0c9942019-05-24 11:42:09 +053070
71 // onos kpis
72 onosTxBytesTotal = prometheus.NewGaugeVec(
73 prometheus.GaugeOpts{
74 Name: "onos_tx_bytes_total",
75 Help: "Number of total bytes transmitted",
76 },
77 []string{"device_id", "port_id"},
78 )
79 onosRxBytesTotal = prometheus.NewGaugeVec(
80 prometheus.GaugeOpts{
81 Name: "onos_rx_bytes_total",
82 Help: "Number of total bytes received",
83 },
84 []string{"device_id", "port_id"},
85 )
86 onosTxPacketsTotal = prometheus.NewGaugeVec(
87 prometheus.GaugeOpts{
88 Name: "onos_tx_packets_total",
89 Help: "Number of total packets transmitted",
90 },
91 []string{"device_id", "port_id"},
92 )
93 onosRxPacketsTotal = prometheus.NewGaugeVec(
94 prometheus.GaugeOpts{
95 Name: "onos_rx_packets_total",
96 Help: "Number of total packets received",
97 },
98 []string{"device_id", "port_id"},
99 )
100
101 onosTxDropPacketsTotal = prometheus.NewGaugeVec(
102 prometheus.GaugeOpts{
103 Name: "onos_tx_drop_packets_total",
104 Help: "Number of total transmitted packets dropped",
105 },
106 []string{"device_id", "port_id"},
107 )
108
109 onosRxDropPacketsTotal = prometheus.NewGaugeVec(
110 prometheus.GaugeOpts{
111 Name: "onos_rx_drop_packets_total",
112 Help: "Number of total received packets dropped",
113 },
114 []string{"device_id", "port_id"},
115 )
Matteo Scandoloaab36db2018-10-09 19:54:11 -0700116)
117
118func exportVolthaKPI(kpi VolthaKPI) {
119
120 for _, data := range kpi.SliceDatas {
121 switch title := data.Metadata.Title; title {
122 case "Ethernet", "PON":
123 volthaTxBytesTotal.WithLabelValues(
124 data.Metadata.LogicalDeviceID,
125 data.Metadata.SerialNumber,
126 data.Metadata.DeviceID,
127 data.Metadata.Context.InterfaceID,
128 data.Metadata.Context.PonID,
129 data.Metadata.Context.PortNumber,
130 data.Metadata.Title,
131 ).Set(data.Metrics.TxBytes)
132
133 volthaRxBytesTotal.WithLabelValues(
134 data.Metadata.LogicalDeviceID,
135 data.Metadata.SerialNumber,
136 data.Metadata.DeviceID,
137 data.Metadata.Context.InterfaceID,
138 data.Metadata.Context.PonID,
139 data.Metadata.Context.PortNumber,
140 data.Metadata.Title,
141 ).Set(data.Metrics.RxBytes)
142
143 volthaTxPacketsTotal.WithLabelValues(
144 data.Metadata.LogicalDeviceID,
145 data.Metadata.SerialNumber,
146 data.Metadata.DeviceID,
147 data.Metadata.Context.InterfaceID,
148 data.Metadata.Context.PonID,
149 data.Metadata.Context.PortNumber,
150 data.Metadata.Title,
151 ).Set(data.Metrics.TxPackets)
152
153 volthaRxPacketsTotal.WithLabelValues(
154 data.Metadata.LogicalDeviceID,
155 data.Metadata.SerialNumber,
156 data.Metadata.DeviceID,
157 data.Metadata.Context.InterfaceID,
158 data.Metadata.Context.PonID,
159 data.Metadata.Context.PortNumber,
160 data.Metadata.Title,
161 ).Set(data.Metrics.RxPackets)
162
163 volthaTxErrorPacketsTotal.WithLabelValues(
164 data.Metadata.LogicalDeviceID,
165 data.Metadata.SerialNumber,
166 data.Metadata.DeviceID,
167 data.Metadata.Context.InterfaceID,
168 data.Metadata.Context.PonID,
169 data.Metadata.Context.PortNumber,
170 data.Metadata.Title,
171 ).Set(data.Metrics.TxErrorPackets)
172
173 volthaRxErrorPacketsTotal.WithLabelValues(
174 data.Metadata.LogicalDeviceID,
175 data.Metadata.SerialNumber,
176 data.Metadata.DeviceID,
177 data.Metadata.Context.InterfaceID,
178 data.Metadata.Context.PonID,
179 data.Metadata.Context.PortNumber,
180 data.Metadata.Title,
181 ).Set(data.Metrics.RxErrorPackets)
182
183 // TODO add metrics for:
184 // TxBcastPackets
185 // TxUnicastPackets
186 // TxMulticastPackets
187 // RxBcastPackets
188 // RxMulticastPackets
189
190 case "Ethernet_Bridge_Port_History":
191 if data.Metadata.Context.Upstream == "True" {
192 // ONU. Extended Ethernet statistics.
193 volthaTxPacketsTotal.WithLabelValues(
194 data.Metadata.LogicalDeviceID,
195 data.Metadata.SerialNumber,
196 data.Metadata.DeviceID,
197 "NA", // InterfaceID
198 "NA", // PonID
199 "NA", // PortNumber
200 data.Metadata.Title,
201 ).Add(data.Metrics.Packets)
202
203 volthaTxBytesTotal.WithLabelValues(
204 data.Metadata.LogicalDeviceID,
205 data.Metadata.SerialNumber,
206 data.Metadata.DeviceID,
207 "NA", // InterfaceID
208 "NA", // PonID
209 "NA", // PortNumber
210 data.Metadata.Title,
211 ).Add(data.Metrics.Octets)
212 } else {
213 // ONU. Extended Ethernet statistics.
214 volthaRxPacketsTotal.WithLabelValues(
215 data.Metadata.LogicalDeviceID,
216 data.Metadata.SerialNumber,
217 data.Metadata.DeviceID,
218 "NA", // InterfaceID
219 "NA", // PonID
220 "NA", // PortNumber
221 data.Metadata.Title,
222 ).Add(data.Metrics.Packets)
223
224 volthaRxBytesTotal.WithLabelValues(
225 data.Metadata.LogicalDeviceID,
226 data.Metadata.SerialNumber,
227 data.Metadata.DeviceID,
228 "NA", // InterfaceID
229 "NA", // PonID
230 "NA", // PortNumber
231 data.Metadata.Title,
232 ).Add(data.Metrics.Octets)
233 }
234
235 case "Ethernet_UNI_History":
236 // ONU. Do nothing.
237
238 case "FEC_History":
239 // ONU. Do Nothing.
240
241 volthaTxBytesTotal.WithLabelValues(
242 data.Metadata.LogicalDeviceID,
243 data.Metadata.SerialNumber,
244 data.Metadata.DeviceID,
245 data.Metadata.Context.InterfaceID,
246 data.Metadata.Context.PonID,
247 data.Metadata.Context.PortNumber,
248 data.Metadata.Title,
249 ).Set(data.Metrics.TxBytes)
250
251 volthaRxBytesTotal.WithLabelValues(
252 data.Metadata.LogicalDeviceID,
253 data.Metadata.SerialNumber,
254 data.Metadata.DeviceID,
255 data.Metadata.Context.InterfaceID,
256 data.Metadata.Context.PonID,
257 data.Metadata.Context.PortNumber,
258 data.Metadata.Title,
259 ).Set(data.Metrics.RxBytes)
260
261 volthaTxPacketsTotal.WithLabelValues(
262 data.Metadata.LogicalDeviceID,
263 data.Metadata.SerialNumber,
264 data.Metadata.DeviceID,
265 data.Metadata.Context.InterfaceID,
266 data.Metadata.Context.PonID,
267 data.Metadata.Context.PortNumber,
268 data.Metadata.Title,
269 ).Set(data.Metrics.TxPackets)
270
271 volthaRxPacketsTotal.WithLabelValues(
272 data.Metadata.LogicalDeviceID,
273 data.Metadata.SerialNumber,
274 data.Metadata.DeviceID,
275 data.Metadata.Context.InterfaceID,
276 data.Metadata.Context.PonID,
277 data.Metadata.Context.PortNumber,
278 data.Metadata.Title,
279 ).Set(data.Metrics.RxPackets)
280
281 volthaTxErrorPacketsTotal.WithLabelValues(
282 data.Metadata.LogicalDeviceID,
283 data.Metadata.SerialNumber,
284 data.Metadata.DeviceID,
285 data.Metadata.Context.InterfaceID,
286 data.Metadata.Context.PonID,
287 data.Metadata.Context.PortNumber,
288 data.Metadata.Title,
289 ).Set(data.Metrics.TxErrorPackets)
290
291 volthaRxErrorPacketsTotal.WithLabelValues(
292 data.Metadata.LogicalDeviceID,
293 data.Metadata.SerialNumber,
294 data.Metadata.DeviceID,
295 data.Metadata.Context.InterfaceID,
296 data.Metadata.Context.PonID,
297 data.Metadata.Context.PortNumber,
298 data.Metadata.Title,
299 ).Set(data.Metrics.RxErrorPackets)
300
301 // TODO add metrics for:
302 // TxBcastPackets
303 // TxUnicastPackets
304 // TxMulticastPackets
305 // RxBcastPackets
306 // RxMulticastPackets
307
308 case "voltha.internal":
309 // Voltha Internal. Do nothing.
310 }
311 }
312}
Ganesh Bhure8d0c9942019-05-24 11:42:09 +0530313
314func exportOnosKPI(kpi OnosKPI) {
315
316 for _, data := range kpi.Ports {
317
318 onosTxBytesTotal.WithLabelValues(
319 kpi.DeviceID,
320 data.PortID,
321 ).Set(data.TxBytes)
322
323 onosRxBytesTotal.WithLabelValues(
324 kpi.DeviceID,
325 data.PortID,
326 ).Set(data.RxBytes)
327
328 onosTxPacketsTotal.WithLabelValues(
329 kpi.DeviceID,
330 data.PortID,
331 ).Set(data.TxPackets)
332
333 onosRxPacketsTotal.WithLabelValues(
334 kpi.DeviceID,
335 data.PortID,
336 ).Set(data.RxPackets)
337
338 onosTxDropPacketsTotal.WithLabelValues(
339 kpi.DeviceID,
340 data.PortID,
341 ).Set(data.TxPacketsDrop)
342
343 onosRxDropPacketsTotal.WithLabelValues(
344 kpi.DeviceID,
345 data.PortID,
346 ).Set(data.RxPacketsDrop)
347 }
348}
349
350func exportImporterKPI(kpi ImporterKPI) {
351 // TODO: add metrics for importer data
352 logger.Info("To be implemented")
353}
354
355func export(topic *string, data []byte) {
356 switch *topic {
357 case "voltha.kpis":
358 kpi := VolthaKPI{}
359 err := json.Unmarshal(data, &kpi)
360 if err != nil {
361 log.Fatal(err)
362 }
363 exportVolthaKPI(kpi)
364 case "onos.kpis":
365 kpi := OnosKPI{}
366 err := json.Unmarshal(data, &kpi)
367 if err != nil {
368 log.Fatal(err)
369 }
370 exportOnosKPI(kpi)
371 case "importer.kpis":
372 kpi := ImporterKPI{}
373 err := json.Unmarshal(data, &kpi)
374 if err != nil {
375 log.Fatal(err)
376 }
377 exportImporterKPI(kpi)
378 default:
379 logger.Warn("Unexpected export. Should not come here")
380 }
381}