|
|
|
@ -1,7 +1,6 @@ |
|
|
|
|
package sqlstore |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"math" |
|
|
|
|
"strings" |
|
|
|
|
|
|
|
|
|
"github.com/grafana/grafana/pkg/bus" |
|
|
|
@ -66,37 +65,39 @@ func GetDashboardVersions(query *m.GetDashboardVersionsQuery) error { |
|
|
|
|
|
|
|
|
|
func DeleteExpiredVersions(cmd *m.DeleteExpiredVersionsCommand) error { |
|
|
|
|
return inTransaction(func(sess *DBSession) error { |
|
|
|
|
var expiredCount int64 = 0 |
|
|
|
|
var versions []DashboardVersionExp |
|
|
|
|
|
|
|
|
|
// Don't clean up if user set versions_to_keep to 2147483647 (MaxInt32)
|
|
|
|
|
if versionsToKeep := setting.DashboardVersionsToKeep; versionsToKeep < math.MaxInt32 { |
|
|
|
|
err := sess.Table("dashboard_version"). |
|
|
|
|
Select("dashboard_version.id, dashboard_version.version, dashboard_version.dashboard_id"). |
|
|
|
|
Where(`dashboard_id IN ( |
|
|
|
|
SELECT dashboard_id FROM dashboard_version |
|
|
|
|
GROUP BY dashboard_id HAVING COUNT(dashboard_version.id) > ? |
|
|
|
|
)`, versionsToKeep). |
|
|
|
|
Desc("dashboard_version.dashboard_id", "dashboard_version.version"). |
|
|
|
|
Find(&versions) |
|
|
|
|
expiredCount := int64(0) |
|
|
|
|
versions := []DashboardVersionExp{} |
|
|
|
|
versionsToKeep := setting.DashboardVersionsToKeep |
|
|
|
|
|
|
|
|
|
if versionsToKeep < 1 { |
|
|
|
|
versionsToKeep = 1 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
err := sess.Table("dashboard_version"). |
|
|
|
|
Select("dashboard_version.id, dashboard_version.version, dashboard_version.dashboard_id"). |
|
|
|
|
Where(`dashboard_id IN ( |
|
|
|
|
SELECT dashboard_id FROM dashboard_version |
|
|
|
|
GROUP BY dashboard_id HAVING COUNT(dashboard_version.id) > ? |
|
|
|
|
)`, versionsToKeep). |
|
|
|
|
Desc("dashboard_version.dashboard_id", "dashboard_version.version"). |
|
|
|
|
Find(&versions) |
|
|
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Keep last versionsToKeep versions and delete other
|
|
|
|
|
versionIdsToDelete := getVersionIDsToDelete(versions, versionsToKeep) |
|
|
|
|
if len(versionIdsToDelete) > 0 { |
|
|
|
|
deleteExpiredSql := `DELETE FROM dashboard_version WHERE id IN (?` + strings.Repeat(",?", len(versionIdsToDelete)-1) + `)` |
|
|
|
|
expiredResponse, err := sess.Exec(deleteExpiredSql, versionIdsToDelete...) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Keep last versionsToKeep versions and delete other
|
|
|
|
|
versionIdsToDelete := getVersionIDsToDelete(versions, versionsToKeep) |
|
|
|
|
if len(versionIdsToDelete) > 0 { |
|
|
|
|
deleteExpiredSql := `DELETE FROM dashboard_version WHERE id IN (?` + strings.Repeat(",?", len(versionIdsToDelete)-1) + `)` |
|
|
|
|
expiredResponse, err := sess.Exec(deleteExpiredSql, versionIdsToDelete...) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
expiredCount, _ = expiredResponse.RowsAffected() |
|
|
|
|
} |
|
|
|
|
expiredCount, _ = expiredResponse.RowsAffected() |
|
|
|
|
sqlog.Debug("Deleted old/expired dashboard versions", "expired", expiredCount) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sqlog.Debug("Deleted old/expired dashboard versions", "expired", expiredCount) |
|
|
|
|
return nil |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|