Fix negative value parsing in impi_sensor input (#7541)
This commit is contained in:
parent
bf1eb291f2
commit
443ac6df23
|
@ -21,7 +21,7 @@ var (
|
||||||
execCommand = exec.Command // execCommand is used to mock commands in tests.
|
execCommand = exec.Command // execCommand is used to mock commands in tests.
|
||||||
re_v1_parse_line = regexp.MustCompile(`^(?P<name>[^|]*)\|(?P<description>[^|]*)\|(?P<status_code>.*)`)
|
re_v1_parse_line = regexp.MustCompile(`^(?P<name>[^|]*)\|(?P<description>[^|]*)\|(?P<status_code>.*)`)
|
||||||
re_v2_parse_line = regexp.MustCompile(`^(?P<name>[^|]*)\|[^|]+\|(?P<status_code>[^|]*)\|(?P<entity_id>[^|]*)\|(?:(?P<description>[^|]+))?`)
|
re_v2_parse_line = regexp.MustCompile(`^(?P<name>[^|]*)\|[^|]+\|(?P<status_code>[^|]*)\|(?P<entity_id>[^|]*)\|(?:(?P<description>[^|]+))?`)
|
||||||
re_v2_parse_description = regexp.MustCompile(`^(?P<analogValue>[0-9.]+)\s(?P<analogUnit>.*)|(?P<status>.+)|^$`)
|
re_v2_parse_description = regexp.MustCompile(`^(?P<analogValue>-?[0-9.]+)\s(?P<analogUnit>.*)|(?P<status>.+)|^$`)
|
||||||
re_v2_parse_unit = regexp.MustCompile(`^(?P<realAnalogUnit>[^,]+)(?:,\s*(?P<statusDesc>.*))?`)
|
re_v2_parse_unit = regexp.MustCompile(`^(?P<realAnalogUnit>[^,]+)(?:,\s*(?P<statusDesc>.*))?`)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/influxdata/telegraf"
|
||||||
"github.com/influxdata/telegraf/internal"
|
"github.com/influxdata/telegraf/internal"
|
||||||
"github.com/influxdata/telegraf/testutil"
|
"github.com/influxdata/telegraf/testutil"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
@ -664,11 +665,10 @@ func Test_parseV2(t *testing.T) {
|
||||||
measuredAt time.Time
|
measuredAt time.Time
|
||||||
}
|
}
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
args args
|
args args
|
||||||
wantFields map[string]interface{}
|
expected []telegraf.Metric
|
||||||
wantTags map[string]string
|
wantErr bool
|
||||||
wantErr bool
|
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Test correct V2 parsing with analog value with unit",
|
name: "Test correct V2 parsing with analog value with unit",
|
||||||
|
@ -677,14 +677,19 @@ func Test_parseV2(t *testing.T) {
|
||||||
cmdOut: []byte("Power Supply 1 | 03h | ok | 10.1 | 110 Watts, Presence detected"),
|
cmdOut: []byte("Power Supply 1 | 03h | ok | 10.1 | 110 Watts, Presence detected"),
|
||||||
measuredAt: time.Now(),
|
measuredAt: time.Now(),
|
||||||
},
|
},
|
||||||
wantFields: map[string]interface{}{"value": float64(110)},
|
expected: []telegraf.Metric{
|
||||||
wantTags: map[string]string{
|
testutil.MustMetric("ipmi_sensor",
|
||||||
"name": "power_supply_1",
|
map[string]string{
|
||||||
"status_code": "ok",
|
"name": "power_supply_1",
|
||||||
"server": "host",
|
"status_code": "ok",
|
||||||
"entity_id": "10.1",
|
"server": "host",
|
||||||
"unit": "watts",
|
"entity_id": "10.1",
|
||||||
"status_desc": "presence_detected",
|
"unit": "watts",
|
||||||
|
"status_desc": "presence_detected",
|
||||||
|
},
|
||||||
|
map[string]interface{}{"value": 110.0},
|
||||||
|
time.Unix(0, 0),
|
||||||
|
),
|
||||||
},
|
},
|
||||||
wantErr: false,
|
wantErr: false,
|
||||||
},
|
},
|
||||||
|
@ -695,26 +700,51 @@ func Test_parseV2(t *testing.T) {
|
||||||
cmdOut: []byte("Intrusion | 73h | ok | 7.1 |"),
|
cmdOut: []byte("Intrusion | 73h | ok | 7.1 |"),
|
||||||
measuredAt: time.Now(),
|
measuredAt: time.Now(),
|
||||||
},
|
},
|
||||||
wantFields: map[string]interface{}{"value": float64(0)},
|
expected: []telegraf.Metric{
|
||||||
wantTags: map[string]string{
|
testutil.MustMetric("ipmi_sensor",
|
||||||
"name": "intrusion",
|
map[string]string{
|
||||||
"status_code": "ok",
|
"name": "intrusion",
|
||||||
"server": "host",
|
"status_code": "ok",
|
||||||
"entity_id": "7.1",
|
"server": "host",
|
||||||
"status_desc": "ok",
|
"entity_id": "7.1",
|
||||||
|
"status_desc": "ok",
|
||||||
|
},
|
||||||
|
map[string]interface{}{"value": 0.0},
|
||||||
|
time.Unix(0, 0),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
wantErr: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "parse negative value",
|
||||||
|
args: args{
|
||||||
|
hostname: "host",
|
||||||
|
cmdOut: []byte("DIMM Thrm Mrgn 1 | B0h | ok | 8.1 | -55 degrees C"),
|
||||||
|
measuredAt: time.Now(),
|
||||||
|
},
|
||||||
|
expected: []telegraf.Metric{
|
||||||
|
testutil.MustMetric("ipmi_sensor",
|
||||||
|
map[string]string{
|
||||||
|
"name": "dimm_thrm_mrgn_1",
|
||||||
|
"status_code": "ok",
|
||||||
|
"server": "host",
|
||||||
|
"entity_id": "8.1",
|
||||||
|
"unit": "degrees_c",
|
||||||
|
},
|
||||||
|
map[string]interface{}{"value": -55.0},
|
||||||
|
time.Unix(0, 0),
|
||||||
|
),
|
||||||
},
|
},
|
||||||
wantErr: false,
|
wantErr: false,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
var acc testutil.Accumulator
|
|
||||||
|
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
var acc testutil.Accumulator
|
||||||
if err := parseV2(&acc, tt.args.hostname, tt.args.cmdOut, tt.args.measuredAt); (err != nil) != tt.wantErr {
|
if err := parseV2(&acc, tt.args.hostname, tt.args.cmdOut, tt.args.measuredAt); (err != nil) != tt.wantErr {
|
||||||
t.Errorf("parseV2() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("parseV2() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
}
|
}
|
||||||
|
testutil.RequireMetricsEqual(t, tt.expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime())
|
||||||
})
|
})
|
||||||
|
|
||||||
acc.AssertContainsTaggedFields(t, "ipmi_sensor", tt.wantFields, tt.wantTags)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue