in prometheus/handlers/handlers.go [180:216]
func GetUpdateAlertHandler(client alert.PrometheusAlertClient) func(c echo.Context) error {
return func(c echo.Context) error {
defer glog.Flush()
ruleName := c.Param(ruleNameParam)
tenantID := c.Get(tenantIDParam).(string)
glog.Infof("Update Rule: Tenant: %s, rule: %s", tenantID, ruleName)
if ruleName == "" {
return echo.NewHTTPError(http.StatusBadRequest, "No rule name provided")
}
if !client.RuleExists(tenantID, ruleName) {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Rule '%s' does not exist", ruleName))
}
rule, err := decodeRulePostRequest(c)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, err.Error())
}
err = alert.ValidateRule(rule)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, err.Error())
}
err = client.UpdateRule(tenantID, rule)
if err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
err = client.ReloadPrometheus()
if err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
return c.NoContent(http.StatusNoContent)
}
}