ddsnmp add pow transform func and allow mapping duplicate values (#20587)
Ilya Mashchenko committed
Jun 27, 2025 at 13:22 UTC
29369833cf64a42a3eab982d2184afe9150981a2
2 files changed
+16
-4
src/go/plugin/go.d/collector/snmp/charts.go
+12
-4
@@ -348,9 +348,13 @@ func (c *Collector) addProfileScalarMetricChart(m ddsnmp.Metric) {
348
}
349
350
if len(m.Mappings) > 0 {
351
+ seen := make(map[string]bool)
352
for _, v := range m.Mappings {
352
- id := fmt.Sprintf("snmp_device_prof_%s_%s", m.Name, v)
353
- chart.Dims = append(chart.Dims, &module.Dim{ID: id, Name: v, Algo: module.Absolute})
353
+ if !seen[v] {
354
+ seen[v] = true
355
+ id := fmt.Sprintf("snmp_device_prof_%s_%s", m.Name, v)
356
+ chart.Dims = append(chart.Dims, &module.Dim{ID: id, Name: v, Algo: module.Absolute})
357
+ }
358
}
359
} else {
360
id := fmt.Sprintf("snmp_device_prof_%s", m.Name)
@@ -408,9 +412,13 @@ func (c *Collector) addProfileTableMetricChart(m ddsnmp.Metric) {
412
}
413
414
if len(m.Mappings) > 0 {
415
+ seen := make(map[string]bool)
416
for _, v := range m.Mappings {
412
- id := fmt.Sprintf("snmp_device_prof_%s_%s", key, v)
413
- chart.Dims = append(chart.Dims, &module.Dim{ID: id, Name: v, Algo: module.Absolute})
417
+ if !seen[v] {
418
+ seen[v] = true
419
+ id := fmt.Sprintf("snmp_device_prof_%s_%s", key, v)
420
+ chart.Dims = append(chart.Dims, &module.Dim{ID: id, Name: v, Algo: module.Absolute})
421
+ }
422
}
423
} else {
424
id := fmt.Sprintf("snmp_device_prof_%s", key)
src/go/plugin/go.d/collector/snmp/ddsnmp/transform.go
+4
@@ -5,6 +5,7 @@ package ddsnmp
5
import (
6
"errors"
7
"fmt"
8
+ "math"
9
"net"
10
"strconv"
11
"text/template"
@@ -136,6 +137,9 @@ func newMetricTransformFuncMap() template.FuncMap {
137
}
138
return strconv.Itoa(prefixLen)
139
},
140
+ "pow": func(base float64, exp int) float64 {
141
+ return math.Pow(base, float64(exp))
142
+ },
143
}
144
145
for name, fn := range extra {