mirror of https://github.com/grafana/grafana.git
Nested Folders: Add back syncing of folders between folder and dashboard tbls (#80972)
Add back syncing of folders between folder and dashboard tbls
This partially reverts commit 06d2ae3ada.
This commit is contained in:
parent
4243079cb5
commit
07aa173939
|
|
@ -23,6 +23,8 @@ import (
|
|||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||
"github.com/grafana/grafana/pkg/services/folder"
|
||||
"github.com/grafana/grafana/pkg/services/guardian"
|
||||
"github.com/grafana/grafana/pkg/services/sqlstore"
|
||||
"github.com/grafana/grafana/pkg/services/sqlstore/migrator"
|
||||
"github.com/grafana/grafana/pkg/services/store/entity"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
"github.com/grafana/grafana/pkg/util"
|
||||
|
|
@ -70,6 +72,7 @@ func ProvideService(
|
|||
registry: make(map[string]folder.RegistryService),
|
||||
metrics: newFoldersMetrics(r),
|
||||
}
|
||||
srv.DBMigration(db)
|
||||
|
||||
ac.RegisterScopeAttributeResolver(dashboards.NewFolderNameScopeResolver(folderStore, srv))
|
||||
ac.RegisterScopeAttributeResolver(dashboards.NewFolderIDScopeResolver(folderStore, srv))
|
||||
|
|
@ -77,6 +80,47 @@ func ProvideService(
|
|||
return srv
|
||||
}
|
||||
|
||||
func (s *Service) DBMigration(db db.DB) {
|
||||
s.log.Debug("syncing dashboard and folder tables started")
|
||||
|
||||
ctx := context.Background()
|
||||
err := db.WithDbSession(ctx, func(sess *sqlstore.DBSession) error {
|
||||
var err error
|
||||
if db.GetDialect().DriverName() == migrator.SQLite {
|
||||
_, err = sess.Exec(`
|
||||
INSERT INTO folder (uid, org_id, title, created, updated)
|
||||
SELECT uid, org_id, title, created, updated FROM dashboard WHERE is_folder = 1
|
||||
ON CONFLICT DO UPDATE SET title=excluded.title, updated=excluded.updated
|
||||
`)
|
||||
} else if db.GetDialect().DriverName() == migrator.Postgres {
|
||||
_, err = sess.Exec(`
|
||||
INSERT INTO folder (uid, org_id, title, created, updated)
|
||||
SELECT uid, org_id, title, created, updated FROM dashboard WHERE is_folder = true
|
||||
ON CONFLICT(uid, org_id) DO UPDATE SET title=excluded.title, updated=excluded.updated
|
||||
`)
|
||||
} else {
|
||||
_, err = sess.Exec(`
|
||||
INSERT INTO folder (uid, org_id, title, created, updated)
|
||||
SELECT * FROM (SELECT uid, org_id, title, created, updated FROM dashboard WHERE is_folder = 1) AS derived
|
||||
ON DUPLICATE KEY UPDATE title=derived.title, updated=derived.updated
|
||||
`)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = sess.Exec(`
|
||||
DELETE FROM folder WHERE NOT EXISTS
|
||||
(SELECT 1 FROM dashboard WHERE dashboard.uid = folder.uid AND dashboard.org_id = folder.org_id AND dashboard.is_folder = true)
|
||||
`)
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
s.log.Error("DB migration on folder service start failed.", "err", err)
|
||||
}
|
||||
|
||||
s.log.Debug("syncing dashboard and folder tables finished")
|
||||
}
|
||||
|
||||
func (s *Service) Get(ctx context.Context, q *folder.GetFolderQuery) (*folder.Folder, error) {
|
||||
if q.SignedInUser == nil {
|
||||
return nil, folder.ErrBadRequest.Errorf("missing signed in user")
|
||||
|
|
|
|||
Loading…
Reference in New Issue