generated from rmcguire/go-server-with-otel
45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
// Package econetmetrics registers OTEL observable gauges for Rheem EcoNet
|
|
// device state. Values are read at scrape time from the econetclient snapshot,
|
|
// which a background poller keeps fresh over REST.
|
|
package econetmetrics
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/rs/zerolog"
|
|
"go.opentelemetry.io/otel/metric"
|
|
|
|
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/otel"
|
|
|
|
"gitea.libretechconsulting.com/rmcguire/econet-exporter/pkg/config"
|
|
"gitea.libretechconsulting.com/rmcguire/econet-exporter/pkg/econet/econetclient"
|
|
)
|
|
|
|
type Collector struct {
|
|
ctx context.Context
|
|
cfg *config.ServiceConfig
|
|
log *zerolog.Logger
|
|
client *econetclient.Client
|
|
meter metric.Meter
|
|
}
|
|
|
|
func NewCollector(ctx context.Context, cfg *config.ServiceConfig, client *econetclient.Client) *Collector {
|
|
return &Collector{
|
|
ctx: ctx,
|
|
cfg: cfg,
|
|
log: zerolog.Ctx(ctx),
|
|
client: client,
|
|
meter: otel.GetMeter(ctx, "econet"),
|
|
}
|
|
}
|
|
|
|
// RegisterGauges registers the observable gauge callbacks. It is safe to call
|
|
// before the first refresh: the callbacks observe nothing while no devices are
|
|
// loaded, so /metrics comes up immediately.
|
|
func (c *Collector) RegisterGauges() error {
|
|
if err := c.registerLive(); err != nil {
|
|
return err
|
|
}
|
|
return c.registerUsage()
|
|
}
|