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  }