MCPcopy Create free account
hub / github.com/evcc-io/evcc / FloatGetter

Method FloatGetter

plugin/prometheus.go:89–115  ·  view source on GitHub ↗

FloatGetter expects scalar value from query response as float

()

Source from the content-addressed store, hash-verified

87
88// FloatGetter expects scalar value from query response as float
89func (p *Prometheus) FloatGetter() (func() (float64, error), error) {
90 return func() (float64, error) {
91 res, err := p.Query()
92 if err != nil {
93 return 0, err
94 }
95
96 if res.Type() == model.ValScalar {
97 scalarVal := res.(*model.Scalar)
98 return float64(scalarVal.Value), nil
99 }
100
101 if res.Type() == model.ValVector {
102 vectorVal := res.(model.Vector)
103 if vectorVal.Len() != 1 {
104 return 0, fmt.Errorf("query must return exactly 1 metric, got %d instead", vectorVal.Len())
105 }
106 metric := vectorVal[0]
107 if metric.Histogram != nil {
108 return 0, fmt.Errorf("query returned histogram, expected value")
109 }
110 return float64(metric.Value), nil
111 }
112
113 return 0, fmt.Errorf("query returned value of type %q, expected %q or %q", res.Type().String(), model.ValScalar.String(), model.ValVector.String())
114 }, nil
115}
116
117var _ IntGetter = (*Prometheus)(nil)
118

Callers 1

IntGetterMethod · 0.95

Calls 5

QueryMethod · 0.95
LenMethod · 0.80
TypeMethod · 0.65
StringMethod · 0.65
ErrorfMethod · 0.45

Tested by

no test coverage detected