From 45387a7ea625181dc6ad5bd1235830104f2c4de6 Mon Sep 17 00:00:00 2001 From: Jeremy Edwards <1312331+jeremyje@users.noreply.github.com> Date: Mon, 24 Oct 2022 23:13:48 -0700 Subject: [PATCH] Add async gauge metrics --- internal/prometheus.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/internal/prometheus.go b/internal/prometheus.go index 53db3a6..91b761b 100644 --- a/internal/prometheus.go +++ b/internal/prometheus.go @@ -50,9 +50,19 @@ type metricsSink struct { CPUThermalJunctionMax asyncfloat64.Gauge CPUInfoPollCount syncfloat64.Counter CPUDetail asyncfloat64.Gauge + lastValue *coretempsdk.CoreTempInfo +} + +func (m *metricsSink) ObserveAsync(ctx context.Context) { + m.Observe(ctx, m.lastValue) } func (m *metricsSink) Observe(ctx context.Context, info *coretempsdk.CoreTempInfo) { + if info == nil { + return + } + + m.lastValue = info attrs := getDefaultAttributes() curAttrs := append(attrs, attribute.String("model", info.CPUName)) @@ -119,11 +129,17 @@ func newMetrics(meter metric.Meter) (*metricsSink, error) { return nil, err } - return &metricsSink{ + sink := &metricsSink{ CPUCoreTemperature: cpuCoreTemperature, CPUCoreLoad: cpuCoreLoad, CPUThermalJunctionMax: cpuThermalJunctionMax, CPUInfoPollCount: cpuInfoPollCount, CPUDetail: cpuDetail, - }, nil + } + + meter.RegisterCallback([]instrument.Asynchronous{cpuCoreTemperature, cpuCoreLoad, cpuThermalJunctionMax, cpuDetail}, func(ctx context.Context) { + sink.ObserveAsync(ctx) + }) + + return sink, nil }