in prometheus/alert/client.go [253:291]
func (c *client) BulkUpdateRules(filePrefix string, rules []rulefmt.Rule) (BulkUpdateResults, error) {
filename := makeFilename(filePrefix)
c.fileLocks.Lock(filename)
defer c.fileLocks.Unlock(filename)
ruleFile, err := c.readOrInitializeRuleFile(filePrefix, filename)
if err != nil {
return BulkUpdateResults{}, err
}
results := NewBulkUpdateResults()
for _, newRule := range rules {
ruleName := newRule.Alert
err := SecureRule(c.tenancy.RestrictQueries, c.tenancy.RestrictorLabel, filePrefix, &newRule)
if err != nil {
results.Errors[ruleName] = err
continue
}
if ruleFile.GetRule(ruleName) != nil {
err := ruleFile.ReplaceRule(newRule)
if err != nil {
results.Errors[ruleName] = err
} else {
results.Statuses[ruleName] = "updated"
}
} else {
ruleFile.AddRule(newRule)
results.Statuses[ruleName] = "created"
}
}
err = c.writeRuleFile(ruleFile, filename)
if err != nil {
return results, err
}
return results, nil
}