in prometheus/handlers/handlers.go [254:274]
func decodeRulePostRequest(c echo.Context) (rulefmt.Rule, error) {
body, err := ioutil.ReadAll(c.Request().Body)
if err != nil {
glog.Errorf("Error reading rule payload: %v", err)
return rulefmt.Rule{}, fmt.Errorf("error reading request body: %v", err)
}
// First try unmarshaling into prometheus rulefmt.Rule{}
payload := rulefmt.Rule{}
err = json.Unmarshal(body, &payload)
if err == nil {
return payload, nil
}
// Try to unmarshal into the RuleJSONWrapper struct if prometheus struct doesn't work
jsonPayload := alert.RuleJSONWrapper{}
err = json.Unmarshal(body, &jsonPayload)
if err != nil {
glog.Errorf("Error unmarshaling rule payload: %v", err)
return payload, fmt.Errorf("error unmarshalling payload: %v", err)
}
return jsonPayload.ToRuleFmt()
}