diff --git a/pkg/api/dashboard.go b/pkg/api/dashboard.go index 91adc0b1eb9..961f401d514 100644 --- a/pkg/api/dashboard.go +++ b/pkg/api/dashboard.go @@ -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 diff --git a/pkg/services/alerting/extractor.go b/pkg/services/alerting/extractor.go index c02f5358815..49fa99e6c97 100644 --- a/pkg/services/alerting/extractor.go +++ b/pkg/services/alerting/extractor.go @@ -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{