dashboards.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package plugins
  2. import (
  3. "os"
  4. "path/filepath"
  5. "github.com/grafana/grafana/pkg/bus"
  6. "github.com/grafana/grafana/pkg/components/simplejson"
  7. m "github.com/grafana/grafana/pkg/models"
  8. )
  9. type PluginDashboardInfoDTO struct {
  10. PluginId string `json:"pluginId"`
  11. Title string `json:"title"`
  12. Installed bool `json:"installed"`
  13. InstalledUri string `json:"installedUri"`
  14. InstalledRevision string `json:"installedRevision"`
  15. Revision string `json:"revision"`
  16. Description string `json:"description"`
  17. Path string `json:"path"`
  18. }
  19. func GetPluginDashboards(orgId int64, pluginId string) ([]*PluginDashboardInfoDTO, error) {
  20. plugin, exists := Plugins[pluginId]
  21. if !exists {
  22. return nil, PluginNotFoundError{pluginId}
  23. }
  24. result := make([]*PluginDashboardInfoDTO, 0)
  25. for _, include := range plugin.Includes {
  26. if include.Type == PluginTypeDashboard {
  27. if dashInfo, err := getDashboardImportStatus(orgId, plugin, include.Path); err != nil {
  28. return nil, err
  29. } else {
  30. result = append(result, dashInfo)
  31. }
  32. }
  33. }
  34. return result, nil
  35. }
  36. func loadPluginDashboard(plugin *PluginBase, path string) (*m.Dashboard, error) {
  37. dashboardFilePath := filepath.Join(plugin.PluginDir, path)
  38. reader, err := os.Open(dashboardFilePath)
  39. if err != nil {
  40. return nil, err
  41. }
  42. defer reader.Close()
  43. data, err := simplejson.NewFromReader(reader)
  44. if err != nil {
  45. return nil, err
  46. }
  47. return m.NewDashboardFromJson(data), nil
  48. }
  49. func getDashboardImportStatus(orgId int64, plugin *PluginBase, path string) (*PluginDashboardInfoDTO, error) {
  50. res := &PluginDashboardInfoDTO{}
  51. var dashboard *m.Dashboard
  52. var err error
  53. if dashboard, err = loadPluginDashboard(plugin, path); err != nil {
  54. return nil, err
  55. }
  56. res.Path = path
  57. res.PluginId = plugin.Id
  58. res.Title = dashboard.Title
  59. res.Revision = dashboard.GetString("revision", "1.0")
  60. query := m.GetDashboardQuery{OrgId: orgId, Slug: dashboard.Slug}
  61. if err := bus.Dispatch(&query); err != nil {
  62. if err != m.ErrDashboardNotFound {
  63. return nil, err
  64. }
  65. } else {
  66. res.Installed = true
  67. res.InstalledUri = "db/" + query.Result.Slug
  68. res.InstalledRevision = query.Result.GetString("revision", "1.0")
  69. }
  70. return res, nil
  71. }