dashboard_snapshot.go 1.9 KB

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