mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Chore: Remove Result from dashboard models (#61997)
* Chore: Remove Result from dashboard models * Fix lint tests * Fix dashboard service tests * Fix API tests * Remove commented out code * Chore: Merge main - cleanup
This commit is contained in:
@@ -15,9 +15,9 @@ import (
|
||||
// 1) Permissions for the dashboard
|
||||
// 2) permissions for its parent folder
|
||||
// 3) if no specific permissions have been set for the dashboard or its parent folder then get the default permissions
|
||||
func (d *DashboardStore) GetDashboardACLInfoList(ctx context.Context, query *dashboards.GetDashboardACLInfoListQuery) error {
|
||||
func (d *DashboardStore) GetDashboardACLInfoList(ctx context.Context, query *dashboards.GetDashboardACLInfoListQuery) ([]*dashboards.DashboardACLInfoDTO, error) {
|
||||
queryResult := make([]*dashboards.DashboardACLInfoDTO, 0)
|
||||
outerErr := d.store.WithDbSession(ctx, func(dbSession *db.Session) error {
|
||||
query.Result = make([]*dashboards.DashboardACLInfoDTO, 0)
|
||||
falseStr := d.store.GetDialect().BooleanStr(false)
|
||||
|
||||
if query.DashboardID == 0 {
|
||||
@@ -41,7 +41,7 @@ func (d *DashboardStore) GetDashboardACLInfoList(ctx context.Context, query *das
|
||||
falseStr + ` AS inherited
|
||||
FROM dashboard_acl as da
|
||||
WHERE da.dashboard_id = -1`
|
||||
return dbSession.SQL(sql).Find(&query.Result)
|
||||
return dbSession.SQL(sql).Find(&queryResult)
|
||||
}
|
||||
|
||||
rawSQL := `
|
||||
@@ -83,18 +83,18 @@ func (d *DashboardStore) GetDashboardACLInfoList(ctx context.Context, query *das
|
||||
ORDER BY da.id ASC
|
||||
`
|
||||
|
||||
return dbSession.SQL(rawSQL, query.OrgID, query.DashboardID).Find(&query.Result)
|
||||
return dbSession.SQL(rawSQL, query.OrgID, query.DashboardID).Find(&queryResult)
|
||||
})
|
||||
|
||||
if outerErr != nil {
|
||||
return outerErr
|
||||
return nil, outerErr
|
||||
}
|
||||
|
||||
for _, p := range query.Result {
|
||||
for _, p := range queryResult {
|
||||
p.PermissionName = p.Permission.String()
|
||||
}
|
||||
|
||||
return nil
|
||||
return queryResult, nil
|
||||
}
|
||||
|
||||
// HasEditPermissionInFolders validates that an user have access to a certain folder
|
||||
|
||||
@@ -54,34 +54,34 @@ func TestIntegrationDashboardACLDataAccess(t *testing.T) {
|
||||
setup(t)
|
||||
query := dashboards.GetDashboardACLInfoListQuery{DashboardID: savedFolder.ID, OrgID: 1}
|
||||
|
||||
err := dashboardStore.GetDashboardACLInfoList(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboardACLInfoList(context.Background(), &query)
|
||||
require.Nil(t, err)
|
||||
|
||||
require.Equal(t, 2, len(query.Result))
|
||||
require.Equal(t, 2, len(queryResult))
|
||||
defaultPermissionsId := int64(-1)
|
||||
require.Equal(t, defaultPermissionsId, query.Result[0].DashboardID)
|
||||
require.Equal(t, org.RoleViewer, *query.Result[0].Role)
|
||||
require.False(t, query.Result[0].Inherited)
|
||||
require.Equal(t, defaultPermissionsId, query.Result[1].DashboardID)
|
||||
require.Equal(t, org.RoleEditor, *query.Result[1].Role)
|
||||
require.False(t, query.Result[1].Inherited)
|
||||
require.Equal(t, defaultPermissionsId, queryResult[0].DashboardID)
|
||||
require.Equal(t, org.RoleViewer, *queryResult[0].Role)
|
||||
require.False(t, queryResult[0].Inherited)
|
||||
require.Equal(t, defaultPermissionsId, queryResult[1].DashboardID)
|
||||
require.Equal(t, org.RoleEditor, *queryResult[1].Role)
|
||||
require.False(t, queryResult[1].Inherited)
|
||||
})
|
||||
|
||||
t.Run("Dashboard acl should include acl for parent folder", func(t *testing.T) {
|
||||
setup(t)
|
||||
query := dashboards.GetDashboardACLInfoListQuery{DashboardID: childDash.ID, OrgID: 1}
|
||||
|
||||
err := dashboardStore.GetDashboardACLInfoList(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboardACLInfoList(context.Background(), &query)
|
||||
require.Nil(t, err)
|
||||
|
||||
require.Equal(t, 2, len(query.Result))
|
||||
require.Equal(t, 2, len(queryResult))
|
||||
defaultPermissionsId := int64(-1)
|
||||
require.Equal(t, defaultPermissionsId, query.Result[0].DashboardID)
|
||||
require.Equal(t, org.RoleViewer, *query.Result[0].Role)
|
||||
require.True(t, query.Result[0].Inherited)
|
||||
require.Equal(t, defaultPermissionsId, query.Result[1].DashboardID)
|
||||
require.Equal(t, org.RoleEditor, *query.Result[1].Role)
|
||||
require.True(t, query.Result[1].Inherited)
|
||||
require.Equal(t, defaultPermissionsId, queryResult[0].DashboardID)
|
||||
require.Equal(t, org.RoleViewer, *queryResult[0].Role)
|
||||
require.True(t, queryResult[0].Inherited)
|
||||
require.Equal(t, defaultPermissionsId, queryResult[1].DashboardID)
|
||||
require.Equal(t, org.RoleEditor, *queryResult[1].Role)
|
||||
require.True(t, queryResult[1].Inherited)
|
||||
})
|
||||
|
||||
t.Run("Folder with removed default permissions returns no acl items", func(t *testing.T) {
|
||||
@@ -90,10 +90,10 @@ func TestIntegrationDashboardACLDataAccess(t *testing.T) {
|
||||
require.Nil(t, err)
|
||||
|
||||
query := dashboards.GetDashboardACLInfoListQuery{DashboardID: childDash.ID, OrgID: 1}
|
||||
err = dashboardStore.GetDashboardACLInfoList(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboardACLInfoList(context.Background(), &query)
|
||||
require.Nil(t, err)
|
||||
|
||||
require.Equal(t, 0, len(query.Result))
|
||||
require.Equal(t, 0, len(queryResult))
|
||||
})
|
||||
|
||||
t.Run("Given a dashboard folder and a user", func(t *testing.T) {
|
||||
@@ -110,11 +110,11 @@ func TestIntegrationDashboardACLDataAccess(t *testing.T) {
|
||||
t.Run("When reading dashboard acl should include acl for parent folder", func(t *testing.T) {
|
||||
query := dashboards.GetDashboardACLInfoListQuery{DashboardID: childDash.ID, OrgID: 1}
|
||||
|
||||
err := dashboardStore.GetDashboardACLInfoList(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboardACLInfoList(context.Background(), &query)
|
||||
require.Nil(t, err)
|
||||
|
||||
require.Equal(t, 1, len(query.Result))
|
||||
require.Equal(t, savedFolder.ID, query.Result[0].DashboardID)
|
||||
require.Equal(t, 1, len(queryResult))
|
||||
require.Equal(t, savedFolder.ID, queryResult[0].DashboardID)
|
||||
})
|
||||
|
||||
t.Run("Given child dashboard permission", func(t *testing.T) {
|
||||
@@ -129,14 +129,14 @@ func TestIntegrationDashboardACLDataAccess(t *testing.T) {
|
||||
t.Run("When reading dashboard acl should include acl for parent folder and child", func(t *testing.T) {
|
||||
query := dashboards.GetDashboardACLInfoListQuery{OrgID: 1, DashboardID: childDash.ID}
|
||||
|
||||
err := dashboardStore.GetDashboardACLInfoList(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboardACLInfoList(context.Background(), &query)
|
||||
require.Nil(t, err)
|
||||
|
||||
require.Equal(t, 2, len(query.Result))
|
||||
require.Equal(t, savedFolder.ID, query.Result[0].DashboardID)
|
||||
require.True(t, query.Result[0].Inherited)
|
||||
require.Equal(t, childDash.ID, query.Result[1].DashboardID)
|
||||
require.False(t, query.Result[1].Inherited)
|
||||
require.Equal(t, 2, len(queryResult))
|
||||
require.Equal(t, savedFolder.ID, queryResult[0].DashboardID)
|
||||
require.True(t, queryResult[0].Inherited)
|
||||
require.Equal(t, childDash.ID, queryResult[1].DashboardID)
|
||||
require.False(t, queryResult[1].Inherited)
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -153,19 +153,19 @@ func TestIntegrationDashboardACLDataAccess(t *testing.T) {
|
||||
|
||||
query := dashboards.GetDashboardACLInfoListQuery{OrgID: 1, DashboardID: childDash.ID}
|
||||
|
||||
err = dashboardStore.GetDashboardACLInfoList(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboardACLInfoList(context.Background(), &query)
|
||||
require.Nil(t, err)
|
||||
|
||||
defaultPermissionsId := int64(-1)
|
||||
require.Equal(t, 3, len(query.Result))
|
||||
require.Equal(t, defaultPermissionsId, query.Result[0].DashboardID)
|
||||
require.Equal(t, org.RoleViewer, *query.Result[0].Role)
|
||||
require.True(t, query.Result[0].Inherited)
|
||||
require.Equal(t, defaultPermissionsId, query.Result[1].DashboardID)
|
||||
require.Equal(t, org.RoleEditor, *query.Result[1].Role)
|
||||
require.True(t, query.Result[1].Inherited)
|
||||
require.Equal(t, childDash.ID, query.Result[2].DashboardID)
|
||||
require.False(t, query.Result[2].Inherited)
|
||||
require.Equal(t, 3, len(queryResult))
|
||||
require.Equal(t, defaultPermissionsId, queryResult[0].DashboardID)
|
||||
require.Equal(t, org.RoleViewer, *queryResult[0].Role)
|
||||
require.True(t, queryResult[0].Inherited)
|
||||
require.Equal(t, defaultPermissionsId, queryResult[1].DashboardID)
|
||||
require.Equal(t, org.RoleEditor, *queryResult[1].Role)
|
||||
require.True(t, queryResult[1].Inherited)
|
||||
require.Equal(t, childDash.ID, queryResult[2].DashboardID)
|
||||
require.False(t, queryResult[2].Inherited)
|
||||
})
|
||||
|
||||
t.Run("Add and delete dashboard permission", func(t *testing.T) {
|
||||
@@ -179,23 +179,23 @@ func TestIntegrationDashboardACLDataAccess(t *testing.T) {
|
||||
require.Nil(t, err)
|
||||
|
||||
q1 := &dashboards.GetDashboardACLInfoListQuery{DashboardID: savedFolder.ID, OrgID: 1}
|
||||
err = dashboardStore.GetDashboardACLInfoList(context.Background(), q1)
|
||||
q1Result, err := dashboardStore.GetDashboardACLInfoList(context.Background(), q1)
|
||||
require.Nil(t, err)
|
||||
|
||||
require.Equal(t, savedFolder.ID, q1.Result[0].DashboardID)
|
||||
require.Equal(t, models.PERMISSION_EDIT, q1.Result[0].Permission)
|
||||
require.Equal(t, "Edit", q1.Result[0].PermissionName)
|
||||
require.Equal(t, currentUser.ID, q1.Result[0].UserID)
|
||||
require.Equal(t, currentUser.Login, q1.Result[0].UserLogin)
|
||||
require.Equal(t, currentUser.Email, q1.Result[0].UserEmail)
|
||||
require.Equal(t, savedFolder.ID, q1Result[0].DashboardID)
|
||||
require.Equal(t, models.PERMISSION_EDIT, q1Result[0].Permission)
|
||||
require.Equal(t, "Edit", q1Result[0].PermissionName)
|
||||
require.Equal(t, currentUser.ID, q1Result[0].UserID)
|
||||
require.Equal(t, currentUser.Login, q1Result[0].UserLogin)
|
||||
require.Equal(t, currentUser.Email, q1Result[0].UserEmail)
|
||||
|
||||
err = updateDashboardACL(t, dashboardStore, savedFolder.ID)
|
||||
require.Nil(t, err)
|
||||
|
||||
q3 := &dashboards.GetDashboardACLInfoListQuery{DashboardID: savedFolder.ID, OrgID: 1}
|
||||
err = dashboardStore.GetDashboardACLInfoList(context.Background(), q3)
|
||||
q3Result, err := dashboardStore.GetDashboardACLInfoList(context.Background(), q3)
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, 0, len(q3.Result))
|
||||
require.Equal(t, 0, len(q3Result))
|
||||
})
|
||||
|
||||
t.Run("Should be able to add a user permission for a team", func(t *testing.T) {
|
||||
@@ -213,11 +213,11 @@ func TestIntegrationDashboardACLDataAccess(t *testing.T) {
|
||||
require.Nil(t, err)
|
||||
|
||||
q1 := &dashboards.GetDashboardACLInfoListQuery{DashboardID: savedFolder.ID, OrgID: 1}
|
||||
err = dashboardStore.GetDashboardACLInfoList(context.Background(), q1)
|
||||
q1Result, err := dashboardStore.GetDashboardACLInfoList(context.Background(), q1)
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, savedFolder.ID, q1.Result[0].DashboardID)
|
||||
require.Equal(t, models.PERMISSION_EDIT, q1.Result[0].Permission)
|
||||
require.Equal(t, team1.ID, q1.Result[0].TeamID)
|
||||
require.Equal(t, savedFolder.ID, q1Result[0].DashboardID)
|
||||
require.Equal(t, models.PERMISSION_EDIT, q1Result[0].Permission)
|
||||
require.Equal(t, team1.ID, q1Result[0].TeamID)
|
||||
})
|
||||
|
||||
t.Run("Should be able to update an existing permission for a team", func(t *testing.T) {
|
||||
@@ -234,12 +234,12 @@ func TestIntegrationDashboardACLDataAccess(t *testing.T) {
|
||||
require.Nil(t, err)
|
||||
|
||||
q3 := &dashboards.GetDashboardACLInfoListQuery{DashboardID: savedFolder.ID, OrgID: 1}
|
||||
err = dashboardStore.GetDashboardACLInfoList(context.Background(), q3)
|
||||
q3Result, err := dashboardStore.GetDashboardACLInfoList(context.Background(), q3)
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, 1, len(q3.Result))
|
||||
require.Equal(t, savedFolder.ID, q3.Result[0].DashboardID)
|
||||
require.Equal(t, models.PERMISSION_ADMIN, q3.Result[0].Permission)
|
||||
require.Equal(t, team1.ID, q3.Result[0].TeamID)
|
||||
require.Equal(t, 1, len(q3Result))
|
||||
require.Equal(t, savedFolder.ID, q3Result[0].DashboardID)
|
||||
require.Equal(t, models.PERMISSION_ADMIN, q3Result[0].Permission)
|
||||
require.Equal(t, team1.ID, q3Result[0].TeamID)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -250,17 +250,17 @@ func TestIntegrationDashboardACLDataAccess(t *testing.T) {
|
||||
|
||||
query := dashboards.GetDashboardACLInfoListQuery{DashboardID: rootFolderId, OrgID: 1}
|
||||
|
||||
err := dashboardStore.GetDashboardACLInfoList(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboardACLInfoList(context.Background(), &query)
|
||||
require.Nil(t, err)
|
||||
|
||||
require.Equal(t, 2, len(query.Result))
|
||||
require.Equal(t, 2, len(queryResult))
|
||||
defaultPermissionsId := int64(-1)
|
||||
require.Equal(t, defaultPermissionsId, query.Result[0].DashboardID)
|
||||
require.Equal(t, org.RoleViewer, *query.Result[0].Role)
|
||||
require.False(t, query.Result[0].Inherited)
|
||||
require.Equal(t, defaultPermissionsId, query.Result[1].DashboardID)
|
||||
require.Equal(t, org.RoleEditor, *query.Result[1].Role)
|
||||
require.False(t, query.Result[1].Inherited)
|
||||
require.Equal(t, defaultPermissionsId, queryResult[0].DashboardID)
|
||||
require.Equal(t, org.RoleViewer, *queryResult[0].Role)
|
||||
require.False(t, queryResult[0].Inherited)
|
||||
require.Equal(t, defaultPermissionsId, queryResult[1].DashboardID)
|
||||
require.Equal(t, org.RoleEditor, *queryResult[1].Role)
|
||||
require.False(t, queryResult[1].Inherited)
|
||||
})
|
||||
|
||||
t.Run("Delete acl by user", func(t *testing.T) {
|
||||
|
||||
@@ -206,26 +206,37 @@ func (d *DashboardStore) GetProvisionedDashboardData(ctx context.Context, name s
|
||||
}
|
||||
|
||||
func (d *DashboardStore) SaveProvisionedDashboard(ctx context.Context, cmd dashboards.SaveDashboardCommand, provisioning *dashboards.DashboardProvisioning) (*dashboards.Dashboard, error) {
|
||||
err := d.store.WithTransactionalDbSession(ctx, func(sess *db.Session) error {
|
||||
if err := saveDashboard(sess, &cmd, d.emitEntityEvent()); err != nil {
|
||||
var result *dashboards.Dashboard
|
||||
var err error
|
||||
err = d.store.WithTransactionalDbSession(ctx, func(sess *db.Session) error {
|
||||
result, err = saveDashboard(sess, &cmd, d.emitEntityEvent())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if provisioning.Updated == 0 {
|
||||
provisioning.Updated = cmd.Result.Updated.Unix()
|
||||
provisioning.Updated = result.Updated.Unix()
|
||||
}
|
||||
|
||||
return saveProvisionedData(sess, provisioning, cmd.Result)
|
||||
return saveProvisionedData(sess, provisioning, result)
|
||||
})
|
||||
|
||||
return cmd.Result, err
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (d *DashboardStore) SaveDashboard(ctx context.Context, cmd dashboards.SaveDashboardCommand) (*dashboards.Dashboard, error) {
|
||||
err := d.store.WithTransactionalDbSession(ctx, func(sess *db.Session) error {
|
||||
return saveDashboard(sess, &cmd, d.emitEntityEvent())
|
||||
var result *dashboards.Dashboard
|
||||
var err error
|
||||
err = d.store.WithTransactionalDbSession(ctx, func(sess *db.Session) error {
|
||||
result, err = saveDashboard(sess, &cmd, d.emitEntityEvent())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return cmd.Result, err
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (d *DashboardStore) UpdateDashboardACL(ctx context.Context, dashboardID int64, items []*dashboards.DashboardACL) error {
|
||||
@@ -476,7 +487,7 @@ func getExistingDashboardByTitleAndFolder(sess *db.Session, dash *dashboards.Das
|
||||
return isParentFolderChanged, nil
|
||||
}
|
||||
|
||||
func saveDashboard(sess *db.Session, cmd *dashboards.SaveDashboardCommand, emitEntityEvent bool) error {
|
||||
func saveDashboard(sess *db.Session, cmd *dashboards.SaveDashboardCommand, emitEntityEvent bool) (*dashboards.Dashboard, error) {
|
||||
dash := cmd.GetDashboardModel()
|
||||
|
||||
userId := cmd.UserID
|
||||
@@ -489,10 +500,10 @@ func saveDashboard(sess *db.Session, cmd *dashboards.SaveDashboardCommand, emitE
|
||||
var existing dashboards.Dashboard
|
||||
dashWithIdExists, err := sess.Where("id=? AND org_id=?", dash.ID, dash.OrgID).Get(&existing)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
if !dashWithIdExists {
|
||||
return dashboards.ErrDashboardNotFound
|
||||
return nil, dashboards.ErrDashboardNotFound
|
||||
}
|
||||
|
||||
// check for is someone else has written in between
|
||||
@@ -500,20 +511,20 @@ func saveDashboard(sess *db.Session, cmd *dashboards.SaveDashboardCommand, emitE
|
||||
if cmd.Overwrite {
|
||||
dash.SetVersion(existing.Version)
|
||||
} else {
|
||||
return dashboards.ErrDashboardVersionMismatch
|
||||
return nil, dashboards.ErrDashboardVersionMismatch
|
||||
}
|
||||
}
|
||||
|
||||
// do not allow plugin dashboard updates without overwrite flag
|
||||
if existing.PluginID != "" && !cmd.Overwrite {
|
||||
return dashboards.UpdatePluginDashboardError{PluginId: existing.PluginID}
|
||||
return nil, dashboards.UpdatePluginDashboardError{PluginId: existing.PluginID}
|
||||
}
|
||||
}
|
||||
|
||||
if dash.UID == "" {
|
||||
uid, err := generateNewDashboardUid(sess, dash.OrgID)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
dash.SetUID(uid)
|
||||
}
|
||||
@@ -545,11 +556,11 @@ func saveDashboard(sess *db.Session, cmd *dashboards.SaveDashboardCommand, emitE
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if affectedRows == 0 {
|
||||
return dashboards.ErrDashboardNotFound
|
||||
return nil, dashboards.ErrDashboardNotFound
|
||||
}
|
||||
|
||||
dashVersion := &dashver.DashboardVersion{
|
||||
@@ -565,14 +576,14 @@ func saveDashboard(sess *db.Session, cmd *dashboards.SaveDashboardCommand, emitE
|
||||
|
||||
// insert version entry
|
||||
if affectedRows, err = sess.Insert(dashVersion); err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
} else if affectedRows == 0 {
|
||||
return dashboards.ErrDashboardNotFound
|
||||
return nil, dashboards.ErrDashboardNotFound
|
||||
}
|
||||
|
||||
// delete existing tags
|
||||
if _, err = sess.Exec("DELETE FROM dashboard_tag WHERE dashboard_id=?", dash.ID); err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// insert new tags
|
||||
@@ -580,20 +591,18 @@ func saveDashboard(sess *db.Session, cmd *dashboards.SaveDashboardCommand, emitE
|
||||
if len(tags) > 0 {
|
||||
for _, tag := range tags {
|
||||
if _, err := sess.Insert(DashboardTag{DashboardId: dash.ID, Term: tag}); err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cmd.Result = dash
|
||||
|
||||
if emitEntityEvent {
|
||||
_, err := sess.Insert(createEntityEvent(dash, store.EntityEventTypeUpdate))
|
||||
if err != nil {
|
||||
return err
|
||||
return dash, err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
return dash, nil
|
||||
}
|
||||
|
||||
func generateNewDashboardUid(sess *db.Session, orgId int64) (string, error) {
|
||||
@@ -750,15 +759,18 @@ func (d *DashboardStore) deleteAlertByIdInternal(alertId int64, reason string, s
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *DashboardStore) GetDashboardsByPluginID(ctx context.Context, query *dashboards.GetDashboardsByPluginIDQuery) error {
|
||||
return d.store.WithDbSession(ctx, func(dbSession *db.Session) error {
|
||||
var dashboards = make([]*dashboards.Dashboard, 0)
|
||||
func (d *DashboardStore) GetDashboardsByPluginID(ctx context.Context, query *dashboards.GetDashboardsByPluginIDQuery) ([]*dashboards.Dashboard, error) {
|
||||
var dashboards = make([]*dashboards.Dashboard, 0)
|
||||
err := d.store.WithDbSession(ctx, func(dbSession *db.Session) error {
|
||||
whereExpr := "org_id=? AND plugin_id=? AND is_folder=" + d.store.GetDialect().BooleanStr(false)
|
||||
|
||||
err := dbSession.Where(whereExpr, query.OrgID, query.PluginID).Find(&dashboards)
|
||||
query.Result = dashboards
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dashboards, nil
|
||||
}
|
||||
|
||||
func (d *DashboardStore) DeleteDashboard(ctx context.Context, cmd *dashboards.DeleteDashboardCommand) error {
|
||||
@@ -924,6 +936,7 @@ func (d *DashboardStore) deleteAlertDefinition(dashboardId int64, sess *db.Sessi
|
||||
}
|
||||
|
||||
func (d *DashboardStore) GetDashboard(ctx context.Context, query *dashboards.GetDashboardQuery) (*dashboards.Dashboard, error) {
|
||||
var queryResult *dashboards.Dashboard
|
||||
err := d.store.WithDbSession(ctx, func(sess *db.Session) error {
|
||||
if query.ID == 0 && len(query.Slug) == 0 && len(query.UID) == 0 {
|
||||
return dashboards.ErrDashboardIdentifierNotSet
|
||||
@@ -940,35 +953,37 @@ func (d *DashboardStore) GetDashboard(ctx context.Context, query *dashboards.Get
|
||||
|
||||
dashboard.SetID(dashboard.ID)
|
||||
dashboard.SetUID(dashboard.UID)
|
||||
query.Result = &dashboard
|
||||
queryResult = &dashboard
|
||||
return nil
|
||||
})
|
||||
|
||||
return query.Result, err
|
||||
return queryResult, err
|
||||
}
|
||||
|
||||
func (d *DashboardStore) GetDashboardUIDByID(ctx context.Context, query *dashboards.GetDashboardRefByIDQuery) error {
|
||||
return d.store.WithDbSession(ctx, func(sess *db.Session) error {
|
||||
func (d *DashboardStore) GetDashboardUIDByID(ctx context.Context, query *dashboards.GetDashboardRefByIDQuery) (*dashboards.DashboardRef, error) {
|
||||
us := &dashboards.DashboardRef{}
|
||||
err := d.store.WithDbSession(ctx, func(sess *db.Session) error {
|
||||
var rawSQL = `SELECT uid, slug from dashboard WHERE Id=?`
|
||||
us := &dashboards.DashboardRef{}
|
||||
exists, err := sess.SQL(rawSQL, query.ID).Get(us)
|
||||
if err != nil {
|
||||
return err
|
||||
} else if !exists {
|
||||
return dashboards.ErrDashboardNotFound
|
||||
}
|
||||
query.Result = us
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return us, nil
|
||||
}
|
||||
|
||||
func (d *DashboardStore) GetDashboards(ctx context.Context, query *dashboards.GetDashboardsQuery) error {
|
||||
return d.store.WithDbSession(ctx, func(sess *db.Session) error {
|
||||
func (d *DashboardStore) GetDashboards(ctx context.Context, query *dashboards.GetDashboardsQuery) ([]*dashboards.Dashboard, error) {
|
||||
var dashboards = make([]*dashboards.Dashboard, 0)
|
||||
err := d.store.WithDbSession(ctx, func(sess *db.Session) error {
|
||||
if len(query.DashboardIDs) == 0 && len(query.DashboardUIDs) == 0 {
|
||||
return star.ErrCommandValidationFailed
|
||||
}
|
||||
|
||||
var dashboards = make([]*dashboards.Dashboard, 0)
|
||||
var session *xorm.Session
|
||||
if len(query.DashboardIDs) > 0 {
|
||||
session = sess.In("id", query.DashboardIDs)
|
||||
@@ -980,9 +995,12 @@ func (d *DashboardStore) GetDashboards(ctx context.Context, query *dashboards.Ge
|
||||
}
|
||||
|
||||
err := session.Find(&dashboards)
|
||||
query.Result = dashboards
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dashboards, nil
|
||||
}
|
||||
|
||||
func (d *DashboardStore) FindDashboards(ctx context.Context, query *models.FindPersistedDashboardsQuery) ([]dashboards.DashboardSearchProjection, error) {
|
||||
@@ -1067,8 +1085,9 @@ func (d *DashboardStore) FindDashboards(ctx context.Context, query *models.FindP
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (d *DashboardStore) GetDashboardTags(ctx context.Context, query *dashboards.GetDashboardTagsQuery) error {
|
||||
return d.store.WithDbSession(ctx, func(dbSession *db.Session) error {
|
||||
func (d *DashboardStore) GetDashboardTags(ctx context.Context, query *dashboards.GetDashboardTagsQuery) ([]*dashboards.DashboardTagCloudItem, error) {
|
||||
queryResult := make([]*dashboards.DashboardTagCloudItem, 0)
|
||||
err := d.store.WithDbSession(ctx, func(dbSession *db.Session) error {
|
||||
sql := `SELECT
|
||||
COUNT(*) as count,
|
||||
term
|
||||
@@ -1078,11 +1097,14 @@ func (d *DashboardStore) GetDashboardTags(ctx context.Context, query *dashboards
|
||||
GROUP BY term
|
||||
ORDER BY term`
|
||||
|
||||
query.Result = make([]*dashboards.DashboardTagCloudItem, 0)
|
||||
sess := dbSession.SQL(sql, query.OrgID)
|
||||
err := sess.Find(&query.Result)
|
||||
err := sess.Find(&queryResult)
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return queryResult, nil
|
||||
}
|
||||
|
||||
// CountDashboardsInFolder returns a count of all dashboards associated with the
|
||||
|
||||
@@ -81,19 +81,19 @@ func TestIntegrationDashboardProvisioningTest(t *testing.T) {
|
||||
require.Nil(t, err)
|
||||
|
||||
query := &dashboards.GetDashboardsQuery{DashboardIDs: []int64{anotherDash.ID}}
|
||||
err = dashboardStore.GetDashboards(context.Background(), query)
|
||||
queryResult, err := dashboardStore.GetDashboards(context.Background(), query)
|
||||
require.Nil(t, err)
|
||||
require.NotNil(t, query.Result)
|
||||
require.NotNil(t, queryResult)
|
||||
|
||||
deleteCmd := &dashboards.DeleteOrphanedProvisionedDashboardsCommand{ReaderNames: []string{"default"}}
|
||||
require.Nil(t, dashboardStore.DeleteOrphanedProvisionedDashboards(context.Background(), deleteCmd))
|
||||
|
||||
query = &dashboards.GetDashboardsQuery{DashboardIDs: []int64{dash.ID, anotherDash.ID}}
|
||||
err = dashboardStore.GetDashboards(context.Background(), query)
|
||||
queryResult, err = dashboardStore.GetDashboards(context.Background(), query)
|
||||
require.Nil(t, err)
|
||||
|
||||
require.Equal(t, 1, len(query.Result))
|
||||
require.Equal(t, dashId, query.Result[0].ID)
|
||||
require.Equal(t, 1, len(queryResult))
|
||||
require.Equal(t, dashId, queryResult[0].ID)
|
||||
})
|
||||
|
||||
t.Run("Can query for provisioned dashboards", func(t *testing.T) {
|
||||
|
||||
@@ -80,14 +80,14 @@ func TestIntegrationDashboardDataAccess(t *testing.T) {
|
||||
OrgID: 1,
|
||||
}
|
||||
|
||||
_, err := dashboardStore.GetDashboard(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboard(context.Background(), &query)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, query.Result.Title, "test dash 23")
|
||||
require.Equal(t, query.Result.Slug, "test-dash-23")
|
||||
require.Equal(t, query.Result.ID, savedDash.ID)
|
||||
require.Equal(t, query.Result.UID, savedDash.UID)
|
||||
require.False(t, query.Result.IsFolder)
|
||||
require.Equal(t, queryResult.Title, "test dash 23")
|
||||
require.Equal(t, queryResult.Slug, "test-dash-23")
|
||||
require.Equal(t, queryResult.ID, savedDash.ID)
|
||||
require.Equal(t, queryResult.UID, savedDash.UID)
|
||||
require.False(t, queryResult.IsFolder)
|
||||
})
|
||||
|
||||
t.Run("Should be able to get dashboard by slug", func(t *testing.T) {
|
||||
@@ -97,14 +97,14 @@ func TestIntegrationDashboardDataAccess(t *testing.T) {
|
||||
OrgID: 1,
|
||||
}
|
||||
|
||||
_, err := dashboardStore.GetDashboard(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboard(context.Background(), &query)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, query.Result.Title, "test dash 23")
|
||||
require.Equal(t, query.Result.Slug, "test-dash-23")
|
||||
require.Equal(t, query.Result.ID, savedDash.ID)
|
||||
require.Equal(t, query.Result.UID, savedDash.UID)
|
||||
require.False(t, query.Result.IsFolder)
|
||||
require.Equal(t, queryResult.Title, "test dash 23")
|
||||
require.Equal(t, queryResult.Slug, "test-dash-23")
|
||||
require.Equal(t, queryResult.ID, savedDash.ID)
|
||||
require.Equal(t, queryResult.UID, savedDash.UID)
|
||||
require.False(t, queryResult.IsFolder)
|
||||
})
|
||||
|
||||
t.Run("Should be able to get dashboard by uid", func(t *testing.T) {
|
||||
@@ -114,22 +114,22 @@ func TestIntegrationDashboardDataAccess(t *testing.T) {
|
||||
OrgID: 1,
|
||||
}
|
||||
|
||||
_, err := dashboardStore.GetDashboard(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboard(context.Background(), &query)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, query.Result.Title, "test dash 23")
|
||||
require.Equal(t, query.Result.Slug, "test-dash-23")
|
||||
require.Equal(t, query.Result.ID, savedDash.ID)
|
||||
require.Equal(t, query.Result.UID, savedDash.UID)
|
||||
require.False(t, query.Result.IsFolder)
|
||||
require.Equal(t, queryResult.Title, "test dash 23")
|
||||
require.Equal(t, queryResult.Slug, "test-dash-23")
|
||||
require.Equal(t, queryResult.ID, savedDash.ID)
|
||||
require.Equal(t, queryResult.UID, savedDash.UID)
|
||||
require.False(t, queryResult.IsFolder)
|
||||
})
|
||||
|
||||
t.Run("Should be able to get a dashboard UID by ID", func(t *testing.T) {
|
||||
setup()
|
||||
query := dashboards.GetDashboardRefByIDQuery{ID: savedDash.ID}
|
||||
err := dashboardStore.GetDashboardUIDByID(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboardUIDByID(context.Background(), &query)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, query.Result.UID, savedDash.UID)
|
||||
require.Equal(t, queryResult.UID, savedDash.UID)
|
||||
})
|
||||
|
||||
t.Run("Shouldn't be able to get a dashboard with just an OrgID", func(t *testing.T) {
|
||||
@@ -145,14 +145,14 @@ func TestIntegrationDashboardDataAccess(t *testing.T) {
|
||||
t.Run("Should be able to get dashboards by IDs & UIDs", func(t *testing.T) {
|
||||
setup()
|
||||
query := dashboards.GetDashboardsQuery{DashboardIDs: []int64{savedDash.ID, savedDash2.ID}}
|
||||
err := dashboardStore.GetDashboards(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboards(context.Background(), &query)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, len(query.Result), 2)
|
||||
assert.Equal(t, len(queryResult), 2)
|
||||
|
||||
query = dashboards.GetDashboardsQuery{DashboardUIDs: []string{savedDash.UID, savedDash2.UID}}
|
||||
err = dashboardStore.GetDashboards(context.Background(), &query)
|
||||
queryResult, err = dashboardStore.GetDashboards(context.Background(), &query)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, len(query.Result), 2)
|
||||
assert.Equal(t, len(queryResult), 2)
|
||||
})
|
||||
|
||||
t.Run("Should be able to delete dashboard", func(t *testing.T) {
|
||||
@@ -220,13 +220,13 @@ func TestIntegrationDashboardDataAccess(t *testing.T) {
|
||||
OrgID: 1,
|
||||
}
|
||||
|
||||
_, err = dashboardStore.GetDashboard(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboard(context.Background(), &query)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, query.Result.FolderID, int64(0))
|
||||
require.Equal(t, query.Result.CreatedBy, savedDash.CreatedBy)
|
||||
require.WithinDuration(t, query.Result.Created, savedDash.Created, 3*time.Second)
|
||||
require.Equal(t, query.Result.UpdatedBy, int64(100))
|
||||
require.False(t, query.Result.Updated.IsZero())
|
||||
require.Equal(t, queryResult.FolderID, int64(0))
|
||||
require.Equal(t, queryResult.CreatedBy, savedDash.CreatedBy)
|
||||
require.WithinDuration(t, queryResult.Created, savedDash.Created, 3*time.Second)
|
||||
require.Equal(t, queryResult.UpdatedBy, int64(100))
|
||||
require.False(t, queryResult.Updated.IsZero())
|
||||
})
|
||||
|
||||
t.Run("Should be able to delete empty folder", func(t *testing.T) {
|
||||
@@ -308,9 +308,9 @@ func TestIntegrationDashboardDataAccess(t *testing.T) {
|
||||
query := dashboards.GetDashboardsQuery{
|
||||
DashboardIDs: []int64{savedFolder.ID, savedDash.ID},
|
||||
}
|
||||
err = dashboardStore.GetDashboards(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboards(context.Background(), &query)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, len(query.Result), 0)
|
||||
require.Equal(t, len(queryResult), 0)
|
||||
|
||||
pubdashConfig, err = publicDashboardStore.FindByAccessToken(context.Background(), "an-access-token")
|
||||
require.Nil(t, err)
|
||||
@@ -382,10 +382,10 @@ func TestIntegrationDashboardDataAccess(t *testing.T) {
|
||||
setup()
|
||||
query := dashboards.GetDashboardTagsQuery{OrgID: 1}
|
||||
|
||||
err := dashboardStore.GetDashboardTags(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboardTags(context.Background(), &query)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, len(query.Result), 2)
|
||||
require.Equal(t, len(queryResult), 2)
|
||||
})
|
||||
|
||||
t.Run("Should be able to find dashboard folder", func(t *testing.T) {
|
||||
@@ -603,9 +603,9 @@ func TestIntegrationDashboardDataAccessGivenPluginWithImportedDashboards(t *test
|
||||
OrgID: 1,
|
||||
}
|
||||
|
||||
err = dashboardStore.GetDashboardsByPluginID(context.Background(), &query)
|
||||
queryResult, err := dashboardStore.GetDashboardsByPluginID(context.Background(), &query)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, len(query.Result), 2)
|
||||
require.Equal(t, len(queryResult), 2)
|
||||
}
|
||||
|
||||
func TestIntegrationDashboard_SortingOptions(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user