From b84dde7b4aa3cd96527ccbd899e0d056d124b6f5 Mon Sep 17 00:00:00 2001 From: Tania <10127682+undef1nd@users.noreply.github.com> Date: Tue, 30 Jan 2024 16:57:01 +0100 Subject: [PATCH] Chore: Change response status for dashboard import with invalid input (#81521) * Return BadRequest when dashboard import failed due to invalid input --- pkg/services/dashboardimport/api/api.go | 5 +++++ .../dashboardimport/utils/dash_template_evaluator.go | 12 +++--------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/pkg/services/dashboardimport/api/api.go b/pkg/services/dashboardimport/api/api.go index 819aa30ab03..f225f95e24d 100644 --- a/pkg/services/dashboardimport/api/api.go +++ b/pkg/services/dashboardimport/api/api.go @@ -1,6 +1,7 @@ package api import ( + "errors" "net/http" "github.com/grafana/grafana/pkg/api/apierrors" @@ -10,6 +11,7 @@ import ( "github.com/grafana/grafana/pkg/services/accesscontrol" contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model" "github.com/grafana/grafana/pkg/services/dashboardimport" + "github.com/grafana/grafana/pkg/services/dashboardimport/utils" "github.com/grafana/grafana/pkg/services/dashboards" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/quota" @@ -77,6 +79,9 @@ func (api *ImportDashboardAPI) ImportDashboard(c *contextmodel.ReqContext) respo req.User = c.SignedInUser resp, err := api.dashboardImportService.ImportDashboard(c.Req.Context(), &req) if err != nil { + if errors.Is(err, utils.ErrDashboardInputMissing) { + return response.Error(http.StatusBadRequest, err.Error(), err) + } return apierrors.ToDashboardErrorResponse(c.Req.Context(), api.pluginStore, err) } diff --git a/pkg/services/dashboardimport/utils/dash_template_evaluator.go b/pkg/services/dashboardimport/utils/dash_template_evaluator.go index c21b1ce62f0..29c8f76ad65 100644 --- a/pkg/services/dashboardimport/utils/dash_template_evaluator.go +++ b/pkg/services/dashboardimport/utils/dash_template_evaluator.go @@ -2,6 +2,7 @@ package utils import ( "encoding/json" + "errors" "fmt" "regexp" @@ -11,14 +12,7 @@ import ( ) var varRegex = regexp.MustCompile(`(\$\{.+?\})`) - -type DashboardInputMissingError struct { - VariableName string -} - -func (e DashboardInputMissingError) Error() string { - return fmt.Sprintf("Dashboard input variable: %v missing from import command", e.VariableName) -} +var ErrDashboardInputMissing = errors.New("missing dashboard input variable") type DashTemplateEvaluator struct { template *simplejson.Json @@ -63,7 +57,7 @@ func (e *DashTemplateEvaluator) Eval() (*simplejson.Json, error) { } if input == nil { - return nil, &DashboardInputMissingError{VariableName: inputName} + return nil, fmt.Errorf("dashboard import failed: %w %s", ErrDashboardInputMissing, inputName) } e.variables["${"+inputName+"}"] = input.Value