generated from rmcguire/go-server-with-otel
42 lines
1.0 KiB
Go
42 lines
1.0 KiB
Go
package econetmetrics
|
|
|
|
import "go.opentelemetry.io/otel/metric"
|
|
|
|
// gaugeBuilder creates observable gauges, accumulating them for a single
|
|
// RegisterCallback and short-circuiting on the first creation error.
|
|
//
|
|
// Units are intentionally baked into the metric names (Prometheus idiom)
|
|
// rather than set via metric.WithUnit — the OTEL→Prometheus exporter would
|
|
// otherwise append a second unit suffix (e.g. econet_setpoint_fahrenheit_F).
|
|
type gaugeBuilder struct {
|
|
m metric.Meter
|
|
obs []metric.Observable
|
|
err error
|
|
}
|
|
|
|
func (b *gaugeBuilder) i64(name, desc string) metric.Int64ObservableGauge {
|
|
if b.err != nil {
|
|
return nil
|
|
}
|
|
g, err := b.m.Int64ObservableGauge(name, metric.WithDescription(desc))
|
|
if err != nil {
|
|
b.err = err
|
|
return nil
|
|
}
|
|
b.obs = append(b.obs, g)
|
|
return g
|
|
}
|
|
|
|
func (b *gaugeBuilder) f64(name, desc string) metric.Float64ObservableGauge {
|
|
if b.err != nil {
|
|
return nil
|
|
}
|
|
g, err := b.m.Float64ObservableGauge(name, metric.WithDescription(desc))
|
|
if err != nil {
|
|
b.err = err
|
|
return nil
|
|
}
|
|
b.obs = append(b.obs, g)
|
|
return g
|
|
}
|