dashboards.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. Folder string
  21. UpdatedAt time.Time
  22. UserId int64
  23. Message string
  24. Overwrite bool
  25. Dashboard *models.Dashboard
  26. }
  27. type DashboardRepository struct{}
  28. func (dr *DashboardRepository) SaveDashboard(json *SaveDashboardItem) (*models.Dashboard, error) {
  29. dashboard := json.Dashboard
  30. if dashboard.Title == "" {
  31. return nil, models.ErrDashboardTitleEmpty
  32. }
  33. validateAlertsCmd := alerting.ValidateDashboardAlertsCommand{
  34. OrgId: json.OrgId,
  35. Dashboard: dashboard,
  36. }
  37. if err := bus.Dispatch(&validateAlertsCmd); err != nil {
  38. return nil, models.ErrDashboardContainsInvalidAlertData
  39. }
  40. cmd := models.SaveDashboardCommand{
  41. Dashboard: dashboard.Data,
  42. Message: json.Message,
  43. OrgId: json.OrgId,
  44. Overwrite: json.Overwrite,
  45. UserId: json.UserId,
  46. }
  47. if !json.UpdatedAt.IsZero() {
  48. cmd.UpdatedAt = json.UpdatedAt
  49. }
  50. err := bus.Dispatch(&cmd)
  51. if err != nil {
  52. return nil, err
  53. }
  54. alertCmd := alerting.UpdateDashboardAlertsCommand{
  55. OrgId: json.OrgId,
  56. UserId: json.UserId,
  57. Dashboard: cmd.Result,
  58. }
  59. if err := bus.Dispatch(&alertCmd); err != nil {
  60. return nil, models.ErrDashboardFailedToUpdateAlertData
  61. }
  62. return cmd.Result, nil
  63. }