| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- package dashboards
- import (
- "time"
- "github.com/grafana/grafana/pkg/bus"
- "github.com/grafana/grafana/pkg/models"
- "github.com/grafana/grafana/pkg/services/alerting"
- )
- type Repository interface {
- SaveDashboard(*SaveDashboardItem) (*models.Dashboard, error)
- }
- var repositoryInstance Repository
- func GetRepository() Repository {
- return repositoryInstance
- }
- func SetRepository(rep Repository) {
- repositoryInstance = rep
- }
- type SaveDashboardItem struct {
- OrgId int64
- Folder string
- UpdatedAt time.Time
- UserId int64
- Message string
- Overwrite bool
- Dashboard *models.Dashboard
- }
- type DashboardRepository struct{}
- func (dr *DashboardRepository) SaveDashboard(json *SaveDashboardItem) (*models.Dashboard, error) {
- dashboard := json.Dashboard
- if dashboard.Title == "" {
- return nil, models.ErrDashboardTitleEmpty
- }
- validateAlertsCmd := alerting.ValidateDashboardAlertsCommand{
- OrgId: json.OrgId,
- Dashboard: dashboard,
- }
- if err := bus.Dispatch(&validateAlertsCmd); err != nil {
- return nil, models.ErrDashboardContainsInvalidAlertData
- }
- cmd := models.SaveDashboardCommand{
- Dashboard: dashboard.Data,
- Message: json.Message,
- OrgId: json.OrgId,
- Overwrite: json.Overwrite,
- UserId: json.UserId,
- }
- if !json.UpdatedAt.IsZero() {
- cmd.UpdatedAt = json.UpdatedAt
- }
- err := bus.Dispatch(&cmd)
- if err != nil {
- return nil, err
- }
- alertCmd := alerting.UpdateDashboardAlertsCommand{
- OrgId: json.OrgId,
- UserId: json.UserId,
- Dashboard: cmd.Result,
- }
- if err := bus.Dispatch(&alertCmd); err != nil {
- return nil, models.ErrDashboardFailedToUpdateAlertData
- }
- return cmd.Result, nil
- }
|