Skip to content

Commit 1b73e0b

Browse files
Giacomo Licarigiacomognosis
authored andcommitted
Add additional step to scrape hex data
Signed-off-by: Giacomo Licari <[email protected]>
1 parent 2a036ee commit 1b73e0b

File tree

2 files changed

+31
-13
lines changed

2 files changed

+31
-13
lines changed

exporter/collector.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,19 +57,30 @@ func (mc JSONMetricCollector) Collect(ch chan<- prometheus.Metric) {
5757
continue
5858
}
5959

60-
if floatValue, err := SanitizeValue(value); err == nil {
61-
metric := prometheus.MustNewConstMetric(
60+
floatValue, err := SanitizeValue(value)
61+
if err == nil {
62+
ch <- prometheus.MustNewConstMetric(
6263
m.Desc,
6364
m.ValueType,
6465
floatValue,
6566
extractLabels(mc.Logger, mc.Data, m.LabelsJSONPaths)...,
6667
)
67-
ch <- timestampMetric(mc.Logger, m, mc.Data, metric)
68-
} else {
69-
level.Error(mc.Logger).Log("msg", "Failed to convert extracted value to float64", "path", m.KeyJSONPath, "value", value, "err", err, "metric", m.Desc)
70-
continue
7168
}
7269

70+
intValue, err := SanitizeHexIntValue(value)
71+
if err == nil {
72+
ch <- prometheus.MustNewConstMetric(
73+
m.Desc,
74+
prometheus.UntypedValue,
75+
float64(intValue),
76+
extractLabels(mc.Logger, mc.Data, m.LabelsJSONPaths)...,
77+
)
78+
}
79+
80+
81+
level.Error(mc.Logger).Log("msg", "Failed to convert extracted value to float64", "path", m.KeyJSONPath, "value", value, "err", err, "metric", m.Desc)
82+
continue
83+
7384
case config.ObjectScrape:
7485
values, err := extractValue(mc.Logger, mc.Data, m.KeyJSONPath, true)
7586
if err != nil {

exporter/util.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,20 +40,13 @@ func MakeMetricName(parts ...string) string {
4040
func SanitizeValue(s string) (float64, error) {
4141
var err error
4242
var value float64
43-
var hexValue int64
4443
var resultErr string
4544

4645
if value, err = strconv.ParseFloat(s, 64); err == nil {
4746
return value, nil
4847
}
4948
resultErr = fmt.Sprintf("%s", err)
5049

51-
// Check if value is an hex integer, e.g. 0x1d54c54 => 30755924
52-
if hexValue, err = strconv.ParseInt(s, 16, 64); err == nil {
53-
return float64(hexValue), nil
54-
}
55-
resultErr = resultErr + "; " + fmt.Sprintf("%s", err)
56-
5750
if boolValue, err := strconv.ParseBool(s); err == nil {
5851
if boolValue {
5952
return 1.0, nil
@@ -81,6 +74,20 @@ func SanitizeIntValue(s string) (int64, error) {
8174
return value, fmt.Errorf(resultErr)
8275
}
8376

77+
func SanitizeHexIntValue(s string) (int64, error) {
78+
var err error
79+
var value int64
80+
var resultErr string
81+
82+
// Check if value is an hex integer, e.g. 0x1d54c54 => 30755924
83+
if value, err = strconv.ParseInt(s, 16, 64); err == nil {
84+
return value, nil
85+
}
86+
resultErr = fmt.Sprintf("%s", err)
87+
88+
return value, fmt.Errorf(resultErr)
89+
}
90+
8491
func CreateMetricsList(c config.Module) ([]JSONMetric, error) {
8592
var (
8693
metrics []JSONMetric

0 commit comments

Comments
 (0)