Dynamically register cache provider metrics

This commit is contained in:
Thibault Jamet 2024-08-13 11:24:34 +02:00
parent ef0dd29cf5
commit 6c5faafbfe
No known key found for this signature in database
GPG Key ID: 9D28A304A3810C17
2 changed files with 17 additions and 8 deletions

View File

@ -402,10 +402,10 @@ func main() {
} }
if cfg.ProviderCacheTime > 0 { if cfg.ProviderCacheTime > 0 {
p = &provider.CachedProvider{ p = provider.NewCachedProvider(
Provider: p, p,
RefreshDelay: cfg.ProviderCacheTime, cfg.ProviderCacheTime,
} )
} }
var r registry.Registry var r registry.Registry

View File

@ -17,6 +17,7 @@ package provider
import ( import (
"context" "context"
"sync"
"time" "time"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
@ -46,6 +47,8 @@ var (
Help: "Number of calls to the provider cache ApplyChanges.", Help: "Number of calls to the provider cache ApplyChanges.",
}, },
) )
registerCacheProviderMetrics = sync.Once{}
) )
type CachedProvider struct { type CachedProvider struct {
@ -55,6 +58,16 @@ type CachedProvider struct {
cache []*endpoint.Endpoint cache []*endpoint.Endpoint
} }
func NewCachedProvider(provider Provider, refreshDelay time.Duration) *CachedProvider {
registerMetrics.Do(func() {
prometheus.MustRegister(cachedRecordsCallsTotal)
})
return &CachedProvider{
Provider: provider,
RefreshDelay: refreshDelay,
}
}
func (c *CachedProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, error) { func (c *CachedProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, error) {
if c.needRefresh() { if c.needRefresh() {
log.Info("Records cache provider: refreshing records list cache") log.Info("Records cache provider: refreshing records list cache")
@ -95,7 +108,3 @@ func (c *CachedProvider) needRefresh() bool {
log.Debug("Records cache last Read: ", c.lastRead, "expiration: ", c.RefreshDelay, " provider expiration:", c.lastRead.Add(c.RefreshDelay), "expired: ", time.Now().After(c.lastRead.Add(c.RefreshDelay))) log.Debug("Records cache last Read: ", c.lastRead, "expiration: ", c.RefreshDelay, " provider expiration:", c.lastRead.Add(c.RefreshDelay), "expired: ", time.Now().After(c.lastRead.Add(c.RefreshDelay)))
return time.Now().After(c.lastRead.Add(c.RefreshDelay)) return time.Now().After(c.lastRead.Add(c.RefreshDelay))
} }
func init() {
prometheus.MustRegister(cachedRecordsCallsTotal)
}