in prometheus/alert/client.go [180:206]
func (c *client) UpdateRule(filePrefix string, rule rulefmt.Rule) error {
filename := makeFilename(filePrefix)
c.fileLocks.Lock(filename)
defer c.fileLocks.Unlock(filename)
ruleFile, err := c.readRuleFile(filename)
if err != nil {
return fmt.Errorf("rule file %s does not exist: %v", filename, err)
}
err = SecureRule(c.tenancy.RestrictQueries, c.tenancy.RestrictorLabel, filePrefix, &rule)
if err != nil {
return fmt.Errorf("cannot parse expression: \"%s\", %v", rule.Expr, err)
}
err = ruleFile.ReplaceRule(rule)
if err != nil {
return err
}
err = c.writeRuleFile(ruleFile, filename)
if err != nil {
return err
}
return nil
}