@cryptotaxi247 / netdata / commits / 29369833c

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 {