2022-02-16 07:15:44 -06:00
|
|
|
package dashboards
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"github.com/grafana/grafana/pkg/models"
|
2023-01-23 07:19:25 -06:00
|
|
|
alertmodels "github.com/grafana/grafana/pkg/services/alerting/models"
|
2022-11-11 07:28:24 -06:00
|
|
|
"github.com/grafana/grafana/pkg/services/folder"
|
2022-11-14 13:08:10 -06:00
|
|
|
"github.com/grafana/grafana/pkg/services/quota"
|
2022-02-16 07:15:44 -06:00
|
|
|
)
|
|
|
|
|
|
|
|
// DashboardService is a service for operating on dashboards.
|
2022-09-12 05:03:49 -05:00
|
|
|
//
|
|
|
|
//go:generate mockery --name DashboardService --structname FakeDashboardService --inpackage --filename dashboard_service_mock.go
|
2022-02-16 07:15:44 -06:00
|
|
|
type DashboardService interface {
|
2023-01-16 09:33:55 -06:00
|
|
|
BuildSaveDashboardCommand(ctx context.Context, dto *SaveDashboardDTO, shouldValidateAlerts bool, validateProvisionedDashboard bool) (*SaveDashboardCommand, error)
|
2022-05-19 09:13:02 -05:00
|
|
|
DeleteDashboard(ctx context.Context, dashboardId int64, orgId int64) error
|
2022-05-23 10:14:27 -05:00
|
|
|
FindDashboards(ctx context.Context, query *models.FindPersistedDashboardsQuery) ([]DashboardSearchProjection, error)
|
2023-01-25 03:36:26 -06:00
|
|
|
GetDashboard(ctx context.Context, query *GetDashboardQuery) (*Dashboard, error)
|
|
|
|
GetDashboardACLInfoList(ctx context.Context, query *GetDashboardACLInfoListQuery) ([]*DashboardACLInfoDTO, error)
|
|
|
|
GetDashboards(ctx context.Context, query *GetDashboardsQuery) ([]*Dashboard, error)
|
|
|
|
GetDashboardTags(ctx context.Context, query *GetDashboardTagsQuery) ([]*DashboardTagCloudItem, error)
|
|
|
|
GetDashboardUIDByID(ctx context.Context, query *GetDashboardRefByIDQuery) (*DashboardRef, error)
|
2023-01-25 02:14:32 -06:00
|
|
|
HasAdminPermissionInDashboardsOrFolders(ctx context.Context, query *folder.HasAdminPermissionInDashboardsOrFoldersQuery) (bool, error)
|
|
|
|
HasEditPermissionInFolders(ctx context.Context, query *folder.HasEditPermissionInFoldersQuery) (bool, error)
|
2023-01-16 09:33:55 -06:00
|
|
|
ImportDashboard(ctx context.Context, dto *SaveDashboardDTO) (*Dashboard, error)
|
2022-02-16 07:15:44 -06:00
|
|
|
MakeUserAdmin(ctx context.Context, orgID int64, userID, dashboardID int64, setViewAndEditPermissions bool) error
|
2023-01-16 09:33:55 -06:00
|
|
|
SaveDashboard(ctx context.Context, dto *SaveDashboardDTO, allowUiUpdate bool) (*Dashboard, error)
|
2022-05-23 10:14:27 -05:00
|
|
|
SearchDashboards(ctx context.Context, query *models.FindPersistedDashboardsQuery) error
|
2023-01-20 07:58:47 -06:00
|
|
|
UpdateDashboardACL(ctx context.Context, uid int64, items []*DashboardACL) error
|
2022-07-19 09:01:05 -05:00
|
|
|
DeleteACLByUser(ctx context.Context, userID int64) error
|
2022-11-02 08:15:50 -05:00
|
|
|
CountDashboardsInFolder(ctx context.Context, query *CountDashboardsInFolderQuery) (int64, error)
|
2022-02-16 07:15:44 -06:00
|
|
|
}
|
|
|
|
|
2022-03-10 11:38:04 -06:00
|
|
|
// PluginService is a service for operating on plugin dashboards.
|
|
|
|
type PluginService interface {
|
2023-01-25 03:36:26 -06:00
|
|
|
GetDashboardsByPluginID(ctx context.Context, query *GetDashboardsByPluginIDQuery) ([]*Dashboard, error)
|
2022-03-10 11:38:04 -06:00
|
|
|
}
|
|
|
|
|
2022-02-16 07:15:44 -06:00
|
|
|
// DashboardProvisioningService is a service for operating on provisioned dashboards.
|
2022-09-12 05:03:49 -05:00
|
|
|
//
|
|
|
|
//go:generate mockery --name DashboardProvisioningService --structname FakeDashboardProvisioning --inpackage --filename dashboard_provisioning_mock.go
|
2022-02-16 07:15:44 -06:00
|
|
|
type DashboardProvisioningService interface {
|
2023-01-18 06:52:41 -06:00
|
|
|
DeleteOrphanedProvisionedDashboards(ctx context.Context, cmd *DeleteOrphanedProvisionedDashboardsCommand) error
|
2022-05-19 09:13:02 -05:00
|
|
|
DeleteProvisionedDashboard(ctx context.Context, dashboardID int64, orgID int64) error
|
2023-01-18 06:52:41 -06:00
|
|
|
GetProvisionedDashboardData(ctx context.Context, name string) ([]*DashboardProvisioning, error)
|
|
|
|
GetProvisionedDashboardDataByDashboardID(ctx context.Context, dashboardID int64) (*DashboardProvisioning, error)
|
|
|
|
GetProvisionedDashboardDataByDashboardUID(ctx context.Context, orgID int64, dashboardUID string) (*DashboardProvisioning, error)
|
2023-01-16 09:33:55 -06:00
|
|
|
SaveFolderForProvisionedDashboards(context.Context, *SaveDashboardDTO) (*Dashboard, error)
|
|
|
|
SaveProvisionedDashboard(ctx context.Context, dto *SaveDashboardDTO, provisioning *DashboardProvisioning) (*Dashboard, error)
|
2022-02-16 07:15:44 -06:00
|
|
|
UnprovisionDashboard(ctx context.Context, dashboardID int64) error
|
|
|
|
}
|
|
|
|
|
|
|
|
// Store is a dashboard store.
|
2022-09-12 05:03:49 -05:00
|
|
|
//
|
|
|
|
//go:generate mockery --name Store --structname FakeDashboardStore --inpackage --filename store_mock.go
|
2022-02-16 07:15:44 -06:00
|
|
|
type Store interface {
|
2023-01-18 06:52:41 -06:00
|
|
|
DeleteDashboard(ctx context.Context, cmd *DeleteDashboardCommand) error
|
|
|
|
DeleteOrphanedProvisionedDashboards(ctx context.Context, cmd *DeleteOrphanedProvisionedDashboardsCommand) error
|
2022-05-23 10:14:27 -05:00
|
|
|
FindDashboards(ctx context.Context, query *models.FindPersistedDashboardsQuery) ([]DashboardSearchProjection, error)
|
2023-01-16 09:33:55 -06:00
|
|
|
GetDashboard(ctx context.Context, query *GetDashboardQuery) (*Dashboard, error)
|
2023-01-25 03:36:26 -06:00
|
|
|
GetDashboardACLInfoList(ctx context.Context, query *GetDashboardACLInfoListQuery) ([]*DashboardACLInfoDTO, error)
|
|
|
|
GetDashboardUIDByID(ctx context.Context, query *GetDashboardRefByIDQuery) (*DashboardRef, error)
|
|
|
|
GetDashboards(ctx context.Context, query *GetDashboardsQuery) ([]*Dashboard, error)
|
2022-05-19 09:13:02 -05:00
|
|
|
// GetDashboardsByPluginID retrieves dashboards identified by plugin.
|
2023-01-25 03:36:26 -06:00
|
|
|
GetDashboardsByPluginID(ctx context.Context, query *GetDashboardsByPluginIDQuery) ([]*Dashboard, error)
|
|
|
|
GetDashboardTags(ctx context.Context, query *GetDashboardTagsQuery) ([]*DashboardTagCloudItem, error)
|
2023-01-18 06:52:41 -06:00
|
|
|
GetProvisionedDashboardData(ctx context.Context, name string) ([]*DashboardProvisioning, error)
|
|
|
|
GetProvisionedDataByDashboardID(ctx context.Context, dashboardID int64) (*DashboardProvisioning, error)
|
|
|
|
GetProvisionedDataByDashboardUID(ctx context.Context, orgID int64, dashboardUID string) (*DashboardProvisioning, error)
|
2023-01-25 02:14:32 -06:00
|
|
|
HasAdminPermissionInDashboardsOrFolders(ctx context.Context, query *folder.HasAdminPermissionInDashboardsOrFoldersQuery) (bool, error)
|
|
|
|
HasEditPermissionInFolders(ctx context.Context, query *folder.HasEditPermissionInFoldersQuery) (bool, error)
|
|
|
|
// SaveAlerts saves dashboard alerts.
|
2023-01-23 07:19:25 -06:00
|
|
|
SaveAlerts(ctx context.Context, dashID int64, alerts []*alertmodels.Alert) error
|
2023-01-16 09:33:55 -06:00
|
|
|
SaveDashboard(ctx context.Context, cmd SaveDashboardCommand) (*Dashboard, error)
|
|
|
|
SaveProvisionedDashboard(ctx context.Context, cmd SaveDashboardCommand, provisioning *DashboardProvisioning) (*Dashboard, error)
|
2022-02-16 07:15:44 -06:00
|
|
|
UnprovisionDashboard(ctx context.Context, id int64) error
|
2023-01-20 07:58:47 -06:00
|
|
|
UpdateDashboardACL(ctx context.Context, uid int64, items []*DashboardACL) error
|
2022-05-19 09:13:02 -05:00
|
|
|
// ValidateDashboardBeforeSave validates a dashboard before save.
|
2023-01-16 09:33:55 -06:00
|
|
|
ValidateDashboardBeforeSave(ctx context.Context, dashboard *Dashboard, overwrite bool) (bool, error)
|
2022-07-15 11:06:44 -05:00
|
|
|
DeleteACLByUser(context.Context, int64) error
|
2022-05-19 09:13:02 -05:00
|
|
|
|
2022-11-14 13:08:10 -06:00
|
|
|
Count(context.Context, *quota.ScopeParameters) (*quota.Map, error)
|
2022-11-02 08:15:50 -05:00
|
|
|
// CountDashboardsInFolder returns the number of dashboards associated with
|
|
|
|
// the given parent folder ID.
|
|
|
|
CountDashboardsInFolder(ctx context.Context, request *CountDashboardsInFolderRequest) (int64, error)
|
2022-03-14 10:21:42 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
// FolderStore is a folder store.
|
2022-09-12 05:03:49 -05:00
|
|
|
//
|
|
|
|
//go:generate mockery --name FolderStore --structname FakeFolderStore --inpackage --filename folder_store_mock.go
|
2022-03-14 10:21:42 -05:00
|
|
|
type FolderStore interface {
|
|
|
|
// GetFolderByTitle retrieves a folder by its title
|
2022-11-11 07:28:24 -06:00
|
|
|
GetFolderByTitle(ctx context.Context, orgID int64, title string) (*folder.Folder, error)
|
2022-03-14 10:21:42 -05:00
|
|
|
// GetFolderByUID retrieves a folder by its UID
|
2022-11-11 07:28:24 -06:00
|
|
|
GetFolderByUID(ctx context.Context, orgID int64, uid string) (*folder.Folder, error)
|
2022-03-14 10:21:42 -05:00
|
|
|
// GetFolderByID retrieves a folder by its ID
|
2022-11-11 07:28:24 -06:00
|
|
|
GetFolderByID(ctx context.Context, orgID int64, id int64) (*folder.Folder, error)
|
2022-02-16 07:15:44 -06:00
|
|
|
}
|