FloatGetter expects scalar value from query response as float
()
| 87 | |
| 88 | // FloatGetter expects scalar value from query response as float |
| 89 | func (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 | |
| 117 | var _ IntGetter = (*Prometheus)(nil) |
| 118 |