MCPcopy Index your code
hub / github.com/cortexproject/cortex / DefaultTenantManagerFactory

Function DefaultTenantManagerFactory

pkg/ruler/compat.go:357–399  ·  view source on GitHub ↗
(cfg Config, p Pusher, q storage.Queryable, engine promql.QueryEngine, overrides RulesLimits, evalMetrics *RuleEvalMetrics, reg prometheus.Registerer)

Source from the content-addressed store, hash-verified

355type ManagerFactory func(ctx context.Context, userID string, notifier *notifier.Manager, logger log.Logger, frontendPool *client.Pool, reg prometheus.Registerer) (RulesManager, error)
356
357func DefaultTenantManagerFactory(cfg Config, p Pusher, q storage.Queryable, engine promql.QueryEngine, overrides RulesLimits, evalMetrics *RuleEvalMetrics, reg prometheus.Registerer) ManagerFactory {
358 // Wrap errors returned by Queryable to our wrapper, so that we can distinguish between those errors
359 // and errors returned by PromQL engine. Errors from Queryable can be either caused by user (limits) or internal errors.
360 // Errors from PromQL are always "user" errors.
361 q = querier.NewErrorTranslateQueryableWithFn(q, WrapQueryableErrors)
362 return func(ctx context.Context, userID string, notifier *notifier.Manager, logger log.Logger, frontendPool *client.Pool, reg prometheus.Registerer) (RulesManager, error) {
363 qfeClient, err := resolveFrontendClient(cfg.FrontendAddress, frontendPool)
364 if err != nil {
365 return nil, err
366 }
367
368 if qfeClient == nil && engine == nil {
369 return nil, fmt.Errorf("neither engine nor frontend client is configured for user %s", userID)
370 }
371
372 queryFunc := buildQueryFunc(engine, qfeClient, q, overrides, userID, cfg, evalMetrics, logger)
373 // We let the Prometheus rules manager control the context so that there is a chance
374 // for graceful shutdown of rules that are still in execution even in case the cortex context is canceled.
375 prometheusContext := user.InjectOrgID(context.WithoutCancel(ctx), userID)
376
377 return rules.NewManager(&rules.ManagerOptions{
378 Appendable: NewPusherAppendable(p, userID, overrides,
379 evalMetrics.TotalWritesVec.WithLabelValues(userID),
380 evalMetrics.FailedWritesVec.WithLabelValues(userID)),
381 Queryable: q,
382 QueryFunc: queryFunc,
383 Context: prometheusContext,
384 ExternalURL: cfg.ExternalURL.URL,
385 NotifyFunc: SendAlerts(notifier, cfg.ExternalURL.URL.String()),
386 Logger: util_log.GoKitLogToSlog(log.With(logger, "user", userID)),
387 Registerer: reg,
388 OutageTolerance: cfg.OutageTolerance,
389 ForGracePeriod: cfg.ForGracePeriod,
390 ResendDelay: cfg.ResendDelay,
391 ConcurrentEvalsEnabled: cfg.ConcurrentEvalsEnabled,
392 MaxConcurrentEvals: cfg.MaxConcurrentEvals,
393 DefaultRuleQueryOffset: func() time.Duration {
394 return overrides.RulerQueryOffset(userID)
395 },
396 RestoreNewRuleGroups: cfg.EnableSharding,
397 }), nil
398 }
399}
400
401func resolveFrontendClient(addr string, pool *client.Pool) (*frontendClient, error) {
402 if addr == "" {

Callers 5

initRulerMethod · 0.92
newManagerFunction · 0.85
buildRulerFunction · 0.85
buildRulerWithIterFuncFunction · 0.85

Calls 7

resolveFrontendClientFunction · 0.85
buildQueryFuncFunction · 0.85
NewPusherAppendableFunction · 0.85
SendAlertsFunction · 0.85
StringMethod · 0.65
RulerQueryOffsetMethod · 0.65

Tested by 4

newManagerFunction · 0.68
buildRulerFunction · 0.68
buildRulerWithIterFuncFunction · 0.68