// 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() }