|
|
|
@ -3,11 +3,12 @@ package api |
|
|
|
|
import ( |
|
|
|
|
"encoding/json" |
|
|
|
|
"fmt" |
|
|
|
|
//"github.com/grafana/grafana/pkg/services/dashboards"
|
|
|
|
|
"os" |
|
|
|
|
"path" |
|
|
|
|
"strings" |
|
|
|
|
|
|
|
|
|
"github.com/grafana/grafana/pkg/services/dashboards" |
|
|
|
|
|
|
|
|
|
"github.com/grafana/grafana/pkg/api/dtos" |
|
|
|
|
"github.com/grafana/grafana/pkg/bus" |
|
|
|
|
"github.com/grafana/grafana/pkg/components/dashdiffs" |
|
|
|
@ -17,7 +18,6 @@ import ( |
|
|
|
|
"github.com/grafana/grafana/pkg/middleware" |
|
|
|
|
m "github.com/grafana/grafana/pkg/models" |
|
|
|
|
"github.com/grafana/grafana/pkg/plugins" |
|
|
|
|
"github.com/grafana/grafana/pkg/services/alerting" |
|
|
|
|
"github.com/grafana/grafana/pkg/services/search" |
|
|
|
|
"github.com/grafana/grafana/pkg/setting" |
|
|
|
|
"github.com/grafana/grafana/pkg/util" |
|
|
|
@ -125,17 +125,6 @@ func PostDashboard(c *middleware.Context, cmd m.SaveDashboardCommand) Response { |
|
|
|
|
|
|
|
|
|
dash := cmd.GetDashboardModel() |
|
|
|
|
|
|
|
|
|
// dashItem := &dashboards.SaveDashboardItem{
|
|
|
|
|
// Dashboard: dash,
|
|
|
|
|
// Message: cmd.Message,
|
|
|
|
|
// }
|
|
|
|
|
// err := dashboards.SaveDashboard(dashItem)
|
|
|
|
|
|
|
|
|
|
// Check if Title is empty
|
|
|
|
|
if dash.Title == "" { |
|
|
|
|
return ApiError(400, m.ErrDashboardTitleEmpty.Error(), nil) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if dash.Id == 0 { |
|
|
|
|
limitReached, err := middleware.QuotaReached(c, "dashboard") |
|
|
|
|
if err != nil { |
|
|
|
@ -146,17 +135,23 @@ func PostDashboard(c *middleware.Context, cmd m.SaveDashboardCommand) Response { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
validateAlertsCmd := alerting.ValidateDashboardAlertsCommand{ |
|
|
|
|
dashItem := &dashboards.SaveDashboardItem{ |
|
|
|
|
Dashboard: dash, |
|
|
|
|
Message: cmd.Message, |
|
|
|
|
OrgId: c.OrgId, |
|
|
|
|
UserId: c.UserId, |
|
|
|
|
Dashboard: dash, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := bus.Dispatch(&validateAlertsCmd); err != nil { |
|
|
|
|
dashboard, err := dashboards.SaveDashboard(dashItem) |
|
|
|
|
|
|
|
|
|
if err == m.ErrDashboardTitleEmpty { |
|
|
|
|
return ApiError(400, m.ErrDashboardTitleEmpty.Error(), nil) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err == m.ErrDashboardContainsInvalidAlertData { |
|
|
|
|
return ApiError(500, "Invalid alert data. Cannot save dashboard", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
err := bus.Dispatch(&cmd) |
|
|
|
|
if err != nil { |
|
|
|
|
if err == m.ErrDashboardWithSameNameExists { |
|
|
|
|
return Json(412, util.DynMap{"status": "name-exists", "message": err.Error()}) |
|
|
|
@ -178,18 +173,12 @@ func PostDashboard(c *middleware.Context, cmd m.SaveDashboardCommand) Response { |
|
|
|
|
return ApiError(500, "Failed to save dashboard", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
alertCmd := alerting.UpdateDashboardAlertsCommand{ |
|
|
|
|
OrgId: c.OrgId, |
|
|
|
|
UserId: c.UserId, |
|
|
|
|
Dashboard: cmd.Result, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := bus.Dispatch(&alertCmd); err != nil { |
|
|
|
|
return ApiError(500, "Failed to save alerts", err) |
|
|
|
|
if err == m.ErrDashboardFailedToUpdateAlertData { |
|
|
|
|
return ApiError(500, "Invalid alert data. Cannot save dashboard", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
c.TimeRequest(metrics.M_Api_Dashboard_Save) |
|
|
|
|
return Json(200, util.DynMap{"status": "success", "slug": cmd.Result.Slug, "version": cmd.Result.Version}) |
|
|
|
|
return Json(200, util.DynMap{"status": "success", "slug": dashboard.Slug, "version": dashboard.Version}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func canEditDashboard(role m.RoleType) bool { |
|
|
|
|