mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
84 lines
2.2 KiB
Go
84 lines
2.2 KiB
Go
package ualert
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"time"
|
|
|
|
"xorm.io/xorm"
|
|
|
|
"github.com/grafana/grafana/pkg/services/sqlstore/migrator"
|
|
)
|
|
|
|
// stateKey is a vendored migrationStore.stateKey.
|
|
var stateKey = "stateKey"
|
|
|
|
// CreatedFoldersMigration moves the record of created folders during legacy migration from Dashboard created_by=-8
|
|
// to the kvstore. If there are no dashboards with created_by=-.8, then nothing needs to be done.
|
|
func CreatedFoldersMigration(mg *migrator.Migrator) {
|
|
mg.AddMigration("migrate record of created folders during legacy migration to kvstore", &createdFoldersToKVStore{})
|
|
}
|
|
|
|
type createdFoldersToKVStore struct {
|
|
migrator.MigrationBase
|
|
}
|
|
|
|
func (c createdFoldersToKVStore) SQL(migrator.Dialect) string {
|
|
return codeMigration
|
|
}
|
|
|
|
func (c createdFoldersToKVStore) Exec(sess *xorm.Session, mg *migrator.Migrator) error {
|
|
var results []struct {
|
|
UID string `xorm:"uid"`
|
|
OrgID int64 `xorm:"org_id"`
|
|
}
|
|
folderCreatedBy := -8
|
|
if err := sess.SQL("select * from dashboard where created_by = ?", folderCreatedBy).Find(&results); err != nil {
|
|
return err
|
|
}
|
|
|
|
if len(results) == 0 {
|
|
mg.Logger.Debug("no dashboards with created_by=-8, nothing to set in kvstore")
|
|
return nil
|
|
}
|
|
|
|
type orgMigrationState struct {
|
|
OrgID int64 `json:"orgId"`
|
|
CreatedFolders []string `json:"createdFolders"`
|
|
}
|
|
states := make(map[int64]*orgMigrationState)
|
|
for _, r := range results {
|
|
if _, ok := states[r.OrgID]; !ok {
|
|
states[r.OrgID] = &orgMigrationState{
|
|
OrgID: r.OrgID,
|
|
CreatedFolders: []string{},
|
|
}
|
|
}
|
|
states[r.OrgID].CreatedFolders = append(states[r.OrgID].CreatedFolders, r.UID)
|
|
}
|
|
|
|
now := time.Now()
|
|
for _, state := range states {
|
|
raw, err := json.Marshal(state)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
orgId := state.OrgID
|
|
entry := kvStoreV1Entry{
|
|
OrgID: &orgId,
|
|
Namespace: &KVNamespace,
|
|
Key: &stateKey,
|
|
Value: string(raw),
|
|
Created: now,
|
|
Updated: now,
|
|
}
|
|
if _, errCreate := sess.Table("kv_store").Insert(&entry); errCreate != nil {
|
|
mg.Logger.Error("failed to insert record of created folders to kvstore", "err", errCreate)
|
|
return fmt.Errorf("failed to insert record of created folders to kvstore: %w", errCreate)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|