Browse Source

dashboard: fix import dashboard with alert rule

Importing a dashboard with alert rule(s) should be possible without receiving invalid
alert data error. This fix reverts the import logic to how it worked before Grafana v5.0,
that is import will allow dashboard with alert rule(s) but no alerts will be created.
After an import the user will need to update the dashboard for the alerts to be created.
Fixes #11227
Marcus Efraimsson 7 years ago
parent
commit
87284d284e
2 changed files with 20 additions and 1 deletions
  1. 1 1
      pkg/plugins/dashboard_importer.go
  2. 19 0
      pkg/services/dashboards/dashboard_service.go

+ 1 - 1
pkg/plugins/dashboard_importer.go

@@ -80,7 +80,7 @@ func ImportDashboard(cmd *ImportDashboardCommand) error {
 		User:      cmd.User,
 		User:      cmd.User,
 	}
 	}
 
 
-	savedDash, err := dashboards.NewService().SaveDashboard(dto)
+	savedDash, err := dashboards.NewService().ImportDashboard(dto)
 
 
 	if err != nil {
 	if err != nil {
 		return err
 		return err

+ 19 - 0
pkg/services/dashboards/dashboard_service.go

@@ -13,6 +13,7 @@ import (
 // DashboardService service for operating on dashboards
 // DashboardService service for operating on dashboards
 type DashboardService interface {
 type DashboardService interface {
 	SaveDashboard(dto *SaveDashboardDTO) (*models.Dashboard, error)
 	SaveDashboard(dto *SaveDashboardDTO) (*models.Dashboard, error)
+	ImportDashboard(dto *SaveDashboardDTO) (*models.Dashboard, error)
 }
 }
 
 
 // DashboardProvisioningService service for operating on provisioned dashboards
 // DashboardProvisioningService service for operating on provisioned dashboards
@@ -214,6 +215,20 @@ func (dr *dashboardServiceImpl) SaveDashboard(dto *SaveDashboardDTO) (*models.Da
 	return cmd.Result, nil
 	return cmd.Result, nil
 }
 }
 
 
+func (dr *dashboardServiceImpl) ImportDashboard(dto *SaveDashboardDTO) (*models.Dashboard, error) {
+	cmd, err := dr.buildSaveDashboardCommand(dto, false)
+	if err != nil {
+		return nil, err
+	}
+
+	err = bus.Dispatch(cmd)
+	if err != nil {
+		return nil, err
+	}
+
+	return cmd.Result, nil
+}
+
 type FakeDashboardService struct {
 type FakeDashboardService struct {
 	SaveDashboardResult *models.Dashboard
 	SaveDashboardResult *models.Dashboard
 	SaveDashboardError  error
 	SaveDashboardError  error
@@ -230,6 +245,10 @@ func (s *FakeDashboardService) SaveDashboard(dto *SaveDashboardDTO) (*models.Das
 	return s.SaveDashboardResult, s.SaveDashboardError
 	return s.SaveDashboardResult, s.SaveDashboardError
 }
 }
 
 
+func (s *FakeDashboardService) ImportDashboard(dto *SaveDashboardDTO) (*models.Dashboard, error) {
+	return s.SaveDashboard(dto)
+}
+
 func MockDashboardService(mock *FakeDashboardService) {
 func MockDashboardService(mock *FakeDashboardService) {
 	NewService = func() DashboardService {
 	NewService = func() DashboardService {
 		return mock
 		return mock