@@ -42,7 +42,11 @@ func (c *healthCollector) collect(ctx *collectorContext) error {
42
42
}
43
43
44
44
for _ , re := range stats {
45
- c .collectForStat (re , ctx )
45
+ if metric , ok := re .Map ["name" ]; ok {
46
+ c .collectMetricForProperty (metric , re , ctx )
47
+ } else {
48
+ c .collectForStat (re , ctx )
49
+ }
46
50
}
47
51
48
52
return nil
@@ -62,24 +66,36 @@ func (c *healthCollector) fetch(ctx *collectorContext) ([]*proto.Sentence, error
62
66
}
63
67
64
68
func (c * healthCollector ) collectForStat (re * proto.Sentence , ctx * collectorContext ) {
69
+ for _ , p := range c .props [:3 ] {
70
+ c .collectMetricForProperty (p , re , ctx )
71
+ }
72
+ }
73
+
74
+ func (c * healthCollector ) collectMetricForProperty (property string , re * proto.Sentence , ctx * collectorContext ) {
65
75
var v float64
66
76
var err error
67
77
68
- if re .Map ["value" ] == "" {
69
- return
78
+ name := property
79
+ value := re .Map [property ]
80
+
81
+ if value == "" {
82
+ var ok bool
83
+ if value , ok = re .Map ["value" ]; ! ok {
84
+ return
85
+ }
70
86
}
71
- v , err = strconv .ParseFloat (re . Map [ " value" ] , 64 )
87
+ v , err = strconv .ParseFloat (value , 64 )
72
88
73
89
if err != nil {
74
90
log .WithFields (log.Fields {
75
91
"device" : ctx .device .Name ,
76
- "property" : re . Map [ " name" ] ,
77
- "value" : re . Map [ " value" ] ,
92
+ "property" : name ,
93
+ "value" : value ,
78
94
"error" : err ,
79
95
}).Error ("error parsing system health metric value" )
80
96
return
81
97
}
82
98
83
- desc := c .descriptions [re . Map [ " name" ] ]
99
+ desc := c .descriptions [name ]
84
100
ctx .ch <- prometheus .MustNewConstMetric (desc , prometheus .GaugeValue , v , ctx .device .Name , ctx .device .Address )
85
101
}
0 commit comments