Plugins: Ensure catching all appropriate 4xx api/ds/query scenarios (#47565)

* catch ds 404s

* catch plugin errs

* go step back
This commit is contained in:
Will Browne 2022-04-29 12:08:40 +02:00 committed by GitHub
parent 7bb4f5cd9b
commit c8a71a2f91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -10,6 +10,7 @@ import (
"github.com/grafana/grafana/pkg/api/dtos"
"github.com/grafana/grafana/pkg/api/response"
"github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/plugins/backendplugin"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/query"
"github.com/grafana/grafana/pkg/services/sqlstore"
@ -18,17 +19,6 @@ import (
"github.com/grafana/grafana/pkg/web"
)
func (hs *HTTPServer) handleQueryMetricsError(err error) *response.NormalResponse {
if errors.Is(err, models.ErrDataSourceAccessDenied) {
return response.Error(http.StatusForbidden, "Access denied to data source", err)
}
var badQuery *query.ErrBadQuery
if errors.As(err, &badQuery) {
return response.Error(http.StatusBadRequest, util.Capitalize(badQuery.Message), err)
}
return response.Error(http.StatusInternalServerError, "Query data error", err)
}
// QueryMetricsV2 returns query metrics.
// POST /api/ds/query DataSource query w/ expressions
func (hs *HTTPServer) QueryMetricsV2(c *models.ReqContext) response.Response {
@ -44,6 +34,25 @@ func (hs *HTTPServer) QueryMetricsV2(c *models.ReqContext) response.Response {
return toJsonStreamingResponse(resp)
}
func (hs *HTTPServer) handleQueryMetricsError(err error) *response.NormalResponse {
if errors.Is(err, models.ErrDataSourceAccessDenied) {
return response.Error(http.StatusForbidden, "Access denied to data source", err)
}
if errors.Is(err, models.ErrDataSourceNotFound) {
return response.Error(http.StatusNotFound, "Data source not found", err)
}
var badQuery *query.ErrBadQuery
if errors.As(err, &badQuery) {
return response.Error(http.StatusBadRequest, util.Capitalize(badQuery.Message), err)
}
if errors.Is(err, backendplugin.ErrPluginNotRegistered) {
return response.Error(http.StatusNotFound, "Plugin not found", err)
}
return response.Error(http.StatusInternalServerError, "Query data error", err)
}
func parseDashboardQueryParams(params map[string]string) (models.GetDashboardQuery, int64, error) {
query := models.GetDashboardQuery{}
@ -101,8 +110,8 @@ func checkDashboardAndPanel(ctx context.Context, ss sqlstore.Store, query models
return models.ErrDashboardPanelNotFound
}
// QueryMetricsV2 returns query metrics.
// POST /api/ds/query DataSource query w/ expressions
// QueryMetricsFromDashboard returns query metrics.
// POST /dashboards/org/:orgId/uid/:dashboardUid/panels/:panelId/query DataSource query w/ expressions
func (hs *HTTPServer) QueryMetricsFromDashboard(c *models.ReqContext) response.Response {
// check feature flag
if !hs.Features.IsEnabled(featuremgmt.FlagValidatedQueries) {