github.com/grafana/synthetic-monitoring-agent@v0.64.2/internal/labelmode/labelmode.go (about) 1 package labelmode 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/grafana/synthetic-monitoring-agent/internal/model" 8 sm "github.com/grafana/synthetic-monitoring-agent/pkg/pb/synthetic_monitoring" 9 ) 10 11 // TenantProvider is the subset of the tenant manager interface required to 12 // look up a tenant's current label mode. 13 type TenantProvider interface { 14 GetTenant(context.Context, *sm.TenantInfo) (*sm.Tenant, error) 15 } 16 17 // LabelMode provides the tenant's current label migration mode 18 // (PREFIXED / DUAL_WRITE / UNPREFIXED) by reading it from the GetTenant 19 // response, which is cached with a 15-minute TTL by the tenant manager. 20 type LabelMode struct { 21 provider TenantProvider 22 } 23 24 // New creates a LabelMode provider backed by the given TenantProvider. 25 func New(provider TenantProvider) *LabelMode { 26 return &LabelMode{provider: provider} 27 } 28 29 // ForTenant returns the label mode for the given tenant, defaulting to 30 // LABEL_MODE_UNPREFIXED if the tenant cannot be fetched. 31 // 32 // The default value is never actually used - the LabelMode is fetched 33 // during the scraper's `collectData` operation, which aborts overall 34 // if the tenant is not able to be retrieved as the tenant's limits 35 // are necessary to the scraper's operation. The default path is therefore 36 // irrelevant for scrapes which report telemetry. 37 func (lm *LabelMode) ForTenant(ctx context.Context, tenantID model.GlobalID) (sm.LabelMode, error) { 38 tenant, err := lm.provider.GetTenant(ctx, &sm.TenantInfo{Id: int64(tenantID)}) 39 if err != nil { 40 return sm.LabelMode_LABEL_MODE_UNPREFIXED, fmt.Errorf("fetching tenant label mode: %w", err) 41 } 42 43 return tenant.LabelMode, nil 44 }