diff --git a/examples/nginx-app/plugin.json b/examples/nginx-app/plugin.json index 7e3cdd7ad08..4e0c4a114fa 100644 --- a/examples/nginx-app/plugin.json +++ b/examples/nginx-app/plugin.json @@ -35,7 +35,7 @@ }, "dependencies": { - "grafanaVersion": "2.6.x", + "grafanaVersion": "3.x.x", "plugins": [ {"type": "datasource", "id": "graphite", "name": "Graphite", "version": "1.0.0"}, {"type": "panel", "id": "graph", "name": "Graph", "version": "1.0.0"} diff --git a/pkg/api/dtos/plugins.go b/pkg/api/dtos/plugins.go index af96202222f..20b976af122 100644 --- a/pkg/api/dtos/plugins.go +++ b/pkg/api/dtos/plugins.go @@ -3,17 +3,18 @@ package dtos import "github.com/grafana/grafana/pkg/plugins" type PluginSetting struct { - Name string `json:"name"` - Type string `json:"type"` - PluginId string `json:"pluginId"` - Enabled bool `json:"enabled"` - Pinned bool `json:"pinned"` - Module string `json:"module"` - BaseUrl string `json:"baseUrl"` - Info *plugins.PluginInfo `json:"info"` - Pages []*plugins.AppPluginPage `json:"pages"` - Includes []*plugins.AppIncludeInfo `json:"includes"` - JsonData map[string]interface{} `json:"jsonData"` + Name string `json:"name"` + Type string `json:"type"` + PluginId string `json:"pluginId"` + Enabled bool `json:"enabled"` + Pinned bool `json:"pinned"` + Module string `json:"module"` + BaseUrl string `json:"baseUrl"` + Info *plugins.PluginInfo `json:"info"` + Pages []*plugins.AppPluginPage `json:"pages"` + Includes []*plugins.AppIncludeInfo `json:"includes"` + Dependencies *plugins.PluginDependencies `json:"dependencies"` + JsonData map[string]interface{} `json:"jsonData"` } type PluginListItem struct { diff --git a/pkg/api/plugin_setting.go b/pkg/api/plugin_setting.go index 08fc5296434..4509cc00c35 100644 --- a/pkg/api/plugin_setting.go +++ b/pkg/api/plugin_setting.go @@ -42,10 +42,11 @@ func GetPluginSettingById(c *middleware.Context) Response { return ApiError(404, "Plugin not found, no installed plugin with that id", nil) } else { dto := &dtos.PluginSetting{ - Type: def.Type, - PluginId: def.Id, - Name: def.Name, - Info: &def.Info, + Type: def.Type, + PluginId: def.Id, + Name: def.Name, + Info: &def.Info, + Dependencies: &def.Dependencies, } if app, exists := plugins.Apps[pluginId]; exists { diff --git a/pkg/cmd/grafana-server/main.go b/pkg/cmd/grafana-server/main.go index d78b8f700ff..dad3f437390 100644 --- a/pkg/cmd/grafana-server/main.go +++ b/pkg/cmd/grafana-server/main.go @@ -24,7 +24,7 @@ import ( "github.com/grafana/grafana/pkg/social" ) -var version = "master" +var version = "3.0.0-pre1" var commit = "NA" var buildstamp string var build_date string diff --git a/pkg/plugins/frontend_plugin.go b/pkg/plugins/frontend_plugin.go index 5acb9966495..d09342c84bb 100644 --- a/pkg/plugins/frontend_plugin.go +++ b/pkg/plugins/frontend_plugin.go @@ -28,8 +28,8 @@ 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) + fp.Info.Logos.Small = evalRelativePluginUrlPath(fp.Info.Logos.Small, fp.BaseUrl) + fp.Info.Logos.Large = evalRelativePluginUrlPath(fp.Info.Logos.Large, fp.BaseUrl) for i := 0; i < len(fp.Info.Screenshots); i++ { fp.Info.Screenshots[i].Path = evalRelativePluginUrlPath(fp.Info.Screenshots[i].Path, fp.Id) @@ -55,7 +55,7 @@ func (fp *FrontendPluginBase) handleModuleDefaults() { fp.BaseUrl = path.Join("public/app/plugins", fp.Type, fp.Id) } -func evalRelativePluginUrlPath(pathStr string, pluginId string) string { +func evalRelativePluginUrlPath(pathStr string, baseUrl string) string { if pathStr == "" { return "" } @@ -64,5 +64,5 @@ func evalRelativePluginUrlPath(pathStr string, pluginId string) string { if u.IsAbs() { return pathStr } - return path.Join("public/plugins", pluginId, pathStr) + return path.Join(baseUrl, pathStr) } diff --git a/pkg/plugins/models.go b/pkg/plugins/models.go index 83f43c1f544..26620a45fea 100644 --- a/pkg/plugins/models.go +++ b/pkg/plugins/models.go @@ -14,10 +14,11 @@ type PluginLoader interface { } type PluginBase struct { - Type string `json:"type"` - Name string `json:"name"` - Id string `json:"id"` - Info PluginInfo `json:"info"` + Type string `json:"type"` + Name string `json:"name"` + Id string `json:"id"` + Info PluginInfo `json:"info"` + Dependencies PluginDependencies `json:"dependencies"` IncludedInAppId string `json:"-"` PluginDir string `json:"-"` @@ -37,6 +38,18 @@ func (pb *PluginBase) registerPlugin(pluginDir string) error { return nil } +type PluginDependencies struct { + GrafanaVersion string `json:"grafanaVersion"` + Plugins []PluginDependencyItem `json:"plugins"` +} + +type PluginDependencyItem struct { + Type string `json:"type"` + Id string `json:"id"` + Name string `json:"name"` + Version string `json:"version"` +} + type PluginInfo struct { Author PluginInfoLink `json:"author"` Description string `json:"description"` diff --git a/public/app/features/dashboard/partials/settings.html b/public/app/features/dashboard/partials/settings.html index 8fd2b34ae5a..deccd22305b 100644 --- a/public/app/features/dashboard/partials/settings.html +++ b/public/app/features/dashboard/partials/settings.html @@ -19,7 +19,6 @@