dashboards.go 1.6 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. TitleLower string
  20. OrgId int64
  21. Folder string
  22. UpdatedAt time.Time
  23. UserId int64
  24. Message string
  25. Overwrite bool
  26. Dashboard *models.Dashboard
  27. }
  28. type DashboardRepository struct{}
  29. func (dr *DashboardRepository) SaveDashboard(json *SaveDashboardItem) (*models.Dashboard, error) {
  30. dashboard := json.Dashboard
  31. if dashboard.Title == "" {
  32. return nil, models.ErrDashboardTitleEmpty
  33. }
  34. validateAlertsCmd := alerting.ValidateDashboardAlertsCommand{
  35. OrgId: json.OrgId,
  36. Dashboard: dashboard,
  37. }
  38. if err := bus.Dispatch(&validateAlertsCmd); err != nil {
  39. return nil, models.ErrDashboardContainsInvalidAlertData
  40. }
  41. cmd := models.SaveDashboardCommand{
  42. Dashboard: dashboard.Data,
  43. Message: json.Message,
  44. OrgId: json.OrgId,
  45. Overwrite: json.Overwrite,
  46. UserId: json.UserId,
  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. }