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

Method syncRulesToManager

pkg/ruler/manager.go:203–249  ·  view source on GitHub ↗

syncRulesToManager maps the rule files to disk, detects any changes and will create/update the users Prometheus Rules Manager.

(ctx context.Context, user string, groups rulespb.RuleGroupList)

Source from the content-addressed store, hash-verified

201// syncRulesToManager maps the rule files to disk, detects any changes and will create/update the
202// users Prometheus Rules Manager.
203func (r *DefaultMultiTenantManager) syncRulesToManager(ctx context.Context, user string, groups rulespb.RuleGroupList) {
204 // Map the files to disk and return the file names to be passed to the users manager if they
205 // have been updated
206 rulesUpdated, files, err := r.mapper.MapRules(user, groups.Formatted())
207 if err != nil {
208 r.lastReloadSuccessful.WithLabelValues(user).Set(0)
209 level.Error(r.logger).Log("msg", "unable to map rule files", "user", user, "err", err)
210 return
211 }
212 externalLabels, externalLabelsUpdated := r.userExternalLabels.update(user)
213
214 existing := true
215 manager := r.getRulesManager(user, ctx)
216 if manager == nil {
217 existing = false
218 manager = r.createRulesManager(user, ctx)
219 }
220
221 if manager == nil {
222 return
223 }
224
225 if !existing || rulesUpdated || externalLabelsUpdated {
226 level.Debug(r.logger).Log("msg", "updating rules", "user", user)
227 r.configUpdatesTotal.WithLabelValues(user).Inc()
228 if (rulesUpdated || externalLabelsUpdated) && existing {
229 r.updateRuleCache(user, manager.RuleGroups())
230 }
231 err = manager.Update(r.cfg.EvaluationInterval, files, externalLabels, r.cfg.ExternalURL.String(), r.ruleGroupIterationFunc)
232 r.deleteRuleCache(user)
233 if err != nil {
234 r.lastReloadSuccessful.WithLabelValues(user).Set(0)
235 level.Error(r.logger).Log("msg", "unable to update rule manager", "user", user, "err", err)
236 return
237 }
238 if externalLabelsUpdated {
239 if err = r.notifierApplyExternalLabels(user, externalLabels); err != nil {
240 r.lastReloadSuccessful.WithLabelValues(user).Set(0)
241 level.Error(r.logger).Log("msg", "unable to update notifier", "user", user, "err", err)
242 return
243 }
244 }
245
246 r.lastReloadSuccessful.WithLabelValues(user).Set(1)
247 r.lastReloadSuccessfulTimestamp.WithLabelValues(user).SetToCurrentTime()
248 }
249}
250
251func (r *DefaultMultiTenantManager) getRulesManager(user string, ctx context.Context) RulesManager {
252 r.userManagerMtx.RLock()

Callers 1

SyncRuleGroupsMethod · 0.95

Calls 15

getRulesManagerMethod · 0.95
createRulesManagerMethod · 0.95
updateRuleCacheMethod · 0.95
deleteRuleCacheMethod · 0.95
MapRulesMethod · 0.80
FormattedMethod · 0.80
updateMethod · 0.80
SetMethod · 0.65
RuleGroupsMethod · 0.65
UpdateMethod · 0.65
StringMethod · 0.65

Tested by

no test coverage detected