dashboard_snapshot.go 2.4 KB

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