| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- 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
- 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,
- FolderId: dashboard.FolderId,
- IsFolder: dashboard.IsFolder,
- }
- 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
- }
|