@cryptotaxi247 / netdata-1 / commits / 7024bc800

go.d snmp handle multiline sysDescr (#18530)

Ilya Mashchenko committed Sep 11, 2024 at 23:36 UTC 7024bc80003c3ec6feb96dfbecba859911dd3167
3 files changed +17 -8
src/go/plugin/go.d/agent/module/job.go
+5 -3
@@ -493,15 +493,15 @@ func (j *Job) createChart(chart *Chart) {
493 if ls == 0 {
494 ls = LabelSourceAuto
495 }
496 - _ = j.api.CLABEL(l.Key, l.Value, ls)
496 + _ = j.api.CLABEL(l.Key, lblReplacer.Replace(l.Value), ls)
497 }
498 }
499 for k, v := range j.labels {
500 if !seen[k] {
501 - _ = j.api.CLABEL(k, v, LabelSourceConf)
501 + _ = j.api.CLABEL(k, lblReplacer.Replace(v), LabelSourceConf)
502 }
503 }
504 - _ = j.api.CLABEL("_collect_job", j.Name(), LabelSourceAuto)
504 + _ = j.api.CLABEL("_collect_job", lblReplacer.Replace(j.Name()), LabelSourceAuto)
505 _ = j.api.CLABELCOMMIT()
506
507 for _, dim := range chart.Dims {
@@ -647,3 +647,5 @@ func handleZero(v int) int {
647 }
648 return v
649 }
650 +
651 +var lblReplacer = strings.NewReplacer("'", "")
src/go/plugin/go.d/modules/snmp/collect.go
+7 -4
@@ -4,6 +4,7 @@ package snmp
4
5 import (
6 "fmt"
7 + "slices"
8 "strings"
9
10 "github.com/netdata/netdata/go/plugins/plugin/go.d/agent/vnodes"
@@ -59,15 +60,17 @@ func (s *SNMP) setupVnode(si *sysInfo) *vnodes.VirtualNode {
60 if s.Vnode.GUID == "" {
61 s.Vnode.GUID = uuid.NewSHA1(uuid.NameSpaceDNS, []byte(s.Hostname)).String()
62 }
62 - if s.Vnode.Hostname == "" {
63 - s.Vnode.Hostname = fmt.Sprintf("%s(%s)", si.name, s.Hostname)
64 - }
63 +
64 + hostnames := []string{s.Vnode.Hostname, si.name, "snmp-device"}
65 + i := slices.IndexFunc(hostnames, func(s string) bool { return s != "" })
66 +
67 + s.Vnode.Hostname = fmt.Sprintf("%s(%s)", hostnames[i], s.Hostname)
68
69 labels := make(map[string]string)
70 +
71 for k, v := range s.Vnode.Labels {
72 labels[k] = v
73 }
70 -
74 if si.descr != "" {
75 labels["sysDescr"] = si.descr
76 }
src/go/plugin/go.d/modules/snmp/collect_sys_info.go
+5 -1
@@ -39,12 +39,16 @@ func (s *SNMP) getSysInfo() (*sysInfo, error) {
39 organization: "Unknown",
40 }
41
42 + r := strings.NewReplacer("\n", "\\n", "\r", "\\r")
43 +
44 for _, pdu := range pdus {
45 oid := strings.TrimPrefix(pdu.Name, ".")
46
47 switch oid {
48 case oidSysDescr:
47 - si.descr, err = pduToString(pdu)
49 + if si.descr, err = pduToString(pdu); err == nil {
50 + si.descr = r.Replace(si.descr)
51 + }
52 case oidSysObject:
53 var sysObj string
54 if sysObj, err = pduToString(pdu); err == nil {