app_plugin.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. Routes []*AppPluginRoute `json:"routes"`
  26. Includes []AppIncludeInfo `json:"-"`
  27. Pinned bool `json:"-"`
  28. Enabled bool `json:"-"`
  29. }
  30. type AppPluginRoute struct {
  31. Path string `json:"path"`
  32. Method string `json:"method"`
  33. ReqSignedIn bool `json:"reqSignedIn"`
  34. ReqGrafanaAdmin bool `json:"reqGrafanaAdmin"`
  35. ReqRole models.RoleType `json:"reqRole"`
  36. Url string `json:"url"`
  37. Headers []AppPluginRouteHeader `json:"headers"`
  38. }
  39. type AppPluginRouteHeader struct {
  40. Name string `json:"name"`
  41. Content string `json:"content"`
  42. }
  43. func (app *AppPlugin) Load(decoder *json.Decoder, pluginDir string) error {
  44. if err := decoder.Decode(&app); err != nil {
  45. return err
  46. }
  47. if app.Css != nil {
  48. app.Css.Dark = evalRelativePluginUrlPath(app.Css.Dark, app.Id)
  49. app.Css.Light = evalRelativePluginUrlPath(app.Css.Light, app.Id)
  50. }
  51. app.PluginDir = pluginDir
  52. app.initFrontendPlugin()
  53. // check if we have child panels
  54. for _, panel := range Panels {
  55. if strings.HasPrefix(panel.PluginDir, app.PluginDir) {
  56. panel.IncludedInAppId = app.Id
  57. app.Includes = append(app.Includes, AppIncludeInfo{
  58. Name: panel.Name,
  59. Id: panel.Id,
  60. Type: panel.Type,
  61. })
  62. }
  63. }
  64. Apps[app.Id] = app
  65. return nil
  66. }