app_plugin.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package plugins
  2. import (
  3. "encoding/json"
  4. "strings"
  5. "github.com/gosimple/slug"
  6. "github.com/grafana/grafana/pkg/models"
  7. )
  8. type AppPluginCss struct {
  9. Light string `json:"light"`
  10. Dark string `json:"dark"`
  11. }
  12. type AppPlugin struct {
  13. FrontendPluginBase
  14. Routes []*AppPluginRoute `json:"routes"`
  15. FoundChildPlugins []*PluginInclude `json:"-"`
  16. Pinned bool `json:"-"`
  17. }
  18. type AppPluginRoute struct {
  19. Path string `json:"path"`
  20. Method string `json:"method"`
  21. ReqGrafanaAdmin bool `json:"reqGrafanaAdmin"`
  22. ReqRole models.RoleType `json:"reqRole"`
  23. Url string `json:"url"`
  24. Headers []AppPluginRouteHeader `json:"headers"`
  25. }
  26. type AppPluginRouteHeader struct {
  27. Name string `json:"name"`
  28. Content string `json:"content"`
  29. }
  30. func (app *AppPlugin) Load(decoder *json.Decoder, pluginDir string) error {
  31. if err := decoder.Decode(&app); err != nil {
  32. return err
  33. }
  34. if err := app.registerPlugin(pluginDir); err != nil {
  35. return err
  36. }
  37. Apps[app.Id] = app
  38. return nil
  39. }
  40. func (app *AppPlugin) initApp() {
  41. app.initFrontendPlugin()
  42. // check if we have child panels
  43. for _, panel := range Panels {
  44. if strings.HasPrefix(panel.PluginDir, app.PluginDir) {
  45. panel.setPathsBasedOnApp(app)
  46. app.FoundChildPlugins = append(app.FoundChildPlugins, &PluginInclude{
  47. Name: panel.Name,
  48. Id: panel.Id,
  49. Type: panel.Type,
  50. })
  51. }
  52. }
  53. // check if we have child datasources
  54. for _, ds := range DataSources {
  55. if strings.HasPrefix(ds.PluginDir, app.PluginDir) {
  56. ds.setPathsBasedOnApp(app)
  57. app.FoundChildPlugins = append(app.FoundChildPlugins, &PluginInclude{
  58. Name: ds.Name,
  59. Id: ds.Id,
  60. Type: ds.Type,
  61. })
  62. }
  63. }
  64. // slugify pages
  65. for _, page := range app.Includes {
  66. if page.Slug == "" {
  67. page.Slug = slug.Make(page.Name)
  68. }
  69. }
  70. }