diff --git a/pkg/plugins/backend_datasource.go b/pkg/plugins/backend_datasource.go deleted file mode 100644 index 0e5eaa34243..00000000000 --- a/pkg/plugins/backend_datasource.go +++ /dev/null @@ -1,85 +0,0 @@ -package plugins - -import ( - "context" - "encoding/json" - "os/exec" - "path" - - "github.com/grafana/grafana/pkg/models" - "github.com/grafana/grafana/pkg/plugins/backend" - "github.com/grafana/grafana/pkg/tsdb" - - "github.com/grafana/grafana/pkg/log" - proto "github.com/grafana/grafana/pkg/tsdb/models" - shared "github.com/grafana/grafana/pkg/tsdb/models/proxy" - plugin "github.com/hashicorp/go-plugin" -) - -type BackendDatasource struct { - *PluginBase - - Executable string - log log.Logger - client *plugin.Client -} - -var handshakeConfig = plugin.HandshakeConfig{ - ProtocolVersion: 1, - MagicCookieKey: "GRAFANA_BACKEND_DATASOURCE", - MagicCookieValue: "55d2200a-6492-493a-9353-73b728d468aa", -} - -func (p *BackendDatasource) initBackendPlugin(log log.Logger) error { - p.log = log.New("plugin-id", p.Id) - - p.client = plugin.NewClient(&plugin.ClientConfig{ - HandshakeConfig: handshakeConfig, - Plugins: map[string]plugin.Plugin{p.Id: &shared.TsdbPluginImpl{}}, - Cmd: exec.Command(path.Join(p.PluginDir, p.Executable)), - AllowedProtocols: []plugin.Protocol{plugin.ProtocolGRPC}, - Logger: backend.LogWrapper{Logger: p.log}, - }) - - rpcClient, err := p.client.Client() - if err != nil { - return err - } - - raw, err := rpcClient.Dispense(p.Id) - if err != nil { - return err - } - - plugin := raw.(shared.TsdbPlugin) - response, err := plugin.Query(context.Background(), &proto.TsdbQuery{}) - - if err != nil { - p.log.Error("Response from plugin. ", "response", response) - } else { - p.log.Info("Response from plugin. ", "response", response) - } - - tsdb.RegisterTsdbQueryEndpoint(p.Id, func(dsInfo *models.DataSource) (tsdb.TsdbQueryEndpoint, error) { - return &shared.TsdbWrapper{TsdbPlugin: plugin}, nil - }) - - return nil -} - -func (p *BackendDatasource) Kill() { - p.client.Kill() -} - -func (p *BackendDatasource) Load(decoder *json.Decoder, pluginDir string) error { - if err := decoder.Decode(&p); err != nil { - return err - } - - if err := p.registerPlugin(pluginDir); err != nil { - return err - } - - BackendDatasources[p.Id] = p - return nil -} diff --git a/pkg/plugins/datasource_plugin.go b/pkg/plugins/datasource_plugin.go index 6863b9a1be5..291b3bad431 100644 --- a/pkg/plugins/datasource_plugin.go +++ b/pkg/plugins/datasource_plugin.go @@ -2,10 +2,13 @@ package plugins import ( "encoding/json" + "fmt" "os" "os/exec" "path" "path/filepath" + "runtime" + "strings" "github.com/grafana/grafana/pkg/log" "github.com/grafana/grafana/pkg/models" @@ -55,13 +58,21 @@ func (p *DataSourcePlugin) Load(decoder *json.Decoder, pluginDir string) error { return nil } +var handshakeConfig = plugin.HandshakeConfig{ + ProtocolVersion: 1, + MagicCookieKey: "GRAFANA_BACKEND_DATASOURCE", + MagicCookieValue: "55d2200a-6492-493a-9353-73b728d468aa", +} + func (p *DataSourcePlugin) initBackendPlugin(log log.Logger) error { p.log = log.New("plugin-id", p.Id) + cmd := path.Join(p.PluginDir, fmt.Sprintf("%s_%s_%s", p.Executable, strings.ToLower(runtime.GOOS), strings.ToLower(runtime.GOARCH))) + p.client = plugin.NewClient(&plugin.ClientConfig{ HandshakeConfig: handshakeConfig, Plugins: map[string]plugin.Plugin{p.Id: &shared.TsdbPluginImpl{}}, - Cmd: exec.Command(path.Join(p.PluginDir, p.Executable)), + Cmd: exec.Command(cmd), AllowedProtocols: []plugin.Protocol{plugin.ProtocolGRPC}, Logger: backend.LogWrapper{Logger: p.log}, }) @@ -86,5 +97,7 @@ func (p *DataSourcePlugin) initBackendPlugin(log log.Logger) error { } func (p *DataSourcePlugin) Kill() { - p.client.Kill() + if p.client != nil { + p.client.Kill() + } } diff --git a/pkg/plugins/plugins.go b/pkg/plugins/plugins.go index 3da5ea52465..540321ceca3 100644 --- a/pkg/plugins/plugins.go +++ b/pkg/plugins/plugins.go @@ -18,13 +18,13 @@ import ( ) var ( - DataSources map[string]*DataSourcePlugin - Panels map[string]*PanelPlugin - StaticRoutes []*PluginStaticRoute - Apps map[string]*AppPlugin - Plugins map[string]*PluginBase - BackendDatasources map[string]*BackendDatasource - PluginTypes map[string]interface{} + DataSources map[string]*DataSourcePlugin + Panels map[string]*PanelPlugin + StaticRoutes []*PluginStaticRoute + Apps map[string]*AppPlugin + Plugins map[string]*PluginBase + //BackendDatasources map[string]*BackendDatasource + PluginTypes map[string]interface{} GrafanaLatestVersion string GrafanaHasUpdate bool @@ -52,7 +52,7 @@ func NewPluginManager() (*PluginManager, error) { func (p *PluginManager) Run(ctx context.Context) error { <-ctx.Done() - for _, p := range BackendDatasources { + for _, p := range DataSources { p.Kill() } @@ -68,12 +68,10 @@ func Init() error { Panels = make(map[string]*PanelPlugin) Apps = make(map[string]*AppPlugin) Plugins = make(map[string]*PluginBase) - BackendDatasources = make(map[string]*BackendDatasource) PluginTypes = map[string]interface{}{ "panel": PanelPlugin{}, "datasource": DataSourcePlugin{}, "app": AppPlugin{}, - //"backend-datasource": BackendDatasource{}, } plog.Info("Starting plugin search")