diff --git a/examples/nginx-app/panel/plugin.json b/examples/nginx-app/panel/plugin.json index 4160f9ae6f3..f3548c987f3 100644 --- a/examples/nginx-app/panel/plugin.json +++ b/examples/nginx-app/panel/plugin.json @@ -1,6 +1,5 @@ { "type": "panel", "name": "Nginx Panel", - "id": "nginx-panel", - "staticRoot": "." + "id": "nginx-panel" } diff --git a/pkg/plugins/app_plugin.go b/pkg/plugins/app_plugin.go index b59eb47a939..aa704da7f74 100644 --- a/pkg/plugins/app_plugin.go +++ b/pkg/plugins/app_plugin.go @@ -57,18 +57,24 @@ func (app *AppPlugin) Load(decoder *json.Decoder, pluginDir string) error { return err } + app.PluginDir = pluginDir + + Apps[app.Id] = app + return nil +} + +func (app *AppPlugin) initApp() { + app.initFrontendPlugin() + if app.Css != nil { app.Css.Dark = evalRelativePluginUrlPath(app.Css.Dark, app.Id) app.Css.Light = evalRelativePluginUrlPath(app.Css.Light, app.Id) } - app.PluginDir = pluginDir - app.initFrontendPlugin() - // check if we have child panels for _, panel := range Panels { if strings.HasPrefix(panel.PluginDir, app.PluginDir) { - panel.IncludedInAppId = app.Id + panel.setPathsBasedOnApp(app) app.Includes = append(app.Includes, &AppIncludeInfo{ Name: panel.Name, Id: panel.Id, @@ -80,7 +86,7 @@ func (app *AppPlugin) Load(decoder *json.Decoder, pluginDir string) error { // check if we have child datasources for _, ds := range DataSources { if strings.HasPrefix(ds.PluginDir, app.PluginDir) { - ds.IncludedInAppId = app.Id + ds.setPathsBasedOnApp(app) app.Includes = append(app.Includes, &AppIncludeInfo{ Name: ds.Name, Id: ds.Id, @@ -95,7 +101,4 @@ func (app *AppPlugin) Load(decoder *json.Decoder, pluginDir string) error { page.Slug = slug.Make(page.Name) } } - - Apps[app.Id] = app - return nil } diff --git a/pkg/plugins/datasource_plugin.go b/pkg/plugins/datasource_plugin.go index e1bb9047297..2e1dd806e23 100644 --- a/pkg/plugins/datasource_plugin.go +++ b/pkg/plugins/datasource_plugin.go @@ -18,7 +18,6 @@ func (p *DataSourcePlugin) Load(decoder *json.Decoder, pluginDir string) error { } p.PluginDir = pluginDir - p.initFrontendPlugin() DataSources[p.Id] = p return nil diff --git a/pkg/plugins/frontend_plugin.go b/pkg/plugins/frontend_plugin.go index 079adc0c733..9e4d9f67053 100644 --- a/pkg/plugins/frontend_plugin.go +++ b/pkg/plugins/frontend_plugin.go @@ -4,6 +4,10 @@ import ( "net/url" "path" "path/filepath" + "strings" + + "github.com/grafana/grafana/pkg/log" + "github.com/grafana/grafana/pkg/util" ) type FrontendPluginBase struct { @@ -23,18 +27,27 @@ func (fp *FrontendPluginBase) initFrontendPlugin() { }) } + fp.handleModuleDefaults() + fp.Info.Logos.Small = evalRelativePluginUrlPath(fp.Info.Logos.Small, fp.Id) fp.Info.Logos.Large = evalRelativePluginUrlPath(fp.Info.Logos.Large, fp.Id) - for i := -0; i < len(fp.Info.Screenshots); i++ { + + for i := 0; i < len(fp.Info.Screenshots); i++ { fp.Info.Screenshots[i].Path = evalRelativePluginUrlPath(fp.Info.Screenshots[i].Path, fp.Id) } - fp.handleModuleDefaults() +} + +func (fp *FrontendPluginBase) setPathsBasedOnApp(app *AppPlugin) { + // log.Info("Module Before: %v", fp.Module) + // find out plugins path relative to app static root + appSubPath := strings.Replace(fp.PluginDir, app.StaticRootAbs, "", 1) + fp.IncludedInAppId = app.Id + fp.BaseUrl = app.BaseUrl + fp.Module = util.JoinUrlFragments("plugins/"+app.Id, appSubPath) + "/module" + log.Info("setting paths based on app: subpath = %v, module: %v", appSubPath, fp.Module) } func (fp *FrontendPluginBase) handleModuleDefaults() { - if fp.Module != "" { - return - } if fp.StaticRoot != "" { fp.Module = path.Join("plugins", fp.Id, "module") diff --git a/pkg/plugins/panel_plugin.go b/pkg/plugins/panel_plugin.go index 5b99ac52344..ae638b6777e 100644 --- a/pkg/plugins/panel_plugin.go +++ b/pkg/plugins/panel_plugin.go @@ -12,7 +12,6 @@ func (p *PanelPlugin) Load(decoder *json.Decoder, pluginDir string) error { } p.PluginDir = pluginDir - p.initFrontendPlugin() Panels[p.Id] = p return nil diff --git a/pkg/plugins/plugins.go b/pkg/plugins/plugins.go index 6df7d673b21..ab679baa796 100644 --- a/pkg/plugins/plugins.go +++ b/pkg/plugins/plugins.go @@ -41,7 +41,17 @@ func Init() error { scan(path.Join(setting.StaticRootPath, "app/plugins")) scan(setting.PluginsPath) checkPluginPaths() - // checkDependencies() + + for _, panel := range Panels { + panel.initFrontendPlugin() + } + for _, panel := range DataSources { + panel.initFrontendPlugin() + } + for _, app := range Apps { + app.initApp() + } + return nil }