dashboard_snapshot.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. )
  8. func init() {
  9. bus.AddHandler("sql", CreateDashboardSnapshot)
  10. bus.AddHandler("sql", GetDashboardSnapshot)
  11. bus.AddHandler("sql", DeleteDashboardSnapshot)
  12. bus.AddHandler("sql", SearchDashboardSnapshots)
  13. }
  14. func CreateDashboardSnapshot(cmd *m.CreateDashboardSnapshotCommand) error {
  15. return inTransaction(func(sess *xorm.Session) error {
  16. // never
  17. var expires = time.Now().Add(time.Hour * 24 * 365 * 50)
  18. if cmd.Expires > 0 {
  19. expires = time.Now().Add(time.Second * time.Duration(cmd.Expires))
  20. }
  21. snapshot := &m.DashboardSnapshot{
  22. Key: cmd.Key,
  23. DeleteKey: cmd.DeleteKey,
  24. OrgId: cmd.OrgId,
  25. UserId: cmd.UserId,
  26. External: cmd.External,
  27. Dashboard: cmd.Dashboard,
  28. Expires: expires,
  29. Created: time.Now(),
  30. Updated: time.Now(),
  31. }
  32. _, err := sess.Insert(snapshot)
  33. cmd.Result = snapshot
  34. return err
  35. })
  36. }
  37. func DeleteDashboardSnapshot(cmd *m.DeleteDashboardSnapshotCommand) error {
  38. return inTransaction(func(sess *xorm.Session) error {
  39. var rawSql = "DELETE FROM dashboard_snapshot WHERE delete_key=?"
  40. _, err := sess.Exec(rawSql, cmd.DeleteKey)
  41. return err
  42. })
  43. }
  44. func GetDashboardSnapshot(query *m.GetDashboardSnapshotQuery) error {
  45. snapshot := m.DashboardSnapshot{Key: query.Key}
  46. has, err := x.Get(&snapshot)
  47. if err != nil {
  48. return err
  49. } else if has == false {
  50. return m.ErrDashboardSnapshotNotFound
  51. }
  52. query.Result = &snapshot
  53. return nil
  54. }
  55. func SearchDashboardSnapshots(query *m.GetDashboardSnapshotsQuery) error {
  56. var snapshots = make(m.DashboardSnapshots, 0)
  57. sess := x.Limit(query.Limit)
  58. if query.Name != "" {
  59. sess.Where("name LIKE ?", query.Name)
  60. }
  61. sess.Where("org_id = ?", query.OrgId)
  62. err := sess.Find(&snapshots)
  63. query.Result = snapshots
  64. return err
  65. }