models.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package plugins
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "strings"
  6. "github.com/grafana/grafana/pkg/log"
  7. "github.com/grafana/grafana/pkg/setting"
  8. )
  9. type PluginLoader interface {
  10. Load(decoder *json.Decoder, pluginDir string) error
  11. }
  12. type PluginBase struct {
  13. Type string `json:"type"`
  14. Name string `json:"name"`
  15. Id string `json:"id"`
  16. Info PluginInfo `json:"info"`
  17. IncludedInAppId string `json:"-"`
  18. PluginDir string `json:"-"`
  19. }
  20. func (pb *PluginBase) registerPlugin(pluginDir string) error {
  21. if _, exists := Plugins[pb.Id]; exists {
  22. return errors.New("Plugin with same id already exists")
  23. }
  24. if !strings.HasPrefix(pluginDir, setting.StaticRootPath) {
  25. log.Info("Plugins: Registering plugin %v", pb.Name)
  26. }
  27. pb.PluginDir = pluginDir
  28. Plugins[pb.Id] = pb
  29. return nil
  30. }
  31. type PluginInfo struct {
  32. Author PluginInfoLink `json:"author"`
  33. Description string `json:"description"`
  34. Links []PluginInfoLink `json:"links"`
  35. Logos PluginLogos `json:"logos"`
  36. Screenshots []PluginScreenshots `json:"screenshots"`
  37. Version string `json:"version"`
  38. Updated string `json:"updated"`
  39. }
  40. type PluginInfoLink struct {
  41. Name string `json:"name"`
  42. Url string `json:"url"`
  43. }
  44. type PluginLogos struct {
  45. Small string `json:"small"`
  46. Large string `json:"large"`
  47. }
  48. type PluginScreenshots struct {
  49. Path string `json:"path"`
  50. Name string `json:"name"`
  51. }
  52. type PluginStaticRoute struct {
  53. Directory string
  54. PluginId string
  55. }
  56. type EnabledPlugins struct {
  57. Panels []*PanelPlugin
  58. DataSources map[string]*DataSourcePlugin
  59. Apps []*AppPlugin
  60. }
  61. func NewEnabledPlugins() EnabledPlugins {
  62. return EnabledPlugins{
  63. Panels: make([]*PanelPlugin, 0),
  64. DataSources: make(map[string]*DataSourcePlugin),
  65. Apps: make([]*AppPlugin, 0),
  66. }
  67. }