dashboard_snapshot.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package sqlstore
  2. import (
  3. "time"
  4. "github.com/go-xorm/xorm"
  5. "github.com/grafana/grafana/pkg/bus"
  6. m "github.com/grafana/grafana/pkg/models"
  7. "github.com/grafana/grafana/pkg/setting"
  8. )
  9. func init() {
  10. bus.AddHandler("sql", CreateDashboardSnapshot)
  11. bus.AddHandler("sql", GetDashboardSnapshot)
  12. bus.AddHandler("sql", DeleteDashboardSnapshot)
  13. bus.AddHandler("sql", SearchDashboardSnapshots)
  14. bus.AddHandler("sql", DeleteExpiredSnapshots)
  15. }
  16. func DeleteExpiredSnapshots(cmd *m.DeleteExpiredSnapshotsCommand) error {
  17. return inTransaction(func(sess *xorm.Session) error {
  18. var expiredCount int64 = 0
  19. if setting.SnapShotRemoveExpired {
  20. deleteExpiredSql := "DELETE FROM dashboard_snapshot WHERE expires < ?"
  21. expiredResponse, err := x.Exec(deleteExpiredSql, time.Now)
  22. if err != nil {
  23. return err
  24. }
  25. expiredCount, _ = expiredResponse.RowsAffected()
  26. }
  27. sqlog.Debug("Deleted old/expired snaphots", "expired", expiredCount)
  28. return nil
  29. })
  30. }
  31. func CreateDashboardSnapshot(cmd *m.CreateDashboardSnapshotCommand) error {
  32. return inTransaction(func(sess *xorm.Session) error {
  33. // never
  34. var expires = time.Now().Add(time.Hour * 24 * 365 * 50)
  35. if cmd.Expires > 0 {
  36. expires = time.Now().Add(time.Second * time.Duration(cmd.Expires))
  37. }
  38. snapshot := &m.DashboardSnapshot{
  39. Name: cmd.Name,
  40. Key: cmd.Key,
  41. DeleteKey: cmd.DeleteKey,
  42. OrgId: cmd.OrgId,
  43. UserId: cmd.UserId,
  44. External: cmd.External,
  45. Dashboard: cmd.Dashboard,
  46. Expires: expires,
  47. Created: time.Now(),
  48. Updated: time.Now(),
  49. }
  50. _, err := sess.Insert(snapshot)
  51. cmd.Result = snapshot
  52. return err
  53. })
  54. }
  55. func DeleteDashboardSnapshot(cmd *m.DeleteDashboardSnapshotCommand) error {
  56. return inTransaction(func(sess *xorm.Session) error {
  57. var rawSql = "DELETE FROM dashboard_snapshot WHERE delete_key=?"
  58. _, err := sess.Exec(rawSql, cmd.DeleteKey)
  59. return err
  60. })
  61. }
  62. func GetDashboardSnapshot(query *m.GetDashboardSnapshotQuery) error {
  63. snapshot := m.DashboardSnapshot{Key: query.Key}
  64. has, err := x.Get(&snapshot)
  65. if err != nil {
  66. return err
  67. } else if has == false {
  68. return m.ErrDashboardSnapshotNotFound
  69. }
  70. query.Result = &snapshot
  71. return nil
  72. }
  73. func SearchDashboardSnapshots(query *m.GetDashboardSnapshotsQuery) error {
  74. var snapshots = make(m.DashboardSnapshots, 0)
  75. sess := x.Limit(query.Limit)
  76. if query.Name != "" {
  77. sess.Where("name LIKE ?", query.Name)
  78. }
  79. sess.Where("org_id = ?", query.OrgId)
  80. err := sess.Find(&snapshots)
  81. query.Result = snapshots
  82. return err
  83. }