dashboard_provisioning.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package sqlstore
  2. import (
  3. "github.com/grafana/grafana/pkg/bus"
  4. "github.com/grafana/grafana/pkg/models"
  5. )
  6. func init() {
  7. bus.AddHandler("sql", GetProvisionedDashboardDataQuery)
  8. bus.AddHandler("sql", SaveProvisionedDashboard)
  9. bus.AddHandler("sql", GetProvisionedDataByDashboardId)
  10. bus.AddHandler("sql", UnprovisionDashboard)
  11. }
  12. type DashboardExtras struct {
  13. Id int64
  14. DashboardId int64
  15. Key string
  16. Value string
  17. }
  18. func GetProvisionedDataByDashboardId(cmd *models.IsDashboardProvisionedQuery) error {
  19. result := &models.DashboardProvisioning{}
  20. exist, err := x.Where("dashboard_id = ?", cmd.DashboardId).Get(result)
  21. if err != nil {
  22. return err
  23. }
  24. cmd.Result = exist
  25. return nil
  26. }
  27. func SaveProvisionedDashboard(cmd *models.SaveProvisionedDashboardCommand) error {
  28. return inTransaction(func(sess *DBSession) error {
  29. err := saveDashboard(sess, cmd.DashboardCmd)
  30. if err != nil {
  31. return err
  32. }
  33. cmd.Result = cmd.DashboardCmd.Result
  34. if cmd.DashboardProvisioning.Updated == 0 {
  35. cmd.DashboardProvisioning.Updated = cmd.Result.Updated.Unix()
  36. }
  37. return saveProvisionedData(sess, cmd.DashboardProvisioning, cmd.Result)
  38. })
  39. }
  40. func saveProvisionedData(sess *DBSession, cmd *models.DashboardProvisioning, dashboard *models.Dashboard) error {
  41. result := &models.DashboardProvisioning{}
  42. exist, err := sess.Where("dashboard_id=? AND name = ?", dashboard.Id, cmd.Name).Get(result)
  43. if err != nil {
  44. return err
  45. }
  46. cmd.Id = result.Id
  47. cmd.DashboardId = dashboard.Id
  48. if exist {
  49. _, err = sess.ID(result.Id).Update(cmd)
  50. } else {
  51. _, err = sess.Insert(cmd)
  52. }
  53. return err
  54. }
  55. func GetProvisionedDashboardDataQuery(cmd *models.GetProvisionedDashboardDataQuery) error {
  56. var result []*models.DashboardProvisioning
  57. if err := x.Where("name = ?", cmd.Name).Find(&result); err != nil {
  58. return err
  59. }
  60. cmd.Result = result
  61. return nil
  62. }
  63. // UnprovisionDashboard removes row in dashboard_provisioning for the dashboard making it seem as if manually created.
  64. // The dashboard will still have `created_by = -1` to see it was not created by any particular user.
  65. func UnprovisionDashboard(cmd *models.UnprovisionDashboardCommand) error {
  66. if _, err := x.Where("dashboard_id = ?", cmd.Id).Delete(&models.DashboardProvisioning{}); err != nil {
  67. return err
  68. }
  69. return nil
  70. }