Dashboard Provisioning: Add duplicate cleanup for modes 0-2 (#113336)
This commit is contained in:
@@ -209,7 +209,7 @@ func (d *dashboardStore) GetProvisionedDataByDashboardID(ctx context.Context, da
|
||||
return sess.Table(`dashboard`).
|
||||
Join(`INNER`, `dashboard_provisioning`, `dashboard.id = dashboard_provisioning.dashboard_id`).
|
||||
Where(`dashboard_provisioning.dashboard_id = ?`, dashboardID).
|
||||
Select("dashboard.*, dashboard_provisioning.name, dashboard_provisioning.external_id, dashboard_provisioning.updated as provisioning_updated, dashboard_provisioning.check_sum").
|
||||
Select("dashboard.id, dashboard.uid, dashboard.title, dashboard.folder_uid, dashboard.org_id, dashboard_provisioning.name, dashboard_provisioning.external_id, dashboard_provisioning.updated as provisioning_updated, dashboard_provisioning.check_sum").
|
||||
Find(&data)
|
||||
})
|
||||
if err != nil {
|
||||
@@ -241,7 +241,7 @@ func (d *dashboardStore) GetProvisionedDataByDashboardUID(ctx context.Context, o
|
||||
return sess.Table(`dashboard`).
|
||||
Join(`INNER`, `dashboard_provisioning`, `dashboard.id = dashboard_provisioning.dashboard_id`).
|
||||
Where(`dashboard_provisioning.dashboard_id = ?`, dashboard.ID).
|
||||
Select("dashboard.*, dashboard_provisioning.name, dashboard_provisioning.external_id, dashboard_provisioning.updated as provisioning_updated, dashboard_provisioning.check_sum").
|
||||
Select("dashboard.id, dashboard.uid, dashboard.title, dashboard.folder_uid, dashboard.org_id, dashboard_provisioning.name, dashboard_provisioning.external_id, dashboard_provisioning.updated as provisioning_updated, dashboard_provisioning.check_sum").
|
||||
Find(&provisionedDashboard)
|
||||
})
|
||||
if err != nil {
|
||||
@@ -275,7 +275,7 @@ func (d *dashboardStore) GetProvisionedDashboardsByName(ctx context.Context, nam
|
||||
return sess.Table(`dashboard`).
|
||||
Join(`INNER`, `dashboard_provisioning`, `dashboard.id = dashboard_provisioning.dashboard_id`).
|
||||
Where(`dashboard_provisioning.name = ? AND dashboard.org_id = ?`, name, orgID).
|
||||
Select("dashboard.*, dashboard_provisioning.name, dashboard_provisioning.external_id, dashboard_provisioning.updated as provisioning_updated, dashboard_provisioning.check_sum").
|
||||
Select("dashboard.id, dashboard.uid, dashboard.title, dashboard.folder_uid, dashboard.org_id, dashboard_provisioning.name, dashboard_provisioning.external_id, dashboard_provisioning.updated as provisioning_updated, dashboard_provisioning.check_sum").
|
||||
Find(&dashes)
|
||||
})
|
||||
if err != nil {
|
||||
@@ -301,6 +301,56 @@ func (d *dashboardStore) GetOrphanedProvisionedDashboards(ctx context.Context, n
|
||||
return dashes, nil
|
||||
}
|
||||
|
||||
func (d *dashboardStore) GetDuplicateProvisionedDashboards(ctx context.Context) ([]*dashboards.DashboardProvisioningSearchResults, error) {
|
||||
ctx, span := tracer.Start(ctx, "dashboards.database.GetDuplicateProvisionedDashboards")
|
||||
defer span.End()
|
||||
|
||||
dashes := []*dashboards.DashboardProvisioningSearchResults{}
|
||||
err := d.store.WithDbSession(ctx, func(sess *db.Session) error {
|
||||
type duplicateGroup struct {
|
||||
Name string `xorm:"name"`
|
||||
ExternalID string `xorm:"external_id"`
|
||||
CheckSum string `xorm:"check_sum"`
|
||||
}
|
||||
|
||||
duplicateGroups := []duplicateGroup{}
|
||||
err := sess.SQL(`
|
||||
SELECT dp.name, dp.external_id
|
||||
FROM dashboard_provisioning dp
|
||||
INNER JOIN dashboard d ON d.id = dp.dashboard_id
|
||||
GROUP BY dp.name, dp.external_id, dp.check_sum
|
||||
HAVING COUNT(*) > 1
|
||||
`).Find(&duplicateGroups)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(duplicateGroups) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, group := range duplicateGroups {
|
||||
var groupDashes []*dashboards.DashboardProvisioningSearchResults
|
||||
err := sess.Table(`dashboard`).
|
||||
Join(`INNER`, `dashboard_provisioning`, `dashboard.id = dashboard_provisioning.dashboard_id`).
|
||||
Where(`dashboard_provisioning.name = ? AND dashboard_provisioning.external_id = ?`, group.Name, group.ExternalID).
|
||||
Find(&groupDashes)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
dashes = append(dashes, groupDashes...)
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dashes, nil
|
||||
}
|
||||
|
||||
func (d *dashboardStore) SaveProvisionedDashboard(ctx context.Context, cmd dashboards.SaveDashboardCommand, provisioning *dashboards.DashboardProvisioning) (*dashboards.Dashboard, error) {
|
||||
ctx, span := tracer.Start(ctx, "dashboards.database.SaveProvisionedDashboard")
|
||||
defer span.End()
|
||||
|
||||
Reference in New Issue
Block a user