]> go.fuhry.dev Git - runtime.git/commitdiff
refactor MetricBusService to an interface
authorDan Fuhry <dan@fuhry.com>
Thu, 15 May 2025 14:39:24 +0000 (10:39 -0400)
committerDan Fuhry <dan@fuhry.com>
Thu, 15 May 2025 14:39:24 +0000 (10:39 -0400)
D-Bus metricbus server is being deprecated and being replaced with an https server that registers itself in sd and publishes its own stats.

This is the first step in the refactor, converting `MetricBusService` to an interface and updating all references accordingly. Full implementation will come later.

machines/client.go
machines/coredns_plugin/registry.go
machines/coredns_plugin/stats.go
machines/stats.go
metrics/metricbus/mbclient/dbus_client.go [moved from metrics/metricbus/mbclient/client.go with 85% similarity]
metrics/metricbus/mbclient/dbus_metrics.go [moved from metrics/metricbus/mbclient/metrics.go with 98% similarity]
metrics/metricbus/mbclient/intf.go
metrics/mtls/stats.go

index dc9a1f06335a7ea3c405455b466e7f50f2573463..cbd35e8ab15c82def28cd028959aa0269e315a07 100644 (file)
@@ -48,7 +48,7 @@ var (
 type MachinesClient interface {
        APICall(route string, data interface{}, response any) error
        NewEventListener(ctx context.Context) (chan MachinesMqttEvent, error)
-       SetupStats(metrics *mbclient.MetricBusService)
+       SetupStats(metrics mbclient.MetricBusService)
 }
 
 type machinesClient struct {
@@ -219,7 +219,7 @@ func (mc *machinesClient) APICall(route string, data interface{}, response any)
        return nil
 }
 
-func (mc *machinesClient) SetupStats(metrics *mbclient.MetricBusService) {
+func (mc *machinesClient) SetupStats(metrics mbclient.MetricBusService) {
        mc.stats = makeStats(metrics)
 }
 
index 0b6b6084193ec9c575d25d78ce2924f469443700..0769e3b1847f779bd7d7f2585b6061cd78c8a4ae 100644 (file)
@@ -43,7 +43,7 @@ type registry struct {
        client       machines.MachinesClient
        didLiveFetch bool
 
-       mb    *mbclient.MetricBusService
+       mb    mbclient.MetricBusService
        stats *dnsStats
 
        defDomain string
index 8751ef8a5bef5b4ad38cef6d772e61431b895f81..1293c304d60cceae4ed37be4865aab877ecdcef9 100644 (file)
@@ -15,7 +15,7 @@ type dnsStats struct {
        eventsReceived mbclient.CounterMetric
 }
 
-func makeStats(client *mbclient.MetricBusService) *dnsStats {
+func makeStats(client mbclient.MetricBusService) *dnsStats {
        recordLookups := client.DefineCounter(
                constants.OrgSlug+"_machines_dns_record_lookups",
                "DNS lookups that resolved to custom DNS records",
index ea2da48b89a5ab7cb43a711ae56248c7f0ddc924..2c96ec085139a940acc15bf9a51322e4a3f277b8 100644 (file)
@@ -11,7 +11,7 @@ type clientStats struct {
        mqttMessages  mbclient.CounterMetric
 }
 
-func makeStats(client *mbclient.MetricBusService) *clientStats {
+func makeStats(client mbclient.MetricBusService) *clientStats {
        apiRequests := client.DefineCounter(
                constants.OrgSlug+"_machines_client_api_requests",
                "Requests made by the Machines client to the API",
similarity index 85%
rename from metrics/metricbus/mbclient/client.go
rename to metrics/metricbus/mbclient/dbus_client.go
index a74435fcff82caf30f59485c032b63d16a0015af..76c019cb2c51eb46f32bb626be3f4e9ee5224bb5 100644 (file)
@@ -17,7 +17,7 @@ import (
 
 type KV = metricbus.KV
 
-type MetricBusService struct {
+type metricBusServiceImpl struct {
        name     string
        instance string
 
@@ -39,7 +39,7 @@ type MetricBusService struct {
 var defaultMetricBusServiceName string
 var defaultMetricBusServiceDiscriminator string
 
-var store map[string]*MetricBusService
+var store map[string]*metricBusServiceImpl
 var storeLock sync.Mutex
 
 func init() {
@@ -48,16 +48,16 @@ func init() {
        flag.StringVar(&defaultMetricBusServiceDiscriminator, "metricbus.client.service-discriminator", "", "discriminator to use by default for publishing metrics")
 }
 
-func NewService(ctx context.Context) *MetricBusService {
+func NewService(ctx context.Context) MetricBusService {
        return NewServiceWithDiscriminator(ctx, defaultMetricBusServiceDiscriminator)
 }
 
-func NewServiceWithDiscriminator(ctx context.Context, instanceDiscriminator string) *MetricBusService {
+func NewServiceWithDiscriminator(ctx context.Context, instanceDiscriminator string) MetricBusService {
        storeLock.Lock()
        defer storeLock.Unlock()
 
        if store == nil {
-               store = make(map[string]*MetricBusService)
+               store = make(map[string]*metricBusServiceImpl)
        }
 
        if instance, ok := store[instanceDiscriminator]; ok {
@@ -70,9 +70,9 @@ func NewServiceWithDiscriminator(ctx context.Context, instanceDiscriminator stri
        return instance
 }
 
-func newServiceWithDiscriminator(ctx context.Context, instanceDiscriminator string) *MetricBusService {
+func newServiceWithDiscriminator(ctx context.Context, instanceDiscriminator string) *metricBusServiceImpl {
        childCtx, cancel := context.WithCancel(context.Background())
-       svc := &MetricBusService{
+       svc := &metricBusServiceImpl{
                name:     defaultMetricBusServiceName,
                instance: instanceDiscriminator,
 
@@ -92,7 +92,7 @@ func newServiceWithDiscriminator(ctx context.Context, instanceDiscriminator stri
 
        return svc
 }
-func (s *MetricBusService) FlushAndWait() {
+func (s *metricBusServiceImpl) FlushAndWait() {
        if s.childCtx.Err() == context.Canceled || s.serviceCookie == "" {
                return
        }
@@ -105,7 +105,7 @@ func (s *MetricBusService) FlushAndWait() {
        defer s.mu.Unlock()
 }
 
-func (s *MetricBusService) DefineCounter(metricName, descr string, labelNames ...string) CounterMetric {
+func (s *metricBusServiceImpl) DefineCounter(metricName, descr string, labelNames ...string) CounterMetric {
        s.mu.Lock()
        defer s.mu.Unlock()
 
@@ -131,7 +131,7 @@ func (s *MetricBusService) DefineCounter(metricName, descr string, labelNames ..
        }
 }
 
-func (s *MetricBusService) DefineGauge(metricName, descr string, labelNames ...string) GaugeMetric {
+func (s *metricBusServiceImpl) DefineGauge(metricName, descr string, labelNames ...string) GaugeMetric {
        s.mu.Lock()
        defer s.mu.Unlock()
 
@@ -157,7 +157,7 @@ func (s *MetricBusService) DefineGauge(metricName, descr string, labelNames ...s
        }
 }
 
-func (s *MetricBusService) setLocalStateDeregistered() {
+func (s *metricBusServiceImpl) setLocalStateDeregistered() {
        s.mu.Lock()
        defer s.mu.Unlock()
 
@@ -169,7 +169,7 @@ func (s *MetricBusService) setLocalStateDeregistered() {
        }
 }
 
-func (s *MetricBusService) tryRegister() {
+func (s *metricBusServiceImpl) tryRegister() {
        s.mu.Lock()
        defer s.mu.Unlock()
 
@@ -185,7 +185,7 @@ func (s *MetricBusService) tryRegister() {
        s.serviceCookie = cookie
 }
 
-func (s *MetricBusService) Flush() {
+func (s *metricBusServiceImpl) Flush() {
        var err error
 
        s.mu.Lock()
@@ -234,7 +234,7 @@ handleServerRestarted:
        goto flushRestart
 }
 
-func (s *MetricBusService) deregister() {
+func (s *metricBusServiceImpl) deregister() {
        s.mu.Lock()
        defer s.mu.Unlock()
 
@@ -250,7 +250,7 @@ func (s *MetricBusService) deregister() {
        s.childCtxCancel()
 }
 
-func (s *MetricBusService) loop() {
+func (s *metricBusServiceImpl) loop() {
        ticker := time.NewTicker(1 * time.Second)
 
        for {
@@ -264,7 +264,7 @@ func (s *MetricBusService) loop() {
        }
 }
 
-func (s *MetricBusService) event(metricName string, labelValues []string) *metricValue {
+func (s *metricBusServiceImpl) event(metricName string, labelValues []string) *metricValue {
        s.mu.Lock()
        defer s.mu.Unlock()
 
similarity index 98%
rename from metrics/metricbus/mbclient/metrics.go
rename to metrics/metricbus/mbclient/dbus_metrics.go
index 45bd0c5e27cad47fe068d486a459816962cdf477..f0774db92e0382c45e8df1e0a266b350c1f1990f 100644 (file)
@@ -6,7 +6,7 @@ import (
 )
 
 type metricMetadata struct {
-       s          *MetricBusService
+       s          *metricBusServiceImpl
        name       string
        help       string
        metricType metricbus.MetricType
index 8b5ccdb7c5a9900d7c91b0eae09ef818864b054e..98c8f0be851c70e5abab928f0028f0cb6e2d6ad6 100644 (file)
@@ -22,6 +22,13 @@ type metricBusLowLevelConnection interface {
        Post(serviceCookie string, values []metricValue) error
 }
 
+type MetricBusService interface {
+       Flush()
+       FlushAndWait()
+       DefineCounter(metricName, descr string, labelNames ...string) CounterMetric
+       DefineGauge(metricName, descr string, labelNames ...string) GaugeMetric
+}
+
 type CounterMetric interface {
        WithLabelValues(metricbus.KV) CounterMetric
        Add(float64)
index 8315d96421c608eac1dccfcf853332a7cbfc15c7..ce8c0a90cfb98cd91c8dec645c1f3fd75c4c61c5 100644 (file)
@@ -19,7 +19,7 @@ import (
 type mtlsMetrics struct {
        log log.Logger
 
-       svc *mbclient.MetricBusService
+       svc mbclient.MetricBusService
 
        secondsUntilExpiration mbclient.GaugeMetric
        rotationsObserved      mbclient.CounterMetric