Chore: Improve save dashboard error messages (#35780)

Includes panel and dashboard id in alert
extractor errors.
Logs all non-400 dashboard errors.

Fixes #35751
This commit is contained in:
Marcus Efraimsson
2021-06-16 14:56:55 +02:00
committed by GitHub
parent 866b2424ac
commit 477d4197fb
2 changed files with 24 additions and 4 deletions

View File

@@ -390,7 +390,7 @@ func (hs *HTTPServer) dashboardSaveErrorToApiResponse(err error) response.Respon
if body := dashboardErr.Body(); body != nil {
return response.JSON(dashboardErr.StatusCode, body)
}
if errors.Is(dashboardErr, models.ErrDashboardUpdateAccessDenied) {
if dashboardErr.StatusCode != 400 {
return response.Error(dashboardErr.StatusCode, dashboardErr.Error(), err)
}
return response.Error(dashboardErr.StatusCode, dashboardErr.Error(), nil)
@@ -402,7 +402,7 @@ func (hs *HTTPServer) dashboardSaveErrorToApiResponse(err error) response.Respon
var validationErr alerting.ValidationError
if ok := errors.As(err, &validationErr); ok {
return response.Error(422, validationErr.Error(), nil)
return response.Error(422, validationErr.Error(), err)
}
var pluginErr models.UpdatePluginDashboardError

View File

@@ -96,6 +96,26 @@ func (e *DashAlertExtractor) getAlertFromPanels(jsonWithPanels *simplejson.Json,
return nil, ValidationError{Reason: "A numeric panel id property is missing"}
}
addIdentifiersToValidationError := func(err error) error {
if err == nil {
return nil
}
var validationErr ValidationError
if ok := errors.As(err, &validationErr); ok {
ve := ValidationError{
Reason: validationErr.Reason,
Err: validationErr.Err,
PanelID: panelID,
}
if e.Dash != nil {
ve.DashboardID = e.Dash.Id
}
return ve
}
return err
}
// backward compatibility check, can be removed later
enabled, hasEnabled := jsonAlert.CheckGet("enabled")
if hasEnabled && !enabled.MustBool() {
@@ -104,14 +124,14 @@ func (e *DashAlertExtractor) getAlertFromPanels(jsonWithPanels *simplejson.Json,
frequency, err := getTimeDurationStringToSeconds(jsonAlert.Get("frequency").MustString())
if err != nil {
return nil, ValidationError{Reason: err.Error()}
return nil, addIdentifiersToValidationError(ValidationError{Reason: err.Error()})
}
rawFor := jsonAlert.Get("for").MustString()
forValue, err := getForValue(rawFor)
if err != nil {
return nil, err
return nil, addIdentifiersToValidationError(err)
}
alert := &models.Alert{