dashboard_version.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package sqlstore
  2. import (
  3. "github.com/grafana/grafana/pkg/bus"
  4. m "github.com/grafana/grafana/pkg/models"
  5. )
  6. func init() {
  7. bus.AddHandler("sql", GetDashboardVersion)
  8. bus.AddHandler("sql", GetDashboardVersions)
  9. }
  10. // GetDashboardVersion gets the dashboard version for the given dashboard ID
  11. // and version number.
  12. func GetDashboardVersion(query *m.GetDashboardVersionQuery) error {
  13. result, err := getDashboardVersion(query.DashboardId, query.Version)
  14. if err != nil {
  15. return err
  16. }
  17. query.Result = result
  18. return nil
  19. }
  20. // GetDashboardVersions gets all dashboard versions for the given dashboard ID.
  21. func GetDashboardVersions(query *m.GetDashboardVersionsQuery) error {
  22. err := x.Table("dashboard_version").
  23. Select(`dashboard_version.id,
  24. dashboard_version.dashboard_id,
  25. dashboard_version.parent_version,
  26. dashboard_version.restored_from,
  27. dashboard_version.version,
  28. dashboard_version.created,
  29. dashboard_version.created_by as created_by_id,
  30. dashboard_version.message,
  31. dashboard_version.data,`+
  32. dialect.Quote("user")+`.login as created_by`).
  33. Join("LEFT", "user", `dashboard_version.created_by = `+dialect.Quote("user")+`.id`).
  34. Join("LEFT", "dashboard", `dashboard.id = dashboard_version.dashboard_id`).
  35. Where("dashboard_version.dashboard_id=? AND dashboard.org_id=?", query.DashboardId, query.OrgId).
  36. OrderBy("dashboard_version.version DESC").
  37. Limit(query.Limit, query.Start).
  38. Find(&query.Result)
  39. if err != nil {
  40. return err
  41. }
  42. if len(query.Result) < 1 {
  43. return m.ErrNoVersionsForDashboardId
  44. }
  45. return nil
  46. }
  47. // getDashboardVersion is a helper function that gets the dashboard version for
  48. // the given dashboard ID and version ID.
  49. func getDashboardVersion(dashboardId int64, version int) (*m.DashboardVersion, error) {
  50. dashboardVersion := m.DashboardVersion{}
  51. has, err := x.Where("dashboard_id=? AND version=?", dashboardId, version).Get(&dashboardVersion)
  52. if err != nil {
  53. return nil, err
  54. }
  55. if !has {
  56. return nil, m.ErrDashboardVersionNotFound
  57. }
  58. dashboardVersion.Data.Set("id", dashboardVersion.DashboardId)
  59. return &dashboardVersion, nil
  60. }
  61. // getDashboard gets a dashboard by ID. Used for retrieving the dashboard
  62. // associated with dashboard versions.
  63. func getDashboard(dashboardId int64) (*m.Dashboard, error) {
  64. dashboard := m.Dashboard{Id: dashboardId}
  65. has, err := x.Get(&dashboard)
  66. if err != nil {
  67. return nil, err
  68. }
  69. if has == false {
  70. return nil, m.ErrDashboardNotFound
  71. }
  72. return &dashboard, nil
  73. }