mirror of https://github.com/grafana/grafana
Rename externalPlugin to apiPlugin Rename bundle to app Move js, css, menuItem and staticRoot to be properties os App Add "app" field to panel, datasource and api plugin models. If populated then the plugin is only enabled if the specific app is enabled for the Org. If app is "", then the plugin is enabled for all orgs and can't be disabled.pull/3712/head
parent
0697274695
commit
c35b51a268
@ -0,0 +1,65 @@ |
|||||||
|
package api |
||||||
|
|
||||||
|
import ( |
||||||
|
"github.com/grafana/grafana/pkg/api/dtos" |
||||||
|
"github.com/grafana/grafana/pkg/bus" |
||||||
|
"github.com/grafana/grafana/pkg/middleware" |
||||||
|
m "github.com/grafana/grafana/pkg/models" |
||||||
|
"github.com/grafana/grafana/pkg/plugins" |
||||||
|
) |
||||||
|
|
||||||
|
func GetAppPlugins(c *middleware.Context) Response { |
||||||
|
query := m.GetAppPluginsQuery{OrgId: c.OrgId} |
||||||
|
|
||||||
|
if err := bus.Dispatch(&query); err != nil { |
||||||
|
return ApiError(500, "Failed to list Plugin Bundles", err) |
||||||
|
} |
||||||
|
|
||||||
|
installedAppsMap := make(map[string]*dtos.AppPlugin) |
||||||
|
for t, a := range plugins.Apps { |
||||||
|
installedAppsMap[t] = &dtos.AppPlugin{ |
||||||
|
Type: a.Type, |
||||||
|
Enabled: a.Enabled, |
||||||
|
Module: a.Module, |
||||||
|
JsonData: make(map[string]interface{}), |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
seenApps := make(map[string]bool) |
||||||
|
|
||||||
|
result := make([]*dtos.AppPlugin, 0) |
||||||
|
for _, b := range query.Result { |
||||||
|
if def, ok := installedAppsMap[b.Type]; ok { |
||||||
|
result = append(result, &dtos.AppPlugin{ |
||||||
|
Type: b.Type, |
||||||
|
Enabled: b.Enabled, |
||||||
|
Module: def.Module, |
||||||
|
JsonData: b.JsonData, |
||||||
|
}) |
||||||
|
seenApps[b.Type] = true |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
for t, a := range installedAppsMap { |
||||||
|
if _, ok := seenApps[t]; !ok { |
||||||
|
result = append(result, a) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return Json(200, result) |
||||||
|
} |
||||||
|
|
||||||
|
func UpdateAppPlugin(c *middleware.Context, cmd m.UpdateAppPluginCmd) Response { |
||||||
|
cmd.OrgId = c.OrgId |
||||||
|
|
||||||
|
if _, ok := plugins.Apps[cmd.Type]; !ok { |
||||||
|
return ApiError(404, "App type not installed.", nil) |
||||||
|
} |
||||||
|
|
||||||
|
err := bus.Dispatch(&cmd) |
||||||
|
if err != nil { |
||||||
|
return ApiError(500, "Failed to update App Plugin", err) |
||||||
|
} |
||||||
|
|
||||||
|
return ApiSuccess("App updated") |
||||||
|
} |
@ -1,6 +1,6 @@ |
|||||||
package dtos |
package dtos |
||||||
|
|
||||||
type PluginBundle struct { |
type AppPlugin struct { |
||||||
Type string `json:"type"` |
Type string `json:"type"` |
||||||
Enabled bool `json:"enabled"` |
Enabled bool `json:"enabled"` |
||||||
Module string `json:"module"` |
Module string `json:"module"` |
@ -1,65 +0,0 @@ |
|||||||
package api |
|
||||||
|
|
||||||
import ( |
|
||||||
"github.com/grafana/grafana/pkg/api/dtos" |
|
||||||
"github.com/grafana/grafana/pkg/bus" |
|
||||||
"github.com/grafana/grafana/pkg/middleware" |
|
||||||
m "github.com/grafana/grafana/pkg/models" |
|
||||||
"github.com/grafana/grafana/pkg/plugins" |
|
||||||
) |
|
||||||
|
|
||||||
func GetPluginBundles(c *middleware.Context) Response { |
|
||||||
query := m.GetPluginBundlesQuery{OrgId: c.OrgId} |
|
||||||
|
|
||||||
if err := bus.Dispatch(&query); err != nil { |
|
||||||
return ApiError(500, "Failed to list Plugin Bundles", err) |
|
||||||
} |
|
||||||
|
|
||||||
installedBundlesMap := make(map[string]*dtos.PluginBundle) |
|
||||||
for t, b := range plugins.Bundles { |
|
||||||
installedBundlesMap[t] = &dtos.PluginBundle{ |
|
||||||
Type: b.Type, |
|
||||||
Enabled: b.Enabled, |
|
||||||
Module: b.Module, |
|
||||||
JsonData: make(map[string]interface{}), |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
seenBundles := make(map[string]bool) |
|
||||||
|
|
||||||
result := make([]*dtos.PluginBundle, 0) |
|
||||||
for _, b := range query.Result { |
|
||||||
if def, ok := installedBundlesMap[b.Type]; ok { |
|
||||||
result = append(result, &dtos.PluginBundle{ |
|
||||||
Type: b.Type, |
|
||||||
Enabled: b.Enabled, |
|
||||||
Module: def.Module, |
|
||||||
JsonData: b.JsonData, |
|
||||||
}) |
|
||||||
seenBundles[b.Type] = true |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
for t, b := range installedBundlesMap { |
|
||||||
if _, ok := seenBundles[t]; !ok { |
|
||||||
result = append(result, b) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return Json(200, result) |
|
||||||
} |
|
||||||
|
|
||||||
func UpdatePluginBundle(c *middleware.Context, cmd m.UpdatePluginBundleCmd) Response { |
|
||||||
cmd.OrgId = c.OrgId |
|
||||||
|
|
||||||
if _, ok := plugins.Bundles[cmd.Type]; !ok { |
|
||||||
return ApiError(404, "Bundle type not installed.", nil) |
|
||||||
} |
|
||||||
|
|
||||||
err := bus.Dispatch(&cmd) |
|
||||||
if err != nil { |
|
||||||
return ApiError(500, "Failed to update plugin bundle", err) |
|
||||||
} |
|
||||||
|
|
||||||
return ApiSuccess("Plugin updated") |
|
||||||
} |
|
@ -1,9 +0,0 @@ |
|||||||
{ |
|
||||||
"pluginType": "bundle", |
|
||||||
"type": "core", |
|
||||||
"module": "", |
|
||||||
"enabled": true, |
|
||||||
"panelPlugins": ["graph", "singlestat", "text", "dashlist", "table"], |
|
||||||
"datasourcePlugins": ["mixed", "grafana", "graphite", "cloudwatch", "elasticsearch", "influxdb", "influxdb_08", "kairosdb", "opentsdb", "prometheus"], |
|
||||||
"externalPlugins": [] |
|
||||||
} |
|
Loading…
Reference in new issue