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)
| 201 | // syncRulesToManager maps the rule files to disk, detects any changes and will create/update the |
| 202 | // users Prometheus Rules Manager. |
| 203 | func (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 | |
| 251 | func (r *DefaultMultiTenantManager) getRulesManager(user string, ctx context.Context) RulesManager { |
| 252 | r.userManagerMtx.RLock() |
no test coverage detected