dashboards.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package dashboards
  2. import (
  3. "time"
  4. "github.com/grafana/grafana/pkg/bus"
  5. "github.com/grafana/grafana/pkg/models"
  6. "github.com/grafana/grafana/pkg/services/alerting"
  7. )
  8. type Repository interface {
  9. SaveDashboard(*SaveDashboardItem) (*models.Dashboard, error)
  10. }
  11. var repositoryInstance Repository
  12. func GetRepository() Repository {
  13. return repositoryInstance
  14. }
  15. func SetRepository(rep Repository) {
  16. repositoryInstance = rep
  17. }
  18. type SaveDashboardItem struct {
  19. OrgId int64
  20. UpdatedAt time.Time
  21. UserId int64
  22. Message string
  23. Overwrite bool
  24. Dashboard *models.Dashboard
  25. }
  26. type DashboardRepository struct{}
  27. func (dr *DashboardRepository) SaveDashboard(json *SaveDashboardItem) (*models.Dashboard, error) {
  28. dashboard := json.Dashboard
  29. if dashboard.Title == "" {
  30. return nil, models.ErrDashboardTitleEmpty
  31. }
  32. validateAlertsCmd := alerting.ValidateDashboardAlertsCommand{
  33. OrgId: json.OrgId,
  34. Dashboard: dashboard,
  35. }
  36. if err := bus.Dispatch(&validateAlertsCmd); err != nil {
  37. return nil, models.ErrDashboardContainsInvalidAlertData
  38. }
  39. cmd := models.SaveDashboardCommand{
  40. Dashboard: dashboard.Data,
  41. Message: json.Message,
  42. OrgId: json.OrgId,
  43. Overwrite: json.Overwrite,
  44. UserId: json.UserId,
  45. FolderId: dashboard.FolderId,
  46. IsFolder: dashboard.IsFolder,
  47. }
  48. if !json.UpdatedAt.IsZero() {
  49. cmd.UpdatedAt = json.UpdatedAt
  50. }
  51. err := bus.Dispatch(&cmd)
  52. if err != nil {
  53. return nil, err
  54. }
  55. alertCmd := alerting.UpdateDashboardAlertsCommand{
  56. OrgId: json.OrgId,
  57. UserId: json.UserId,
  58. Dashboard: cmd.Result,
  59. }
  60. if err := bus.Dispatch(&alertCmd); err != nil {
  61. return nil, models.ErrDashboardFailedToUpdateAlertData
  62. }
  63. return cmd.Result, nil
  64. }