add pluginBundle support

A plugnBundle is meta plugin that has a set of dependent plugins
to enable.  This commit includes a plugin.json for a default
"core" bundle that enables all of the shipped panels and datasources.
This commit is contained in:
woodsaj
2015-12-03 15:52:37 +08:00
parent fd392a2422
commit bd4cb549d6
7 changed files with 107 additions and 10 deletions

View File

@ -9,14 +9,16 @@ import (
"strings"
"github.com/grafana/grafana/pkg/log"
"github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/setting"
)
var (
DataSources map[string]DataSourcePlugin
Panels []PanelPlugin
ExternalPlugins []ExternalPlugin
Panels map[string]PanelPlugin
ExternalPlugins map[string]ExternalPlugin
StaticRoutes []*StaticRootConfig
Bundles map[string]PluginBundle
)
type PluginScanner struct {
@ -26,9 +28,10 @@ type PluginScanner struct {
func Init() error {
DataSources = make(map[string]DataSourcePlugin)
ExternalPlugins = make([]ExternalPlugin, 0)
ExternalPlugins = make(map[string]ExternalPlugin)
StaticRoutes = make([]*StaticRootConfig, 0)
Panels = make([]PanelPlugin, 0)
Panels = make(map[string]PanelPlugin)
Bundles = make(map[string]PluginBundle)
scan(path.Join(setting.StaticRootPath, "app/plugins"))
checkExternalPluginPaths()
@ -137,7 +140,7 @@ func (scanner *PluginScanner) loadPluginJson(pluginJsonFilePath string) error {
return errors.New("Did not find type property in plugin.json")
}
Panels = append(Panels, p)
Panels[p.Type] = p
addStaticRoot(p.StaticRootConfig, currentDir)
}
@ -147,9 +150,55 @@ func (scanner *PluginScanner) loadPluginJson(pluginJsonFilePath string) error {
if err := jsonParser.Decode(&p); err != nil {
return err
}
ExternalPlugins = append(ExternalPlugins, p)
if p.Type == "" {
return errors.New("Did not find type property in plugin.json")
}
ExternalPlugins[p.Type] = p
addStaticRoot(p.StaticRootConfig, currentDir)
}
if pluginType == "bundle" {
p := PluginBundle{}
reader.Seek(0, 0)
if err := jsonParser.Decode(&p); err != nil {
return err
}
if p.Type == "" {
return errors.New("Did not find type property in plugin.json")
}
Bundles[p.Type] = p
}
return nil
}
func GetEnabledPlugins(bundles map[string]models.PluginBundle) EnabledPlugins {
enabledPlugins := NewEnabledPlugins()
for bundleType, bundle := range Bundles {
enabled := bundle.Enabled
// check if the bundle is stored in the DB.
if b, ok := bundles[bundleType]; ok {
enabled = b.Enabled
}
if enabled {
for _, d := range bundle.DatasourcePlugins {
if ds, ok := DataSources[d]; ok {
enabledPlugins.DataSourcePlugins[d] = &ds
}
}
for _, p := range bundle.PanelPlugins {
if panel, ok := Panels[p]; ok {
enabledPlugins.PanelPlugins = append(enabledPlugins.PanelPlugins, &panel)
}
}
for _, e := range bundle.ExternalPlugins {
if external, ok := ExternalPlugins[e]; ok {
enabledPlugins.ExternalPlugins = append(enabledPlugins.ExternalPlugins, &external)
}
}
}
}
return enabledPlugins
}