app_plugin.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package plugins
  2. import (
  3. "encoding/json"
  4. "strings"
  5. "github.com/grafana/grafana/pkg/models"
  6. )
  7. type AppPluginPage struct {
  8. Name string `json:"name"`
  9. Url string `json:"url"`
  10. ReqRole models.RoleType `json:"reqRole"`
  11. }
  12. type AppPluginCss struct {
  13. Light string `json:"light"`
  14. Dark string `json:"dark"`
  15. }
  16. type AppIncludeInfo struct {
  17. Name string `json:"name"`
  18. Type string `json:"type"`
  19. Id string `json:"id"`
  20. }
  21. type AppPlugin struct {
  22. FrontendPluginBase
  23. Css *AppPluginCss `json:"css"`
  24. Pages []AppPluginPage `json:"pages"`
  25. Includes []AppIncludeInfo `json:"-"`
  26. Pinned bool `json:"-"`
  27. Enabled bool `json:"-"`
  28. }
  29. func (app *AppPlugin) Load(decoder *json.Decoder, pluginDir string) error {
  30. if err := decoder.Decode(&app); err != nil {
  31. return err
  32. }
  33. if app.Css != nil {
  34. app.Css.Dark = evalRelativePluginUrlPath(app.Css.Dark, app.Id)
  35. app.Css.Light = evalRelativePluginUrlPath(app.Css.Light, app.Id)
  36. }
  37. app.PluginDir = pluginDir
  38. app.initFrontendPlugin()
  39. // check if we have child panels
  40. for _, panel := range Panels {
  41. if strings.HasPrefix(panel.PluginDir, app.PluginDir) {
  42. panel.IncludedInAppId = app.Id
  43. app.Includes = append(app.Includes, AppIncludeInfo{
  44. Name: panel.Name,
  45. Id: panel.Id,
  46. Type: panel.Type,
  47. })
  48. }
  49. }
  50. Apps[app.Id] = app
  51. return nil
  52. }