dashboards.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package plugins
  2. import (
  3. "encoding/json"
  4. "os"
  5. "path/filepath"
  6. "github.com/grafana/grafana/pkg/bus"
  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. jsonParser := json.NewDecoder(reader)
  44. var data map[string]interface{}
  45. if err := jsonParser.Decode(&data); err != nil {
  46. return nil, err
  47. }
  48. return m.NewDashboardFromJson(data), nil
  49. }
  50. func getDashboardImportStatus(orgId int64, plugin *PluginBase, path string) (*PluginDashboardInfoDTO, error) {
  51. res := &PluginDashboardInfoDTO{}
  52. var dashboard *m.Dashboard
  53. var err error
  54. if dashboard, err = loadPluginDashboard(plugin, path); err != nil {
  55. return nil, err
  56. }
  57. res.Path = path
  58. res.PluginId = plugin.Id
  59. res.Title = dashboard.Title
  60. res.Revision = dashboard.GetString("revision", "1.0")
  61. query := m.GetDashboardQuery{OrgId: orgId, Slug: dashboard.Slug}
  62. if err := bus.Dispatch(&query); err != nil {
  63. if err != m.ErrDashboardNotFound {
  64. return nil, err
  65. }
  66. } else {
  67. res.Installed = true
  68. res.InstalledUri = "db/" + query.Result.Slug
  69. res.InstalledRevision = query.Result.GetString("revision", "1.0")
  70. }
  71. return res, nil
  72. }