Commit 4ff613a4 by Marcus Efraimsson Committed by GitHub

Backend Plugins: Support handling of streaming resource response (#22580)

Use v0.19.0 of SDK.
Support handling of streaming resource response.
Disable gzip/compression middleware for resources 
to allow chunked/streaming response to clients the gzip
middleware had to be disabled since it buffers the full
response before sending it to the client.

Closes #22569

Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
parent f95c8b78
...@@ -32,7 +32,7 @@ require ( ...@@ -32,7 +32,7 @@ require (
github.com/gorilla/websocket v1.4.1 github.com/gorilla/websocket v1.4.1
github.com/gosimple/slug v1.4.2 github.com/gosimple/slug v1.4.2
github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4 github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4
github.com/grafana/grafana-plugin-sdk-go v0.16.0 github.com/grafana/grafana-plugin-sdk-go v0.19.0
github.com/hashicorp/go-hclog v0.8.0 github.com/hashicorp/go-hclog v0.8.0
github.com/hashicorp/go-plugin v1.0.1 github.com/hashicorp/go-plugin v1.0.1
github.com/hashicorp/go-version v1.1.0 github.com/hashicorp/go-version v1.1.0
......
...@@ -133,10 +133,8 @@ github.com/gosimple/slug v1.4.2 h1:jDmprx3q/9Lfk4FkGZtvzDQ9Cj9eAmsjzeQGp24PeiQ= ...@@ -133,10 +133,8 @@ github.com/gosimple/slug v1.4.2 h1:jDmprx3q/9Lfk4FkGZtvzDQ9Cj9eAmsjzeQGp24PeiQ=
github.com/gosimple/slug v1.4.2/go.mod h1:ER78kgg1Mv0NQGlXiDe57DpCyfbNywXXZ9mIorhxAf0= github.com/gosimple/slug v1.4.2/go.mod h1:ER78kgg1Mv0NQGlXiDe57DpCyfbNywXXZ9mIorhxAf0=
github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4 h1:SPdxCL9BChFTlyi0Khv64vdCW4TMna8+sxL7+Chx+Ag= github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4 h1:SPdxCL9BChFTlyi0Khv64vdCW4TMna8+sxL7+Chx+Ag=
github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4/go.mod h1:nc0XxBzjeGcrMltCDw269LoWF9S8ibhgxolCdA1R8To= github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4/go.mod h1:nc0XxBzjeGcrMltCDw269LoWF9S8ibhgxolCdA1R8To=
github.com/grafana/grafana-plugin-sdk-go v0.16.0 h1:fuoLzsQLs0RKcvXDP/cAQxaZGP1rbnoBwUaY/1yvh6k= github.com/grafana/grafana-plugin-sdk-go v0.19.0 h1:qLq8tOSxZ9O7+AdduXJVU6jEOlg/2eP8UXdhAzQ81g0=
github.com/grafana/grafana-plugin-sdk-go v0.16.0/go.mod h1:D1MkO+4EPCWc1Wrr260hq7wbo7Ox0grnNWBygulq7aM= github.com/grafana/grafana-plugin-sdk-go v0.19.0/go.mod h1:G6Ov9M+FDOZXNw8eKXINO6XzqdUvTs7huwyQp5jLTBQ=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
github.com/hashicorp/go-hclog v0.8.0 h1:z3ollgGRg8RjfJH6UVBaG54R70GFd++QOkvnJH3VSBY= github.com/hashicorp/go-hclog v0.8.0 h1:z3ollgGRg8RjfJH6UVBaG54R70GFd++QOkvnJH3VSBY=
github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
......
...@@ -226,8 +226,8 @@ func (hs *HTTPServer) CheckHealth(c *models.ReqContext) Response { ...@@ -226,8 +226,8 @@ func (hs *HTTPServer) CheckHealth(c *models.ReqContext) Response {
} }
payload := map[string]interface{}{ payload := map[string]interface{}{
"status": resp.Status.String(), "status": resp.Status.String(),
"info": resp.Info, "message": resp.Message,
} }
if resp.Status != backendplugin.HealthStatusOk { if resp.Status != backendplugin.HealthStatusOk {
......
...@@ -8,6 +8,8 @@ import ( ...@@ -8,6 +8,8 @@ import (
"gopkg.in/macaron.v1" "gopkg.in/macaron.v1"
) )
const resourcesPath = "/resources"
func Gziper() macaron.Handler { func Gziper() macaron.Handler {
gziperLogger := log.New("gziper") gziperLogger := log.New("gziper")
gziper := gzip.Gziper() gziper := gzip.Gziper()
...@@ -27,6 +29,11 @@ func Gziper() macaron.Handler { ...@@ -27,6 +29,11 @@ func Gziper() macaron.Handler {
return return
} }
// ignore resources
if (strings.HasPrefix(requestPath, "/api/datasources/") || strings.HasPrefix(requestPath, "/api/plugins/")) && strings.Contains(requestPath, resourcesPath) {
return
}
if _, err := ctx.Invoke(gziper); err != nil { if _, err := ctx.Invoke(gziper); err != nil {
gziperLogger.Error("Invoking gzip handler failed", "err", err) gziperLogger.Error("Invoking gzip handler failed", "err", err)
} }
......
...@@ -72,7 +72,7 @@ func (p *BackendPlugin) start(ctx context.Context) error { ...@@ -72,7 +72,7 @@ func (p *BackendPlugin) start(ctx context.Context) error {
if rawBackend != nil { if rawBackend != nil {
if plugin, ok := rawBackend.(CorePlugin); ok { if plugin, ok := rawBackend.(CorePlugin); ok {
p.core = plugin p.core = plugin
client.DatasourcePlugin = plugin client.CorePlugin = plugin
} }
} }
...@@ -186,8 +186,8 @@ func (p *BackendPlugin) checkHealth(ctx context.Context) (*pluginv2.CheckHealth_ ...@@ -186,8 +186,8 @@ func (p *BackendPlugin) checkHealth(ctx context.Context) (*pluginv2.CheckHealth_
if st, ok := status.FromError(err); ok { if st, ok := status.FromError(err); ok {
if st.Code() == codes.Unimplemented { if st.Code() == codes.Unimplemented {
return &pluginv2.CheckHealth_Response{ return &pluginv2.CheckHealth_Response{
Status: pluginv2.CheckHealth_Response_UNKNOWN, Status: pluginv2.CheckHealth_Response_UNKNOWN,
Info: "Health check not implemented", Message: "Health check not implemented",
}, nil }, nil
} }
} }
...@@ -197,9 +197,13 @@ func (p *BackendPlugin) checkHealth(ctx context.Context) (*pluginv2.CheckHealth_ ...@@ -197,9 +197,13 @@ func (p *BackendPlugin) checkHealth(ctx context.Context) (*pluginv2.CheckHealth_
return res, nil return res, nil
} }
func (p *BackendPlugin) callResource(ctx context.Context, req CallResourceRequest) (*CallResourceResult, error) { func (p *BackendPlugin) callResource(ctx context.Context, req CallResourceRequest) (callResourceResultStream, error) {
p.logger.Debug("Calling resource", "path", req.Path, "method", req.Method) p.logger.Debug("Calling resource", "path", req.Path, "method", req.Method)
if p.core == nil || p.client == nil || p.client.Exited() {
return nil, errors.New("plugin not running, cannot call resource")
}
reqHeaders := map[string]*pluginv2.CallResource_StringList{} reqHeaders := map[string]*pluginv2.CallResource_StringList{}
for k, v := range req.Headers { for k, v := range req.Headers {
reqHeaders[k] = &pluginv2.CallResource_StringList{Values: v} reqHeaders[k] = &pluginv2.CallResource_StringList{Values: v}
...@@ -238,12 +242,14 @@ func (p *BackendPlugin) callResource(ctx context.Context, req CallResourceReques ...@@ -238,12 +242,14 @@ func (p *BackendPlugin) callResource(ctx context.Context, req CallResourceReques
} }
} }
protoResp, err := p.core.CallResource(ctx, protoReq) protoStream, err := p.core.CallResource(ctx, protoReq)
if err != nil { if err != nil {
if st, ok := status.FromError(err); ok { if st, ok := status.FromError(err); ok {
if st.Code() == codes.Unimplemented { if st.Code() == codes.Unimplemented {
return &CallResourceResult{ return &singleCallResourceResult{
Status: http.StatusNotImplemented, result: &CallResourceResult{
Status: http.StatusNotImplemented,
},
}, nil }, nil
} }
} }
...@@ -251,15 +257,8 @@ func (p *BackendPlugin) callResource(ctx context.Context, req CallResourceReques ...@@ -251,15 +257,8 @@ func (p *BackendPlugin) callResource(ctx context.Context, req CallResourceReques
return nil, errutil.Wrap("Failed to call resource", err) return nil, errutil.Wrap("Failed to call resource", err)
} }
respHeaders := map[string][]string{} return &callResourceResultStreamImpl{
for key, values := range protoResp.Headers { stream: protoStream,
respHeaders[key] = values.Values
}
return &CallResourceResult{
Headers: respHeaders,
Body: protoResp.Body,
Status: int(protoResp.Code),
}, nil }, nil
} }
......
...@@ -102,17 +102,11 @@ func NewRendererPluginDescriptor(pluginID, executablePath string, startFns Plugi ...@@ -102,17 +102,11 @@ func NewRendererPluginDescriptor(pluginID, executablePath string, startFns Plugi
} }
type DiagnosticsPlugin interface { type DiagnosticsPlugin interface {
CollectMetrics(ctx context.Context, req *pluginv2.CollectMetrics_Request) (*pluginv2.CollectMetrics_Response, error) plugin.DiagnosticsServer
CheckHealth(ctx context.Context, req *pluginv2.CheckHealth_Request) (*pluginv2.CheckHealth_Response, error)
}
type DatasourcePlugin interface {
DataQuery(ctx context.Context, req *pluginv2.DataQueryRequest) (*pluginv2.DataQueryResponse, error)
} }
type CorePlugin interface { type CorePlugin interface {
CallResource(ctx context.Context, req *pluginv2.CallResource_Request) (*pluginv2.CallResource_Response, error) plugin.CoreClient
DatasourcePlugin
} }
type TransformPlugin interface { type TransformPlugin interface {
...@@ -127,6 +121,6 @@ type LegacyClient struct { ...@@ -127,6 +121,6 @@ type LegacyClient struct {
// Client client for communicating with a plugin using the current plugin protocol. // Client client for communicating with a plugin using the current plugin protocol.
type Client struct { type Client struct {
DatasourcePlugin DatasourcePlugin CorePlugin CorePlugin
TransformPlugin TransformPlugin TransformPlugin TransformPlugin
} }
...@@ -37,8 +37,8 @@ func (hs HealthStatus) String() string { ...@@ -37,8 +37,8 @@ func (hs HealthStatus) String() string {
// CheckHealthResult check health result. // CheckHealthResult check health result.
type CheckHealthResult struct { type CheckHealthResult struct {
Status HealthStatus Status HealthStatus
Info string Message string
} }
func checkHealthResultFromProto(protoResp *pluginv2.CheckHealth_Response) *CheckHealthResult { func checkHealthResultFromProto(protoResp *pluginv2.CheckHealth_Response) *CheckHealthResult {
...@@ -51,8 +51,8 @@ func checkHealthResultFromProto(protoResp *pluginv2.CheckHealth_Response) *Check ...@@ -51,8 +51,8 @@ func checkHealthResultFromProto(protoResp *pluginv2.CheckHealth_Response) *Check
} }
return &CheckHealthResult{ return &CheckHealthResult{
Status: status, Status: status,
Info: protoResp.Info, Message: protoResp.Message,
} }
} }
...@@ -91,3 +91,46 @@ type CallResourceResult struct { ...@@ -91,3 +91,46 @@ type CallResourceResult struct {
Headers map[string][]string Headers map[string][]string
Body []byte Body []byte
} }
type callResourceResultStream interface {
Recv() (*CallResourceResult, error)
Close() error
}
type callResourceResultStreamImpl struct {
stream pluginv2.Core_CallResourceClient
}
func (s *callResourceResultStreamImpl) Recv() (*CallResourceResult, error) {
protoResp, err := s.stream.Recv()
if err != nil {
return nil, err
}
respHeaders := map[string][]string{}
for key, values := range protoResp.Headers {
respHeaders[key] = values.Values
}
return &CallResourceResult{
Headers: respHeaders,
Body: protoResp.Body,
Status: int(protoResp.Code),
}, nil
}
func (s *callResourceResultStreamImpl) Close() error {
return s.stream.CloseSend()
}
type singleCallResourceResult struct {
result *CallResourceResult
}
func (s *singleCallResourceResult) Recv() (*CallResourceResult, error) {
return s.result, nil
}
func (s *singleCallResourceResult) Close() error {
return nil
}
...@@ -3,6 +3,7 @@ package backendplugin ...@@ -3,6 +3,7 @@ package backendplugin
import ( import (
"context" "context"
"errors" "errors"
"io"
"sync" "sync"
"time" "time"
...@@ -209,30 +210,59 @@ func (m *manager) CallResource(config PluginConfig, c *models.ReqContext, path s ...@@ -209,30 +210,59 @@ func (m *manager) CallResource(config PluginConfig, c *models.ReqContext, path s
Body: body, Body: body,
} }
res, err := p.callResource(clonedReq.Context(), req) stream, err := p.callResource(clonedReq.Context(), req)
if err != nil { if err != nil {
c.JsonApiErr(500, "Failed to call resource", err) c.JsonApiErr(500, "Failed to call resource", err)
return return
} }
// Make sure a content type always is returned in response processedStreams := 0
if _, exists := res.Headers["Content-Type"]; !exists {
res.Headers["Content-Type"] = []string{"application/json"}
}
for k, values := range res.Headers { for {
if k == "Set-Cookie" { resp, err := stream.Recv()
continue if err == io.EOF {
if processedStreams == 0 {
c.JsonApiErr(500, "Received empty resource response ", nil)
}
return
}
if err != nil {
if processedStreams == 0 {
c.JsonApiErr(500, "Failed to receive response from resource call", err)
} else {
p.logger.Error("Failed to receive response from resource call", "error", err)
}
return
}
// Expected that headers and status are only part of first stream
if processedStreams == 0 {
// Make sure a content type always is returned in response
if _, exists := resp.Headers["Content-Type"]; !exists {
resp.Headers["Content-Type"] = []string{"application/json"}
}
for k, values := range resp.Headers {
// Due to security reasons we don't want to forward
// cookies from a backend plugin to clients/browsers.
if k == "Set-Cookie" {
continue
}
for _, v := range values {
c.Resp.Header().Add(k, v)
}
}
c.WriteHeader(resp.Status)
} }
for _, v := range values { if _, err := c.Write(resp.Body); err != nil {
c.Resp.Header().Add(k, v) p.logger.Error("Failed to write resource response", "error", err)
} }
}
c.WriteHeader(res.Status) c.Resp.Flush()
if _, err := c.Write(res.Body); err != nil { processedStreams++
p.logger.Error("Failed to write resource response", "error", err)
} }
} }
......
...@@ -13,12 +13,12 @@ import ( ...@@ -13,12 +13,12 @@ import (
"github.com/grafana/grafana/pkg/tsdb" "github.com/grafana/grafana/pkg/tsdb"
) )
func NewDatasourcePluginWrapperV2(log log.Logger, pluginId, pluginType string, plugin backendplugin.DatasourcePlugin) *DatasourcePluginWrapperV2 { func NewDatasourcePluginWrapperV2(log log.Logger, pluginId, pluginType string, plugin backendplugin.CorePlugin) *DatasourcePluginWrapperV2 {
return &DatasourcePluginWrapperV2{DatasourcePlugin: plugin, logger: log, pluginId: pluginId, pluginType: pluginType} return &DatasourcePluginWrapperV2{CorePlugin: plugin, logger: log, pluginId: pluginId, pluginType: pluginType}
} }
type DatasourcePluginWrapperV2 struct { type DatasourcePluginWrapperV2 struct {
backendplugin.DatasourcePlugin backendplugin.CorePlugin
logger log.Logger logger log.Logger
pluginId string pluginId string
pluginType string pluginType string
...@@ -68,7 +68,7 @@ func (tw *DatasourcePluginWrapperV2) Query(ctx context.Context, ds *models.DataS ...@@ -68,7 +68,7 @@ func (tw *DatasourcePluginWrapperV2) Query(ctx context.Context, ds *models.DataS
}) })
} }
pbRes, err := tw.DatasourcePlugin.DataQuery(ctx, pbQuery) pbRes, err := tw.CorePlugin.DataQuery(ctx, pbQuery)
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
...@@ -68,9 +68,9 @@ func (p *DataSourcePlugin) onLegacyPluginStart(pluginID string, client *backendp ...@@ -68,9 +68,9 @@ func (p *DataSourcePlugin) onLegacyPluginStart(pluginID string, client *backendp
} }
func (p *DataSourcePlugin) onPluginStart(pluginID string, client *backendplugin.Client, logger log.Logger) error { func (p *DataSourcePlugin) onPluginStart(pluginID string, client *backendplugin.Client, logger log.Logger) error {
if client.DatasourcePlugin != nil { if client.CorePlugin != nil {
tsdb.RegisterTsdbQueryEndpoint(pluginID, func(dsInfo *models.DataSource) (tsdb.TsdbQueryEndpoint, error) { tsdb.RegisterTsdbQueryEndpoint(pluginID, func(dsInfo *models.DataSource) (tsdb.TsdbQueryEndpoint, error) {
return wrapper.NewDatasourcePluginWrapperV2(logger, p.Id, p.Type, client.DatasourcePlugin), nil return wrapper.NewDatasourcePluginWrapperV2(logger, p.Id, p.Type, client.CorePlugin), nil
}) })
} }
......
...@@ -53,9 +53,9 @@ func (p *TransformPlugin) Load(decoder *json.Decoder, pluginDir string, backendP ...@@ -53,9 +53,9 @@ func (p *TransformPlugin) Load(decoder *json.Decoder, pluginDir string, backendP
func (p *TransformPlugin) onPluginStart(pluginID string, client *backendplugin.Client, logger log.Logger) error { func (p *TransformPlugin) onPluginStart(pluginID string, client *backendplugin.Client, logger log.Logger) error {
p.TransformWrapper = NewTransformWrapper(logger, client.TransformPlugin) p.TransformWrapper = NewTransformWrapper(logger, client.TransformPlugin)
if client.DatasourcePlugin != nil { if client.CorePlugin != nil {
tsdb.RegisterTsdbQueryEndpoint(pluginID, func(dsInfo *models.DataSource) (tsdb.TsdbQueryEndpoint, error) { tsdb.RegisterTsdbQueryEndpoint(pluginID, func(dsInfo *models.DataSource) (tsdb.TsdbQueryEndpoint, error) {
return wrapper.NewDatasourcePluginWrapperV2(logger, p.Id, p.Type, client.DatasourcePlugin), nil return wrapper.NewDatasourcePluginWrapperV2(logger, p.Id, p.Type, client.CorePlugin), nil
}) })
} }
......
...@@ -12,6 +12,10 @@ type CoreServer interface { ...@@ -12,6 +12,10 @@ type CoreServer interface {
pluginv2.CoreServer pluginv2.CoreServer
} }
type CoreClient interface {
pluginv2.CoreClient
}
// CoreGRPCPlugin implements the GRPCPlugin interface from github.com/hashicorp/go-plugin. // CoreGRPCPlugin implements the GRPCPlugin interface from github.com/hashicorp/go-plugin.
type CoreGRPCPlugin struct { type CoreGRPCPlugin struct {
plugin.NetRPCUnsupportedPlugin plugin.NetRPCUnsupportedPlugin
...@@ -38,21 +42,21 @@ func (s *coreGRPCServer) DataQuery(ctx context.Context, req *pluginv2.DataQueryR ...@@ -38,21 +42,21 @@ func (s *coreGRPCServer) DataQuery(ctx context.Context, req *pluginv2.DataQueryR
return s.server.DataQuery(ctx, req) return s.server.DataQuery(ctx, req)
} }
func (s *coreGRPCServer) CallResource(ctx context.Context, req *pluginv2.CallResource_Request) (*pluginv2.CallResource_Response, error) { func (s *coreGRPCServer) CallResource(req *pluginv2.CallResource_Request, srv pluginv2.Core_CallResourceServer) error {
return s.server.CallResource(ctx, req) return s.server.CallResource(req, srv)
} }
type coreGRPCClient struct { type coreGRPCClient struct {
client pluginv2.CoreClient client pluginv2.CoreClient
} }
func (m *coreGRPCClient) DataQuery(ctx context.Context, req *pluginv2.DataQueryRequest) (*pluginv2.DataQueryResponse, error) { func (m *coreGRPCClient) DataQuery(ctx context.Context, req *pluginv2.DataQueryRequest, opts ...grpc.CallOption) (*pluginv2.DataQueryResponse, error) {
return m.client.DataQuery(ctx, req) return m.client.DataQuery(ctx, req, opts...)
} }
func (m *coreGRPCClient) CallResource(ctx context.Context, req *pluginv2.CallResource_Request) (*pluginv2.CallResource_Response, error) { func (m *coreGRPCClient) CallResource(ctx context.Context, req *pluginv2.CallResource_Request, opts ...grpc.CallOption) (pluginv2.Core_CallResourceClient, error) {
return m.client.CallResource(ctx, req) return m.client.CallResource(ctx, req, opts...)
} }
var _ CoreServer = &coreGRPCServer{} var _ CoreServer = &coreGRPCServer{}
var _ CoreServer = &coreGRPCClient{} var _ CoreClient = &coreGRPCClient{}
...@@ -200,6 +200,13 @@ func buildArrowSchema(f *Frame, fs []arrow.Field) (*arrow.Schema, error) { ...@@ -200,6 +200,13 @@ func buildArrowSchema(f *Frame, fs []arrow.Field) (*arrow.Schema, error) {
} }
tableMetaMap["meta"] = str tableMetaMap["meta"] = str
} }
if len(f.Warnings) > 0 {
str, err := toJSONString(f.Warnings)
if err != nil {
return nil, err
}
tableMetaMap["warnings"] = str
}
tableMeta := arrow.MetadataFrom(tableMetaMap) tableMeta := arrow.MetadataFrom(tableMetaMap)
return arrow.NewSchema(fs, &tableMeta), nil return arrow.NewSchema(fs, &tableMeta), nil
...@@ -633,6 +640,14 @@ func UnmarshalArrow(b []byte) (*Frame, error) { ...@@ -633,6 +640,14 @@ func UnmarshalArrow(b []byte) (*Frame, error) {
} }
} }
if warningsAsString, ok := getMDKey("warnings", metaData); ok {
var err error
frame.Warnings, err = WarningsFromJSON(warningsAsString)
if err != nil {
return nil, err
}
}
nullable, err := initializeFrameFields(schema, frame) nullable, err := initializeFrameFields(schema, frame)
if err != nil { if err != nil {
return nil, err return nil, err
......
...@@ -12,8 +12,9 @@ type Frame struct { ...@@ -12,8 +12,9 @@ type Frame struct {
Name string Name string
Fields []*Field Fields []*Field
RefID string RefID string
Meta *QueryResultMeta Meta *QueryResultMeta
Warnings []Warning
} }
// Field represents a column of data with a specific type. // Field represents a column of data with a specific type.
...@@ -38,6 +39,11 @@ func (f *Frame) AppendRow(vals ...interface{}) { ...@@ -38,6 +39,11 @@ func (f *Frame) AppendRow(vals ...interface{}) {
} }
} }
// AppendWarning adds warnings to the data frame.
func (f *Frame) AppendWarning(message string, details string) {
f.Warnings = append(f.Warnings, Warning{Message: message, Details: details})
}
// AppendRowSafe adds a new row to the Frame by appending to each each element of vals to // AppendRowSafe adds a new row to the Frame by appending to each each element of vals to
// the corresponding Field in the dataframe. It has the some constraints as AppendRow but will // the corresponding Field in the dataframe. It has the some constraints as AppendRow but will
// return an error under those conditions instead of panicing. // return an error under those conditions instead of panicing.
......
package dataframe
import "encoding/json"
// Warning contains information about problems in a dataframe.
type Warning struct {
// Short message (typically shown in the header)
Message string `json:"message,omitempty"`
// longer error message, shown in the body
Details string `json:"details,omitempty"`
}
// WarningsFromJSON creates a *Warning from a json string.
func WarningsFromJSON(jsonStr string) ([]Warning, error) {
var m []Warning
err := json.Unmarshal([]byte(jsonStr), &m)
if err != nil {
return nil, err
}
return m, nil
}
...@@ -50,7 +50,7 @@ func (x CheckHealth_Response_HealthStatus) String() string { ...@@ -50,7 +50,7 @@ func (x CheckHealth_Response_HealthStatus) String() string {
} }
func (CheckHealth_Response_HealthStatus) EnumDescriptor() ([]byte, []int) { func (CheckHealth_Response_HealthStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{8, 1, 0} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{9, 1, 0}
} }
type DataSourceConfig struct { type DataSourceConfig struct {
...@@ -345,23 +345,88 @@ func (m *DataQuery) GetJson() []byte { ...@@ -345,23 +345,88 @@ func (m *DataQuery) GetJson() []byte {
return nil return nil
} }
type User struct {
Login string `protobuf:"bytes,1,opt,name=login,proto3" json:"login,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
Role string `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *User) Reset() { *m = User{} }
func (m *User) String() string { return proto.CompactTextString(m) }
func (*User) ProtoMessage() {}
func (*User) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{4}
}
func (m *User) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_User.Unmarshal(m, b)
}
func (m *User) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_User.Marshal(b, m, deterministic)
}
func (m *User) XXX_Merge(src proto.Message) {
xxx_messageInfo_User.Merge(m, src)
}
func (m *User) XXX_Size() int {
return xxx_messageInfo_User.Size(m)
}
func (m *User) XXX_DiscardUnknown() {
xxx_messageInfo_User.DiscardUnknown(m)
}
var xxx_messageInfo_User proto.InternalMessageInfo
func (m *User) GetLogin() string {
if m != nil {
return m.Login
}
return ""
}
func (m *User) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *User) GetEmail() string {
if m != nil {
return m.Email
}
return ""
}
func (m *User) GetRole() string {
if m != nil {
return m.Role
}
return ""
}
type DataQueryRequest struct { type DataQueryRequest struct {
// Plugin Configuration // Plugin Configuration
Config *PluginConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` Config *PluginConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
// Environment info // Environment info
Headers map[string]string `protobuf:"bytes,2,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Headers map[string]string `protobuf:"bytes,2,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// List of queries // List of queries
Queries []*DataQuery `protobuf:"bytes,3,rep,name=queries,proto3" json:"queries,omitempty"` Queries []*DataQuery `protobuf:"bytes,3,rep,name=queries,proto3" json:"queries,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` //Info about the user who calls the plugin.
XXX_unrecognized []byte `json:"-"` User *User `protobuf:"bytes,4,opt,name=user,proto3" json:"user,omitempty"`
XXX_sizecache int32 `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
} }
func (m *DataQueryRequest) Reset() { *m = DataQueryRequest{} } func (m *DataQueryRequest) Reset() { *m = DataQueryRequest{} }
func (m *DataQueryRequest) String() string { return proto.CompactTextString(m) } func (m *DataQueryRequest) String() string { return proto.CompactTextString(m) }
func (*DataQueryRequest) ProtoMessage() {} func (*DataQueryRequest) ProtoMessage() {}
func (*DataQueryRequest) Descriptor() ([]byte, []int) { func (*DataQueryRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{4} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{5}
} }
func (m *DataQueryRequest) XXX_Unmarshal(b []byte) error { func (m *DataQueryRequest) XXX_Unmarshal(b []byte) error {
...@@ -403,6 +468,13 @@ func (m *DataQueryRequest) GetQueries() []*DataQuery { ...@@ -403,6 +468,13 @@ func (m *DataQueryRequest) GetQueries() []*DataQuery {
return nil return nil
} }
func (m *DataQueryRequest) GetUser() *User {
if m != nil {
return m.User
}
return nil
}
type DataQueryResponse struct { type DataQueryResponse struct {
// Arrow encoded DataFrames // Arrow encoded DataFrames
// Each frame encodes its own: Errors, meta, and refId // Each frame encodes its own: Errors, meta, and refId
...@@ -418,7 +490,7 @@ func (m *DataQueryResponse) Reset() { *m = DataQueryResponse{} } ...@@ -418,7 +490,7 @@ func (m *DataQueryResponse) Reset() { *m = DataQueryResponse{} }
func (m *DataQueryResponse) String() string { return proto.CompactTextString(m) } func (m *DataQueryResponse) String() string { return proto.CompactTextString(m) }
func (*DataQueryResponse) ProtoMessage() {} func (*DataQueryResponse) ProtoMessage() {}
func (*DataQueryResponse) Descriptor() ([]byte, []int) { func (*DataQueryResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{5} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{6}
} }
func (m *DataQueryResponse) XXX_Unmarshal(b []byte) error { func (m *DataQueryResponse) XXX_Unmarshal(b []byte) error {
...@@ -463,7 +535,7 @@ func (m *CallResource) Reset() { *m = CallResource{} } ...@@ -463,7 +535,7 @@ func (m *CallResource) Reset() { *m = CallResource{} }
func (m *CallResource) String() string { return proto.CompactTextString(m) } func (m *CallResource) String() string { return proto.CompactTextString(m) }
func (*CallResource) ProtoMessage() {} func (*CallResource) ProtoMessage() {}
func (*CallResource) Descriptor() ([]byte, []int) { func (*CallResource) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{6} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{7}
} }
func (m *CallResource) XXX_Unmarshal(b []byte) error { func (m *CallResource) XXX_Unmarshal(b []byte) error {
...@@ -495,7 +567,7 @@ func (m *CallResource_StringList) Reset() { *m = CallResource_StringList ...@@ -495,7 +567,7 @@ func (m *CallResource_StringList) Reset() { *m = CallResource_StringList
func (m *CallResource_StringList) String() string { return proto.CompactTextString(m) } func (m *CallResource_StringList) String() string { return proto.CompactTextString(m) }
func (*CallResource_StringList) ProtoMessage() {} func (*CallResource_StringList) ProtoMessage() {}
func (*CallResource_StringList) Descriptor() ([]byte, []int) { func (*CallResource_StringList) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{6, 0} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{7, 0}
} }
func (m *CallResource_StringList) XXX_Unmarshal(b []byte) error { func (m *CallResource_StringList) XXX_Unmarshal(b []byte) error {
...@@ -530,6 +602,7 @@ type CallResource_Request struct { ...@@ -530,6 +602,7 @@ type CallResource_Request struct {
Url string `protobuf:"bytes,4,opt,name=url,proto3" json:"url,omitempty"` Url string `protobuf:"bytes,4,opt,name=url,proto3" json:"url,omitempty"`
Headers map[string]*CallResource_StringList `protobuf:"bytes,5,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Headers map[string]*CallResource_StringList `protobuf:"bytes,5,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
Body []byte `protobuf:"bytes,6,opt,name=body,proto3" json:"body,omitempty"` Body []byte `protobuf:"bytes,6,opt,name=body,proto3" json:"body,omitempty"`
User *User `protobuf:"bytes,7,opt,name=user,proto3" json:"user,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -539,7 +612,7 @@ func (m *CallResource_Request) Reset() { *m = CallResource_Request{} } ...@@ -539,7 +612,7 @@ func (m *CallResource_Request) Reset() { *m = CallResource_Request{} }
func (m *CallResource_Request) String() string { return proto.CompactTextString(m) } func (m *CallResource_Request) String() string { return proto.CompactTextString(m) }
func (*CallResource_Request) ProtoMessage() {} func (*CallResource_Request) ProtoMessage() {}
func (*CallResource_Request) Descriptor() ([]byte, []int) { func (*CallResource_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{6, 1} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{7, 1}
} }
func (m *CallResource_Request) XXX_Unmarshal(b []byte) error { func (m *CallResource_Request) XXX_Unmarshal(b []byte) error {
...@@ -602,6 +675,13 @@ func (m *CallResource_Request) GetBody() []byte { ...@@ -602,6 +675,13 @@ func (m *CallResource_Request) GetBody() []byte {
return nil return nil
} }
func (m *CallResource_Request) GetUser() *User {
if m != nil {
return m.User
}
return nil
}
type CallResource_Response struct { type CallResource_Response struct {
Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
Headers map[string]*CallResource_StringList `protobuf:"bytes,2,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Headers map[string]*CallResource_StringList `protobuf:"bytes,2,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
...@@ -615,7 +695,7 @@ func (m *CallResource_Response) Reset() { *m = CallResource_Response{} } ...@@ -615,7 +695,7 @@ func (m *CallResource_Response) Reset() { *m = CallResource_Response{} }
func (m *CallResource_Response) String() string { return proto.CompactTextString(m) } func (m *CallResource_Response) String() string { return proto.CompactTextString(m) }
func (*CallResource_Response) ProtoMessage() {} func (*CallResource_Response) ProtoMessage() {}
func (*CallResource_Response) Descriptor() ([]byte, []int) { func (*CallResource_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{6, 2} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{7, 2}
} }
func (m *CallResource_Response) XXX_Unmarshal(b []byte) error { func (m *CallResource_Response) XXX_Unmarshal(b []byte) error {
...@@ -667,7 +747,7 @@ func (m *CollectMetrics) Reset() { *m = CollectMetrics{} } ...@@ -667,7 +747,7 @@ func (m *CollectMetrics) Reset() { *m = CollectMetrics{} }
func (m *CollectMetrics) String() string { return proto.CompactTextString(m) } func (m *CollectMetrics) String() string { return proto.CompactTextString(m) }
func (*CollectMetrics) ProtoMessage() {} func (*CollectMetrics) ProtoMessage() {}
func (*CollectMetrics) Descriptor() ([]byte, []int) { func (*CollectMetrics) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{7} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{8}
} }
func (m *CollectMetrics) XXX_Unmarshal(b []byte) error { func (m *CollectMetrics) XXX_Unmarshal(b []byte) error {
...@@ -698,7 +778,7 @@ func (m *CollectMetrics_Request) Reset() { *m = CollectMetrics_Request{} ...@@ -698,7 +778,7 @@ func (m *CollectMetrics_Request) Reset() { *m = CollectMetrics_Request{}
func (m *CollectMetrics_Request) String() string { return proto.CompactTextString(m) } func (m *CollectMetrics_Request) String() string { return proto.CompactTextString(m) }
func (*CollectMetrics_Request) ProtoMessage() {} func (*CollectMetrics_Request) ProtoMessage() {}
func (*CollectMetrics_Request) Descriptor() ([]byte, []int) { func (*CollectMetrics_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{7, 0} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{8, 0}
} }
func (m *CollectMetrics_Request) XXX_Unmarshal(b []byte) error { func (m *CollectMetrics_Request) XXX_Unmarshal(b []byte) error {
...@@ -730,7 +810,7 @@ func (m *CollectMetrics_Payload) Reset() { *m = CollectMetrics_Payload{} ...@@ -730,7 +810,7 @@ func (m *CollectMetrics_Payload) Reset() { *m = CollectMetrics_Payload{}
func (m *CollectMetrics_Payload) String() string { return proto.CompactTextString(m) } func (m *CollectMetrics_Payload) String() string { return proto.CompactTextString(m) }
func (*CollectMetrics_Payload) ProtoMessage() {} func (*CollectMetrics_Payload) ProtoMessage() {}
func (*CollectMetrics_Payload) Descriptor() ([]byte, []int) { func (*CollectMetrics_Payload) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{7, 1} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{8, 1}
} }
func (m *CollectMetrics_Payload) XXX_Unmarshal(b []byte) error { func (m *CollectMetrics_Payload) XXX_Unmarshal(b []byte) error {
...@@ -769,7 +849,7 @@ func (m *CollectMetrics_Response) Reset() { *m = CollectMetrics_Response ...@@ -769,7 +849,7 @@ func (m *CollectMetrics_Response) Reset() { *m = CollectMetrics_Response
func (m *CollectMetrics_Response) String() string { return proto.CompactTextString(m) } func (m *CollectMetrics_Response) String() string { return proto.CompactTextString(m) }
func (*CollectMetrics_Response) ProtoMessage() {} func (*CollectMetrics_Response) ProtoMessage() {}
func (*CollectMetrics_Response) Descriptor() ([]byte, []int) { func (*CollectMetrics_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{7, 2} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{8, 2}
} }
func (m *CollectMetrics_Response) XXX_Unmarshal(b []byte) error { func (m *CollectMetrics_Response) XXX_Unmarshal(b []byte) error {
...@@ -807,7 +887,7 @@ func (m *CheckHealth) Reset() { *m = CheckHealth{} } ...@@ -807,7 +887,7 @@ func (m *CheckHealth) Reset() { *m = CheckHealth{} }
func (m *CheckHealth) String() string { return proto.CompactTextString(m) } func (m *CheckHealth) String() string { return proto.CompactTextString(m) }
func (*CheckHealth) ProtoMessage() {} func (*CheckHealth) ProtoMessage() {}
func (*CheckHealth) Descriptor() ([]byte, []int) { func (*CheckHealth) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{8} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{9}
} }
func (m *CheckHealth) XXX_Unmarshal(b []byte) error { func (m *CheckHealth) XXX_Unmarshal(b []byte) error {
...@@ -829,16 +909,17 @@ func (m *CheckHealth) XXX_DiscardUnknown() { ...@@ -829,16 +909,17 @@ func (m *CheckHealth) XXX_DiscardUnknown() {
var xxx_messageInfo_CheckHealth proto.InternalMessageInfo var xxx_messageInfo_CheckHealth proto.InternalMessageInfo
type CheckHealth_Request struct { type CheckHealth_Request struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"` Config *PluginConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
XXX_unrecognized []byte `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
} }
func (m *CheckHealth_Request) Reset() { *m = CheckHealth_Request{} } func (m *CheckHealth_Request) Reset() { *m = CheckHealth_Request{} }
func (m *CheckHealth_Request) String() string { return proto.CompactTextString(m) } func (m *CheckHealth_Request) String() string { return proto.CompactTextString(m) }
func (*CheckHealth_Request) ProtoMessage() {} func (*CheckHealth_Request) ProtoMessage() {}
func (*CheckHealth_Request) Descriptor() ([]byte, []int) { func (*CheckHealth_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{8, 0} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{9, 0}
} }
func (m *CheckHealth_Request) XXX_Unmarshal(b []byte) error { func (m *CheckHealth_Request) XXX_Unmarshal(b []byte) error {
...@@ -859,9 +940,17 @@ func (m *CheckHealth_Request) XXX_DiscardUnknown() { ...@@ -859,9 +940,17 @@ func (m *CheckHealth_Request) XXX_DiscardUnknown() {
var xxx_messageInfo_CheckHealth_Request proto.InternalMessageInfo var xxx_messageInfo_CheckHealth_Request proto.InternalMessageInfo
func (m *CheckHealth_Request) GetConfig() *PluginConfig {
if m != nil {
return m.Config
}
return nil
}
type CheckHealth_Response struct { type CheckHealth_Response struct {
Status CheckHealth_Response_HealthStatus `protobuf:"varint,1,opt,name=status,proto3,enum=pluginv2.CheckHealth_Response_HealthStatus" json:"status,omitempty"` Status CheckHealth_Response_HealthStatus `protobuf:"varint,1,opt,name=status,proto3,enum=pluginv2.CheckHealth_Response_HealthStatus" json:"status,omitempty"`
Info string `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
JsonDetails string `protobuf:"bytes,3,opt,name=jsonDetails,proto3" json:"jsonDetails,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -871,7 +960,7 @@ func (m *CheckHealth_Response) Reset() { *m = CheckHealth_Response{} } ...@@ -871,7 +960,7 @@ func (m *CheckHealth_Response) Reset() { *m = CheckHealth_Response{} }
func (m *CheckHealth_Response) String() string { return proto.CompactTextString(m) } func (m *CheckHealth_Response) String() string { return proto.CompactTextString(m) }
func (*CheckHealth_Response) ProtoMessage() {} func (*CheckHealth_Response) ProtoMessage() {}
func (*CheckHealth_Response) Descriptor() ([]byte, []int) { func (*CheckHealth_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{8, 1} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{9, 1}
} }
func (m *CheckHealth_Response) XXX_Unmarshal(b []byte) error { func (m *CheckHealth_Response) XXX_Unmarshal(b []byte) error {
...@@ -899,9 +988,16 @@ func (m *CheckHealth_Response) GetStatus() CheckHealth_Response_HealthStatus { ...@@ -899,9 +988,16 @@ func (m *CheckHealth_Response) GetStatus() CheckHealth_Response_HealthStatus {
return CheckHealth_Response_UNKNOWN return CheckHealth_Response_UNKNOWN
} }
func (m *CheckHealth_Response) GetInfo() string { func (m *CheckHealth_Response) GetMessage() string {
if m != nil {
return m.Message
}
return ""
}
func (m *CheckHealth_Response) GetJsonDetails() string {
if m != nil { if m != nil {
return m.Info return m.JsonDetails
} }
return "" return ""
} }
...@@ -925,7 +1021,7 @@ func (m *StreamingRequest) Reset() { *m = StreamingRequest{} } ...@@ -925,7 +1021,7 @@ func (m *StreamingRequest) Reset() { *m = StreamingRequest{} }
func (m *StreamingRequest) String() string { return proto.CompactTextString(m) } func (m *StreamingRequest) String() string { return proto.CompactTextString(m) }
func (*StreamingRequest) ProtoMessage() {} func (*StreamingRequest) ProtoMessage() {}
func (*StreamingRequest) Descriptor() ([]byte, []int) { func (*StreamingRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{9} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{10}
} }
func (m *StreamingRequest) XXX_Unmarshal(b []byte) error { func (m *StreamingRequest) XXX_Unmarshal(b []byte) error {
...@@ -994,7 +1090,7 @@ func (m *StreamingMessage) Reset() { *m = StreamingMessage{} } ...@@ -994,7 +1090,7 @@ func (m *StreamingMessage) Reset() { *m = StreamingMessage{} }
func (m *StreamingMessage) String() string { return proto.CompactTextString(m) } func (m *StreamingMessage) String() string { return proto.CompactTextString(m) }
func (*StreamingMessage) ProtoMessage() {} func (*StreamingMessage) ProtoMessage() {}
func (*StreamingMessage) Descriptor() ([]byte, []int) { func (*StreamingMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{10} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{11}
} }
func (m *StreamingMessage) XXX_Unmarshal(b []byte) error { func (m *StreamingMessage) XXX_Unmarshal(b []byte) error {
...@@ -1047,7 +1143,7 @@ func (m *StreamingClose) Reset() { *m = StreamingClose{} } ...@@ -1047,7 +1143,7 @@ func (m *StreamingClose) Reset() { *m = StreamingClose{} }
func (m *StreamingClose) String() string { return proto.CompactTextString(m) } func (m *StreamingClose) String() string { return proto.CompactTextString(m) }
func (*StreamingClose) ProtoMessage() {} func (*StreamingClose) ProtoMessage() {}
func (*StreamingClose) Descriptor() ([]byte, []int) { func (*StreamingClose) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{11} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{12}
} }
func (m *StreamingClose) XXX_Unmarshal(b []byte) error { func (m *StreamingClose) XXX_Unmarshal(b []byte) error {
...@@ -1094,7 +1190,7 @@ func (m *RenderRequest) Reset() { *m = RenderRequest{} } ...@@ -1094,7 +1190,7 @@ func (m *RenderRequest) Reset() { *m = RenderRequest{} }
func (m *RenderRequest) String() string { return proto.CompactTextString(m) } func (m *RenderRequest) String() string { return proto.CompactTextString(m) }
func (*RenderRequest) ProtoMessage() {} func (*RenderRequest) ProtoMessage() {}
func (*RenderRequest) Descriptor() ([]byte, []int) { func (*RenderRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{12} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{13}
} }
func (m *RenderRequest) XXX_Unmarshal(b []byte) error { func (m *RenderRequest) XXX_Unmarshal(b []byte) error {
...@@ -1189,7 +1285,7 @@ func (m *RenderResponse) Reset() { *m = RenderResponse{} } ...@@ -1189,7 +1285,7 @@ func (m *RenderResponse) Reset() { *m = RenderResponse{} }
func (m *RenderResponse) String() string { return proto.CompactTextString(m) } func (m *RenderResponse) String() string { return proto.CompactTextString(m) }
func (*RenderResponse) ProtoMessage() {} func (*RenderResponse) ProtoMessage() {}
func (*RenderResponse) Descriptor() ([]byte, []int) { func (*RenderResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{13} return fileDescriptor_5ab9ba5b8d8b2ba5, []int{14}
} }
func (m *RenderResponse) XXX_Unmarshal(b []byte) error { func (m *RenderResponse) XXX_Unmarshal(b []byte) error {
...@@ -1224,6 +1320,7 @@ func init() { ...@@ -1224,6 +1320,7 @@ func init() {
proto.RegisterMapType((map[string]string)(nil), "pluginv2.PluginConfig.DecryptedSecureJsonDataEntry") proto.RegisterMapType((map[string]string)(nil), "pluginv2.PluginConfig.DecryptedSecureJsonDataEntry")
proto.RegisterType((*TimeRange)(nil), "pluginv2.TimeRange") proto.RegisterType((*TimeRange)(nil), "pluginv2.TimeRange")
proto.RegisterType((*DataQuery)(nil), "pluginv2.DataQuery") proto.RegisterType((*DataQuery)(nil), "pluginv2.DataQuery")
proto.RegisterType((*User)(nil), "pluginv2.User")
proto.RegisterType((*DataQueryRequest)(nil), "pluginv2.DataQueryRequest") proto.RegisterType((*DataQueryRequest)(nil), "pluginv2.DataQueryRequest")
proto.RegisterMapType((map[string]string)(nil), "pluginv2.DataQueryRequest.HeadersEntry") proto.RegisterMapType((map[string]string)(nil), "pluginv2.DataQueryRequest.HeadersEntry")
proto.RegisterType((*DataQueryResponse)(nil), "pluginv2.DataQueryResponse") proto.RegisterType((*DataQueryResponse)(nil), "pluginv2.DataQueryResponse")
...@@ -1252,93 +1349,99 @@ func init() { ...@@ -1252,93 +1349,99 @@ func init() {
func init() { proto.RegisterFile("backend.proto", fileDescriptor_5ab9ba5b8d8b2ba5) } func init() { proto.RegisterFile("backend.proto", fileDescriptor_5ab9ba5b8d8b2ba5) }
var fileDescriptor_5ab9ba5b8d8b2ba5 = []byte{ var fileDescriptor_5ab9ba5b8d8b2ba5 = []byte{
// 1375 bytes of a gzipped FileDescriptorProto // 1463 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0x4b, 0x8f, 0x1b, 0xc5, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0x4b, 0x8f, 0x1b, 0xc5,
0x16, 0xbe, 0xed, 0xc7, 0x78, 0x7c, 0xec, 0x4c, 0x9c, 0xca, 0x28, 0xb1, 0x3a, 0xb9, 0xb9, 0x8e, 0x16, 0xbe, 0xed, 0xc7, 0x78, 0xfa, 0xd8, 0x99, 0x38, 0x95, 0x51, 0x62, 0x75, 0x72, 0xe7, 0x4e,
0x15, 0xdd, 0x3b, 0xb9, 0x80, 0x03, 0xce, 0x02, 0x94, 0x48, 0xa0, 0xe0, 0x71, 0x5e, 0x93, 0xc9, 0xac, 0xe8, 0x32, 0xe1, 0xe1, 0x04, 0x67, 0x01, 0x24, 0x12, 0x28, 0xf1, 0x38, 0xaf, 0x89, 0x93,
0x4c, 0xca, 0x89, 0x10, 0x0b, 0x90, 0xca, 0xdd, 0xc7, 0x76, 0x33, 0xed, 0x2e, 0xa7, 0xba, 0x3a, 0x49, 0x39, 0x11, 0x22, 0x12, 0x48, 0xe5, 0xee, 0xb2, 0xdd, 0x4c, 0x77, 0x97, 0x53, 0x5d, 0x1d,
0x60, 0x7e, 0x04, 0x1b, 0xd6, 0xd9, 0xb1, 0x06, 0xc1, 0x6f, 0x60, 0xc5, 0x9e, 0x05, 0xff, 0x02, 0x30, 0x3f, 0x80, 0x25, 0x2b, 0xb6, 0x88, 0x1d, 0x4b, 0x90, 0xd8, 0xf2, 0x0f, 0xd8, 0x67, 0xc1,
0x89, 0x05, 0x5b, 0x54, 0x8f, 0x6e, 0xb7, 0x27, 0x63, 0x47, 0x81, 0x08, 0xb1, 0x3b, 0xe7, 0xf4, 0x3f, 0x60, 0xcf, 0x82, 0x2d, 0xaa, 0x47, 0x3f, 0x3c, 0x19, 0x3b, 0x4a, 0x08, 0x12, 0xbb, 0x3a,
0xa9, 0x53, 0xdf, 0x79, 0xd4, 0x57, 0xd5, 0x70, 0x6a, 0xc8, 0xbc, 0x23, 0x8c, 0xfc, 0xce, 0x4c, 0xa7, 0xab, 0x4e, 0x9d, 0xc7, 0x77, 0xbe, 0x3a, 0x0d, 0xc7, 0x46, 0xc4, 0x3d, 0xa0, 0x91, 0xd7,
0x70, 0xc9, 0xc9, 0xe6, 0x2c, 0x4c, 0xc6, 0x41, 0xf4, 0xac, 0xeb, 0x5e, 0x18, 0x73, 0x3e, 0x0e, 0x99, 0x71, 0x26, 0x18, 0x5a, 0x9f, 0x05, 0xc9, 0xc4, 0x8f, 0x9e, 0x76, 0x9d, 0x33, 0x13, 0xc6,
0xf1, 0x9a, 0xb6, 0x0f, 0x93, 0xd1, 0x35, 0x9c, 0xce, 0xe4, 0xdc, 0xb8, 0xb5, 0x7f, 0x72, 0xa0, 0x26, 0x01, 0xbd, 0xa8, 0xf4, 0xa3, 0x64, 0x7c, 0x91, 0x86, 0x33, 0x31, 0xd7, 0xdb, 0xda, 0xbf,
0xb1, 0xcb, 0x24, 0x1b, 0xf0, 0x44, 0x78, 0xd8, 0xe3, 0xd1, 0x28, 0x18, 0x93, 0x2d, 0x28, 0x04, 0x5a, 0xd0, 0xdc, 0x25, 0x82, 0x0c, 0x59, 0xc2, 0x5d, 0xda, 0x63, 0xd1, 0xd8, 0x9f, 0xa0, 0x0d,
0x7e, 0xb3, 0xd4, 0x72, 0x76, 0x8a, 0xb4, 0x10, 0xf8, 0x84, 0x40, 0x29, 0x62, 0x53, 0x6c, 0x96, 0x28, 0xf9, 0x5e, 0xab, 0xb2, 0x6d, 0xed, 0x94, 0x71, 0xc9, 0xf7, 0x10, 0x82, 0x4a, 0x44, 0x42,
0x5b, 0xce, 0x4e, 0x95, 0x6a, 0x99, 0x34, 0xa0, 0x98, 0x88, 0xb0, 0xb9, 0xa1, 0x4d, 0x4a, 0x54, 0xda, 0xaa, 0x6e, 0x5b, 0x3b, 0x36, 0x56, 0x6b, 0xd4, 0x84, 0x72, 0xc2, 0x83, 0xd6, 0x9a, 0x52,
0x5e, 0x49, 0x8c, 0xa2, 0x59, 0x31, 0x5e, 0x4a, 0x26, 0x2e, 0x6c, 0xfa, 0x4c, 0xb2, 0x21, 0x8b, 0xc9, 0xa5, 0xdc, 0x95, 0xc4, 0x94, 0xb7, 0x6a, 0x7a, 0x97, 0x5c, 0x23, 0x07, 0xd6, 0x3d, 0x22,
0xb1, 0xb9, 0xa9, 0xed, 0x99, 0x4e, 0xfe, 0x0f, 0x8d, 0x21, 0x8b, 0x03, 0xef, 0x56, 0x22, 0x27, 0xc8, 0x88, 0xc4, 0xb4, 0xb5, 0xae, 0xf4, 0x99, 0x8c, 0xde, 0x84, 0xe6, 0x88, 0xc4, 0xbe, 0x7b,
0xfd, 0x88, 0x0d, 0x43, 0xf4, 0x9b, 0xd5, 0x96, 0xb3, 0xb3, 0x49, 0x5f, 0xb0, 0x93, 0x2b, 0x2a, 0x2d, 0x11, 0xd3, 0x7e, 0x44, 0x46, 0x01, 0xf5, 0x5a, 0xf6, 0xb6, 0xb5, 0xb3, 0x8e, 0x9f, 0xd3,
0x3d, 0x6b, 0x7b, 0xa2, 0x36, 0x01, 0x1d, 0x6c, 0xd9, 0xd8, 0x7e, 0x5e, 0x84, 0xfa, 0xa1, 0x4e, 0xa3, 0xf3, 0x32, 0x3c, 0xa3, 0x7b, 0x24, 0x2f, 0x01, 0x65, 0x6c, 0x51, 0xd9, 0xfe, 0xae, 0x0c,
0xdb, 0x26, 0xb2, 0x0d, 0x65, 0x2e, 0xc6, 0xf7, 0xfc, 0xa6, 0xa3, 0x73, 0x31, 0x8a, 0x02, 0x65, 0x8d, 0x7d, 0x15, 0xb6, 0x09, 0x64, 0x13, 0xaa, 0x8c, 0x4f, 0x6e, 0x7b, 0x2d, 0x4b, 0xc5, 0xa2,
0x8a, 0x73, 0xcf, 0x6f, 0x16, 0x0c, 0xa8, 0x54, 0x27, 0x97, 0x00, 0x8c, 0xfc, 0x78, 0x3e, 0xc3, 0x05, 0xe9, 0x94, 0x4e, 0xce, 0x6d, 0xaf, 0x55, 0xd2, 0x4e, 0xa5, 0x32, 0xda, 0x02, 0xd0, 0xeb,
0x66, 0x51, 0x7f, 0xcd, 0x59, 0xd4, 0xda, 0xcf, 0x62, 0x1e, 0xa9, 0x92, 0xe9, 0x02, 0xd5, 0x69, 0x87, 0xf3, 0x19, 0x6d, 0x95, 0xd5, 0xd7, 0x82, 0x46, 0x9e, 0xfd, 0x3c, 0x66, 0x91, 0x4c, 0x99,
0xa6, 0x93, 0x29, 0x9c, 0xf7, 0xd1, 0x13, 0xf3, 0x99, 0x44, 0x7f, 0x80, 0x5e, 0x22, 0xf0, 0x7e, 0x4a, 0x50, 0x03, 0x67, 0x32, 0x0a, 0xe1, 0xb4, 0x47, 0x5d, 0x3e, 0x9f, 0x09, 0xea, 0x0d, 0xa9,
0xea, 0x5a, 0x6e, 0x15, 0x77, 0x6a, 0xdd, 0xeb, 0x9d, 0xb4, 0x29, 0x9d, 0x3c, 0xcc, 0xce, 0xee, 0x9b, 0x70, 0x7a, 0x27, 0xdd, 0x5a, 0xdd, 0x2e, 0xef, 0xd4, 0xbb, 0x97, 0x3b, 0x69, 0x51, 0x3a,
0xc9, 0xab, 0xfa, 0x91, 0x14, 0x73, 0xba, 0x2a, 0x26, 0xb9, 0x08, 0xd5, 0x64, 0xe6, 0x33, 0x89, 0x45, 0x37, 0x3b, 0xbb, 0x47, 0x9f, 0xea, 0x47, 0x82, 0xcf, 0xf1, 0x32, 0x9b, 0xe8, 0x2c, 0xd8,
0xfe, 0xfe, 0x40, 0xf7, 0xa1, 0x48, 0x17, 0x06, 0x72, 0x1b, 0x1a, 0xaa, 0xd2, 0x71, 0xae, 0xaf, 0xc9, 0xcc, 0x23, 0x82, 0x7a, 0x83, 0xa1, 0xaa, 0x43, 0x19, 0xe7, 0x0a, 0x74, 0x03, 0x9a, 0x32,
0xba, 0x33, 0xb5, 0xae, 0xbb, 0x40, 0x71, 0xbc, 0xf3, 0xf4, 0x85, 0x35, 0xee, 0x7d, 0xb8, 0xb8, 0xd3, 0x71, 0xa1, 0xae, 0xaa, 0x32, 0xf5, 0xae, 0x93, 0x7b, 0x71, 0xb8, 0xf2, 0xf8, 0xb9, 0x33,
0x0e, 0x9e, 0x9a, 0x83, 0x23, 0x9c, 0xeb, 0x02, 0x57, 0xa9, 0x12, 0x55, 0xd1, 0x9f, 0xb1, 0x30, 0xce, 0x1d, 0x38, 0xbb, 0xca, 0x3d, 0x89, 0x83, 0x03, 0x3a, 0x57, 0x09, 0xb6, 0xb1, 0x5c, 0xca,
0x41, 0x5b, 0x5b, 0xa3, 0xdc, 0x28, 0xbc, 0xe7, 0xb4, 0xf7, 0xa0, 0xfa, 0x38, 0x98, 0x22, 0x65, 0xa4, 0x3f, 0x25, 0x41, 0x42, 0x4d, 0x6e, 0xb5, 0x70, 0xa5, 0xf4, 0xbe, 0xd5, 0xde, 0x03, 0xfb,
0xd1, 0x18, 0x49, 0x0b, 0x6a, 0x23, 0xc1, 0xa7, 0xfd, 0x19, 0xf7, 0x26, 0xfb, 0x03, 0xdb, 0xa1, 0xa1, 0x1f, 0x52, 0x4c, 0xa2, 0x09, 0x45, 0xdb, 0x50, 0x1f, 0x73, 0x16, 0xf6, 0x67, 0xcc, 0x9d,
0xbc, 0x49, 0x25, 0x28, 0x79, 0xfa, 0xbd, 0x60, 0x12, 0xcc, 0x0c, 0xed, 0x6f, 0x1d, 0xa8, 0x2a, 0x0e, 0x86, 0xa6, 0x42, 0x45, 0x95, 0x0c, 0x50, 0xb0, 0xf4, 0x7b, 0x49, 0x07, 0x98, 0x29, 0xda,
0x18, 0x8f, 0x12, 0x14, 0x7a, 0x53, 0x81, 0x23, 0xdb, 0xe9, 0x2a, 0x35, 0x8a, 0x1a, 0x9b, 0x29, 0x3f, 0x5a, 0x60, 0x4b, 0x37, 0x1e, 0x24, 0x94, 0xab, 0x4b, 0x39, 0x1d, 0x9b, 0x4a, 0xdb, 0x58,
0xfb, 0x42, 0x79, 0x1d, 0xf2, 0x20, 0x92, 0xb1, 0x8d, 0xb2, 0x6c, 0x54, 0x3d, 0x0f, 0x22, 0x89, 0x0b, 0x12, 0x36, 0x21, 0xf9, 0x52, 0xee, 0xda, 0x67, 0x7e, 0x24, 0x62, 0x63, 0x65, 0x51, 0x29,
0xe2, 0x19, 0x0b, 0xf7, 0x07, 0xba, 0xe7, 0x45, 0x9a, 0xb3, 0x90, 0x77, 0xa0, 0x2a, 0x53, 0xd8, 0x6b, 0xee, 0x47, 0x82, 0xf2, 0xa7, 0x24, 0x18, 0x0c, 0x55, 0xcd, 0xcb, 0xb8, 0xa0, 0x41, 0xef,
0xba, 0xe9, 0xb5, 0xee, 0xd9, 0x45, 0x0d, 0xb3, 0x8c, 0xe8, 0xc2, 0x4b, 0x9d, 0x05, 0x35, 0x16, 0x82, 0x2d, 0x52, 0xb7, 0x55, 0xd1, 0xeb, 0xdd, 0x93, 0x79, 0x0e, 0xb3, 0x88, 0x70, 0xbe, 0x4b,
0xfa, 0xc4, 0xd4, 0xa9, 0x96, 0xdb, 0xbf, 0xda, 0xa3, 0xa6, 0x01, 0x53, 0x7c, 0x9a, 0x60, 0x2c, 0xf6, 0x82, 0x84, 0x85, 0xea, 0x98, 0x06, 0x56, 0xeb, 0xf6, 0x63, 0xa8, 0x48, 0x94, 0x4a, 0x57,
0x49, 0x07, 0x36, 0x3c, 0xd3, 0x1c, 0x47, 0x07, 0x3e, 0x77, 0xf2, 0x88, 0x50, 0xeb, 0x45, 0x6e, 0x03, 0x36, 0xf1, 0xa3, 0xd4, 0x55, 0x25, 0x64, 0x3d, 0x56, 0x2a, 0xf4, 0xd8, 0x26, 0x54, 0x69,
0x41, 0x65, 0x82, 0xcc, 0x47, 0xa1, 0x72, 0x51, 0x33, 0xf5, 0xbf, 0xe5, 0x6e, 0xe6, 0x83, 0x77, 0x48, 0xfc, 0xc0, 0xe0, 0x50, 0x0b, 0x72, 0x27, 0x67, 0x81, 0xf6, 0xc4, 0xc6, 0x6a, 0xdd, 0xfe,
0xee, 0x1a, 0x4f, 0x33, 0x47, 0xe9, 0x3a, 0xf2, 0x16, 0x54, 0x9e, 0x26, 0x28, 0x02, 0x8c, 0x9b, 0xb6, 0xa4, 0xdb, 0x58, 0x25, 0x03, 0xd3, 0x27, 0x09, 0x8d, 0x05, 0xea, 0xc0, 0x9a, 0xab, 0x0b,
0x45, 0x1d, 0xe2, 0xec, 0x49, 0x21, 0x52, 0x1f, 0xf7, 0x06, 0xd4, 0xf3, 0x71, 0x5e, 0xa9, 0xe1, 0x6f, 0x29, 0xa7, 0x4f, 0x1d, 0x0d, 0x3f, 0x6c, 0x76, 0xa1, 0x6b, 0x50, 0x9b, 0x52, 0xe2, 0x51,
0xdf, 0x39, 0x70, 0x26, 0x87, 0x2a, 0x9e, 0xf1, 0x28, 0x46, 0x72, 0x0e, 0x36, 0x46, 0x82, 0x4d, 0x2e, 0xf3, 0x24, 0xf1, 0xfa, 0xc6, 0x22, 0x52, 0x8a, 0xc6, 0x3b, 0xb7, 0xf4, 0x4e, 0x8d, 0xd1,
0x31, 0x6e, 0x3a, 0xad, 0xe2, 0x4e, 0x9d, 0x5a, 0x8d, 0xf4, 0x61, 0x73, 0x8a, 0x92, 0xa9, 0x11, 0xf4, 0x1c, 0x7a, 0x07, 0x6a, 0x4f, 0x12, 0xca, 0x7d, 0x1a, 0xb7, 0xca, 0xca, 0xc4, 0xc9, 0xa3,
0xb4, 0xc9, 0x5d, 0x3d, 0x31, 0x39, 0x13, 0xa6, 0xb3, 0x6f, 0x7d, 0x4d, 0x7a, 0xd9, 0x52, 0xf7, 0x4c, 0xa4, 0x7b, 0x50, 0xdb, 0x50, 0x86, 0x4e, 0xea, 0x46, 0xbe, 0x57, 0x26, 0x4a, 0x53, 0x88,
0x26, 0x9c, 0x5a, 0xfa, 0xf4, 0x4a, 0x88, 0x7f, 0x2c, 0x41, 0xbd, 0xc7, 0xc2, 0x90, 0xa2, 0x39, 0x73, 0x05, 0x1a, 0xc5, 0xbb, 0x5e, 0x0a, 0x70, 0x3f, 0x59, 0x70, 0xa2, 0xe0, 0x79, 0x3c, 0x63,
0x05, 0xee, 0x15, 0x80, 0x81, 0x14, 0x41, 0x34, 0x7e, 0x10, 0xc4, 0x52, 0x41, 0xd7, 0xbe, 0x06, 0x51, 0x4c, 0xd1, 0x29, 0x58, 0x1b, 0x73, 0x12, 0xd2, 0xb8, 0x65, 0x6d, 0x97, 0x77, 0x1a, 0xd8,
0x7a, 0x95, 0x5a, 0xcd, 0xfd, 0xbe, 0x00, 0x95, 0x3f, 0xdb, 0x52, 0x02, 0xa5, 0x19, 0x93, 0x13, 0x48, 0xa8, 0x0f, 0xeb, 0x21, 0x15, 0x44, 0xb6, 0x80, 0x49, 0xc0, 0x85, 0x23, 0x13, 0xa0, 0xcd,
0x8b, 0x45, 0xcb, 0x6a, 0x9f, 0x29, 0xca, 0x09, 0xf7, 0x2d, 0x05, 0x59, 0x2d, 0x65, 0xdd, 0xd2, 0x74, 0x06, 0x66, 0xaf, 0x4e, 0x41, 0x76, 0xd4, 0xb9, 0x0a, 0xc7, 0x16, 0x3e, 0xbd, 0x94, 0xc7,
0x82, 0x75, 0xfb, 0x8b, 0x81, 0x30, 0x24, 0xf3, 0xc6, 0x62, 0xbb, 0x7c, 0x22, 0x9d, 0xf5, 0x43, 0xbf, 0x57, 0xa0, 0xd1, 0x23, 0x41, 0x80, 0xa9, 0xee, 0x42, 0xe7, 0x3c, 0xc0, 0x50, 0x70, 0x3f,
0x41, 0xa0, 0x34, 0xe4, 0xfe, 0x5c, 0xf3, 0x48, 0x9d, 0x6a, 0xd9, 0xfd, 0xe4, 0xa5, 0x9d, 0x7f, 0x9a, 0xdc, 0xf5, 0x63, 0x21, 0x5d, 0x57, 0x7b, 0xb5, 0xeb, 0x36, 0x36, 0x92, 0xf3, 0xac, 0x04,
0x37, 0x5f, 0xc7, 0x5a, 0xf7, 0xf2, 0x8a, 0xad, 0x17, 0x05, 0xcc, 0x95, 0xda, 0xfd, 0xc5, 0x81, 0xb5, 0x57, 0x2d, 0x3b, 0x82, 0xca, 0x8c, 0x88, 0x69, 0x8a, 0x3c, 0xb9, 0x96, 0xf7, 0x84, 0x54,
0xcd, 0x6c, 0x26, 0x08, 0x94, 0x3c, 0xee, 0xa3, 0x0e, 0x5e, 0xa6, 0x5a, 0x26, 0xb7, 0x8f, 0xcf, 0x4c, 0x99, 0x67, 0xa0, 0x67, 0xa4, 0x94, 0xf5, 0x2b, 0x39, 0xeb, 0xf7, 0x73, 0xd0, 0x68, 0x92,
0xfa, 0x9b, 0x2b, 0x53, 0xb3, 0x23, 0xb1, 0x3e, 0xb7, 0xe2, 0xdf, 0x96, 0x5b, 0xfb, 0x2b, 0x07, 0x7b, 0x2b, 0xbf, 0xae, 0x18, 0x48, 0x67, 0x35, 0x70, 0x10, 0x54, 0x46, 0xcc, 0x9b, 0x2b, 0x1e,
0xb6, 0x7a, 0x3c, 0x0c, 0xd1, 0x93, 0xfb, 0x28, 0x45, 0xe0, 0xc5, 0x6e, 0x35, 0x9b, 0x10, 0xf7, 0x6b, 0x60, 0xb5, 0xce, 0xd0, 0x51, 0x5b, 0x81, 0x8e, 0x4f, 0x5f, 0x88, 0x8e, 0xf7, 0x8a, 0xb9,
0x2a, 0x54, 0x0e, 0xd9, 0x3c, 0xe4, 0xcc, 0xdc, 0x37, 0x82, 0xab, 0xee, 0x62, 0x12, 0xeb, 0xed, 0xae, 0x77, 0xcf, 0x2d, 0x71, 0x2f, 0x4f, 0x72, 0xa1, 0x1c, 0xce, 0x6f, 0x16, 0xac, 0x67, 0xb8,
0xeb, 0x34, 0x67, 0x71, 0x6f, 0xe7, 0x6a, 0x74, 0x03, 0x2a, 0x53, 0x13, 0xcc, 0x4e, 0x56, 0x2b, 0x41, 0x50, 0x71, 0x99, 0x47, 0x95, 0xf1, 0x2a, 0x56, 0x6b, 0x74, 0xe3, 0x70, 0xcf, 0xbc, 0xbd,
0x87, 0x69, 0x69, 0xb3, 0x8e, 0x0d, 0x4f, 0xd3, 0x05, 0x8a, 0x2d, 0x6b, 0xbd, 0x09, 0x7a, 0x47, 0x34, 0x7c, 0x03, 0x9b, 0xd5, 0xf1, 0x97, 0xf3, 0xf8, 0xff, 0xe1, 0xd8, 0xda, 0xdf, 0x58, 0xb0,
0x77, 0x91, 0x85, 0x72, 0x92, 0x47, 0xf3, 0x75, 0xbe, 0x0f, 0x3d, 0xd8, 0x88, 0x25, 0x93, 0x16, 0xd1, 0x63, 0x41, 0x40, 0x5d, 0x31, 0xa0, 0x82, 0xfb, 0x6e, 0xec, 0xd8, 0x19, 0x8a, 0x9c, 0x0b,
0xcb, 0xd6, 0xd2, 0x34, 0x2d, 0x96, 0x2f, 0x55, 0x3c, 0x94, 0x93, 0x81, 0x5e, 0x42, 0xed, 0x52, 0x50, 0xdb, 0x27, 0xf3, 0x80, 0x11, 0xfd, 0x26, 0x72, 0x26, 0x11, 0x40, 0x93, 0x58, 0x5d, 0xdf,
0x55, 0xf0, 0x20, 0x1a, 0xf1, 0x74, 0xa2, 0x95, 0xdc, 0xee, 0xe8, 0x82, 0x67, 0xbe, 0xa4, 0x06, 0xc0, 0x05, 0x8d, 0x73, 0xa3, 0x90, 0xa3, 0x2b, 0x50, 0x0b, 0xb5, 0x31, 0x83, 0xbe, 0xed, 0x82,
0x95, 0x27, 0x0f, 0xf7, 0x1e, 0x1e, 0x7c, 0xf4, 0xb0, 0xf1, 0x2f, 0xb2, 0x01, 0x85, 0x83, 0xbd, 0x4f, 0x0b, 0x97, 0x75, 0x8c, 0x79, 0x9c, 0x1e, 0x68, 0x7f, 0x5d, 0x82, 0x7a, 0x6f, 0x4a, 0xdd,
0x86, 0x43, 0xaa, 0x50, 0xee, 0x53, 0x7a, 0x40, 0x1b, 0x85, 0xf6, 0xef, 0x0e, 0x34, 0x06, 0x52, 0x83, 0x5b, 0x94, 0x04, 0x62, 0xea, 0x7c, 0xf0, 0xca, 0x98, 0x76, 0x7e, 0x29, 0xd6, 0xad, 0x07,
0x20, 0x9b, 0x06, 0xd1, 0x38, 0x3d, 0x5a, 0xf9, 0x9b, 0xdb, 0x5c, 0x18, 0x8b, 0x9b, 0x7b, 0x1d, 0x6b, 0xb1, 0x20, 0xc2, 0xf8, 0xbe, 0xb1, 0x80, 0xd0, 0xfc, 0xba, 0x85, 0x0a, 0x05, 0x62, 0x3a,
0x33, 0x1e, 0x0f, 0xb4, 0x62, 0x50, 0xb6, 0xa1, 0x2c, 0xf9, 0x2c, 0xf0, 0xec, 0xa1, 0x33, 0x4a, 0x54, 0x47, 0xb0, 0x39, 0x8a, 0x5a, 0x32, 0xb0, 0x38, 0x26, 0x93, 0xb4, 0x69, 0x53, 0x51, 0x3e,
0x36, 0x3e, 0xe6, 0xd0, 0x69, 0x59, 0xb5, 0x2d, 0x4e, 0x86, 0xb1, 0x27, 0x82, 0x21, 0xfa, 0x9a, 0x64, 0x6a, 0x04, 0xa0, 0x82, 0xf8, 0x41, 0x6c, 0x1a, 0xa6, 0xa8, 0x6a, 0x77, 0x54, 0x21, 0x33,
0xe5, 0x37, 0x69, 0xce, 0xf2, 0x97, 0x48, 0xf3, 0xd3, 0x5c, 0xe2, 0xfb, 0x18, 0xc7, 0x6c, 0x8c, 0x9b, 0xa8, 0x0e, 0xb5, 0x47, 0xf7, 0xf6, 0xee, 0xdd, 0xff, 0xf8, 0x5e, 0xf3, 0x3f, 0x68, 0x0d,
0x6b, 0x13, 0xcf, 0x50, 0x17, 0xf2, 0xa8, 0x9b, 0x6a, 0x58, 0xf4, 0x62, 0x9b, 0x4d, 0xaa, 0xb6, 0x4a, 0xf7, 0xf7, 0x9a, 0x16, 0xb2, 0xa1, 0xda, 0xc7, 0xf8, 0x3e, 0x6e, 0x96, 0xda, 0x7f, 0x5a,
0xff, 0x0b, 0x5b, 0x59, 0xfc, 0x5e, 0xc8, 0x63, 0x54, 0x11, 0x3c, 0x9e, 0x44, 0x32, 0x7d, 0x26, 0xd0, 0x1c, 0x0a, 0x4e, 0x49, 0xe8, 0x47, 0x93, 0x34, 0x05, 0xc5, 0xa9, 0x45, 0x3f, 0x96, 0xf9,
0x69, 0xa5, 0xfd, 0x9b, 0x03, 0xa7, 0x28, 0x46, 0x3e, 0x8a, 0xb4, 0xfc, 0x96, 0x7d, 0x9c, 0x05, 0xd4, 0xb2, 0x8a, 0xb9, 0x0f, 0x1b, 0x5a, 0x02, 0xc0, 0x4d, 0xa8, 0x0a, 0x36, 0xf3, 0xdd, 0xf4,
0xfb, 0x6c, 0x43, 0xf9, 0xf3, 0xc0, 0xb7, 0xe4, 0x55, 0xa6, 0x46, 0x51, 0xec, 0x35, 0xc1, 0x60, 0xad, 0x51, 0x42, 0x06, 0x4b, 0xf3, 0xd6, 0xa8, 0xb6, 0xdc, 0x02, 0x88, 0x93, 0x51, 0xec, 0x72,
0x3c, 0x91, 0x7a, 0xeb, 0x32, 0xb5, 0x9a, 0xc2, 0xa4, 0xae, 0x48, 0x9e, 0x48, 0x5d, 0xcc, 0x32, 0x7f, 0x44, 0x3d, 0xf5, 0xc2, 0xad, 0xe3, 0x82, 0xe6, 0x6f, 0x11, 0xf6, 0x67, 0x85, 0xc0, 0x07,
0x4d, 0x55, 0x95, 0x9f, 0x12, 0xbf, 0xe4, 0x51, 0xfa, 0xca, 0xcc, 0x74, 0xf5, 0x0d, 0x23, 0x8f, 0x26, 0xbf, 0xab, 0x02, 0xcf, 0xbc, 0x2e, 0x15, 0xbd, 0x2e, 0xd4, 0xaa, 0xbc, 0x50, 0xab, 0xf6,
0xfb, 0x41, 0x34, 0xb6, 0xcf, 0xcd, 0x4c, 0x57, 0xdf, 0x46, 0x41, 0x88, 0x87, 0x8a, 0x3f, 0xcd, 0xff, 0x61, 0x23, 0xb3, 0xdf, 0x0b, 0x58, 0xac, 0xde, 0x58, 0x97, 0x25, 0x91, 0x48, 0x47, 0x44,
0xbb, 0x33, 0xd3, 0xd5, 0xf3, 0x41, 0x68, 0xf8, 0x7b, 0x38, 0xb7, 0x8f, 0xcf, 0x85, 0x41, 0x61, 0x25, 0xb4, 0xff, 0xb0, 0xe0, 0x18, 0xa6, 0x91, 0x47, 0x79, 0x9a, 0x7e, 0xc3, 0x7c, 0x56, 0xce,
0xf4, 0xf9, 0x94, 0x05, 0x91, 0x7e, 0x73, 0x56, 0xa9, 0xd5, 0x54, 0x75, 0xd2, 0xa4, 0xed, 0x91, 0x7c, 0x9b, 0x50, 0xfd, 0xc2, 0xf7, 0x0c, 0x71, 0x56, 0xb1, 0x16, 0x24, 0x73, 0x4e, 0xa9, 0x3f,
0xd8, 0x86, 0x32, 0x0a, 0xc1, 0x45, 0xfa, 0xb4, 0xd0, 0x4a, 0xf7, 0xb9, 0x03, 0xa5, 0x1e, 0x17, 0x99, 0x0a, 0x75, 0x75, 0x15, 0x1b, 0x49, 0xfa, 0x24, 0xc7, 0x03, 0x96, 0x08, 0x95, 0xcc, 0x2a,
0x48, 0x0e, 0x96, 0x2f, 0x0c, 0x72, 0x69, 0x3d, 0xff, 0xba, 0xff, 0x79, 0x09, 0x89, 0x91, 0xdd, 0x4e, 0x45, 0x19, 0x9f, 0x5c, 0x7e, 0xc5, 0xa2, 0x74, 0xc2, 0xce, 0x64, 0xf9, 0x8d, 0x46, 0x2e,
0xfc, 0xbb, 0xc6, 0x5d, 0x7d, 0xbd, 0xbb, 0x17, 0xd6, 0xdc, 0x8e, 0xdd, 0x1f, 0x1c, 0xa8, 0xed, 0xf3, 0xfc, 0x68, 0x62, 0x46, 0xed, 0x4c, 0x96, 0xdf, 0xc6, 0x7e, 0x40, 0xf7, 0x25, 0x77, 0xeb,
0x06, 0x6c, 0x1c, 0xf1, 0x58, 0x06, 0x5e, 0x4c, 0x9e, 0x1c, 0x27, 0x24, 0xb2, 0x9a, 0x3d, 0xd2, 0x99, 0x3b, 0x93, 0xe5, 0xe8, 0xc4, 0x95, 0xfb, 0x7b, 0x74, 0x6e, 0x06, 0xef, 0x5c, 0x21, 0x7d,
0x0d, 0x2e, 0xaf, 0xf1, 0xb0, 0x60, 0x1f, 0x2c, 0xd1, 0x0a, 0xf9, 0xf7, 0x2a, 0xba, 0x30, 0x01, 0xf4, 0x58, 0x48, 0xfc, 0x48, 0xcd, 0xdb, 0x36, 0x36, 0x92, 0xcc, 0x4e, 0x1a, 0xb4, 0x69, 0x1d,
0x2f, 0xad, 0x67, 0x93, 0xee, 0x37, 0x0e, 0x9c, 0xbe, 0x23, 0xd8, 0x88, 0x45, 0xec, 0x30, 0x64, 0x39, 0x81, 0x70, 0xce, 0x78, 0x3a, 0xab, 0x28, 0xa1, 0xfb, 0xbd, 0x05, 0x95, 0x1e, 0xe3, 0x14,
0x72, 0xc4, 0xc5, 0x94, 0xec, 0x69, 0x76, 0xfa, 0x47, 0xd5, 0xf6, 0x11, 0x54, 0x1f, 0x0b, 0x16, 0x3d, 0x58, 0x7c, 0xac, 0xd0, 0xd6, 0x6a, 0xee, 0x77, 0xfe, 0xf7, 0x02, 0x72, 0xbc, 0x64, 0xa1,
0xc5, 0x1a, 0xdf, 0xeb, 0x09, 0xf9, 0x31, 0x9c, 0xc9, 0x42, 0x2a, 0xe8, 0x1f, 0x32, 0xef, 0xe8, 0xdd, 0xe2, 0x54, 0xe7, 0x2c, 0x1f, 0x40, 0x9c, 0x33, 0x2b, 0xde, 0xe6, 0xee, 0xcf, 0x16, 0xd4,
0x35, 0x85, 0xfe, 0xd9, 0x81, 0xd3, 0xd9, 0x81, 0x37, 0x2f, 0x10, 0xf2, 0x01, 0x54, 0x7a, 0x3c, 0x77, 0x7d, 0x32, 0x89, 0x58, 0x2c, 0x7c, 0x37, 0x46, 0x8f, 0x0e, 0x53, 0x1d, 0x5a, 0xce, 0x4b,
0x8a, 0xd0, 0x93, 0x64, 0xc5, 0xf3, 0xc4, 0x75, 0x4f, 0xa0, 0x4f, 0x4b, 0x47, 0x6f, 0x3b, 0x8a, 0xe9, 0x05, 0xe7, 0x56, 0xec, 0x30, 0xe9, 0xb9, 0xbb, 0x40, 0x58, 0xe8, 0xbf, 0xcb, 0x88, 0x45,
0x6d, 0x0f, 0x05, 0xf7, 0x30, 0x8e, 0x89, 0xbb, 0x9a, 0x67, 0xd7, 0x05, 0x21, 0xef, 0x03, 0xec, 0x1b, 0xdc, 0x5a, 0xcd, 0x3b, 0xdd, 0x1f, 0x2c, 0x38, 0x7e, 0x93, 0x93, 0x31, 0x89, 0xc8, 0x7e,
0x06, 0xb1, 0x97, 0xc1, 0x30, 0xbf, 0xa9, 0x9d, 0xf4, 0x37, 0xb5, 0xd3, 0x57, 0xbf, 0xa9, 0x6e, 0x40, 0xc4, 0x98, 0xf1, 0x10, 0x0d, 0x14, 0x8f, 0xfd, 0xcb, 0xb2, 0xfb, 0x00, 0xec, 0x87, 0x9c,
0xf3, 0x84, 0x08, 0x9a, 0xb5, 0xba, 0x77, 0xd4, 0x60, 0xa8, 0x93, 0x8a, 0x82, 0xdc, 0x84, 0x0d, 0x44, 0xb1, 0xf2, 0xf0, 0xf5, 0x98, 0xfc, 0x04, 0x4e, 0x64, 0x26, 0xa5, 0xf3, 0xd7, 0x89, 0x7b,
0x23, 0x93, 0xf3, 0x0b, 0xff, 0x25, 0xf2, 0xca, 0x07, 0x5a, 0x3e, 0xe0, 0xc3, 0x0d, 0xbd, 0xe5, 0xf0, 0x9a, 0x4c, 0x3f, 0xb3, 0xe0, 0x78, 0xd6, 0xf4, 0xfa, 0xb5, 0x40, 0x1f, 0x41, 0xad, 0xc7,
0xf5, 0x3f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x53, 0xca, 0x5d, 0x41, 0x42, 0x0f, 0x00, 0x00, 0xa2, 0x88, 0xba, 0x02, 0x2d, 0x79, 0x4a, 0x1c, 0xe7, 0x08, 0x0a, 0x35, 0x94, 0x74, 0xc9, 0x92,
0x8c, 0xbb, 0xcf, 0x99, 0x4b, 0xe3, 0x18, 0x39, 0xcb, 0xb9, 0x76, 0x95, 0x11, 0xf4, 0x21, 0xc0,
0xae, 0x1f, 0xbb, 0x99, 0x1b, 0xfa, 0x37, 0xbd, 0x93, 0xfe, 0xa6, 0x77, 0xfa, 0xf2, 0x37, 0xdd,
0x69, 0x1d, 0x61, 0x41, 0x31, 0x57, 0xf7, 0xa6, 0x84, 0x86, 0xec, 0x56, 0xca, 0xd1, 0x55, 0x58,
0xd3, 0x6b, 0x74, 0x3a, 0xdf, 0xbf, 0x40, 0x60, 0x45, 0x43, 0x8b, 0x4d, 0x7e, 0xbd, 0xf1, 0x18,
0x3a, 0x57, 0xd3, 0x8f, 0xa3, 0x35, 0xe5, 0xc0, 0xe5, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x4e,
0xe4, 0x8d, 0xf6, 0x50, 0x10, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
...@@ -1354,7 +1457,7 @@ const _ = grpc.SupportPackageIsVersion4 ...@@ -1354,7 +1457,7 @@ const _ = grpc.SupportPackageIsVersion4
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type CoreClient interface { type CoreClient interface {
// HTTP Style request // HTTP Style request
CallResource(ctx context.Context, in *CallResource_Request, opts ...grpc.CallOption) (*CallResource_Response, error) CallResource(ctx context.Context, in *CallResource_Request, opts ...grpc.CallOption) (Core_CallResourceClient, error)
// Well typed query interface // Well typed query interface
DataQuery(ctx context.Context, in *DataQueryRequest, opts ...grpc.CallOption) (*DataQueryResponse, error) DataQuery(ctx context.Context, in *DataQueryRequest, opts ...grpc.CallOption) (*DataQueryResponse, error)
} }
...@@ -1367,13 +1470,36 @@ func NewCoreClient(cc *grpc.ClientConn) CoreClient { ...@@ -1367,13 +1470,36 @@ func NewCoreClient(cc *grpc.ClientConn) CoreClient {
return &coreClient{cc} return &coreClient{cc}
} }
func (c *coreClient) CallResource(ctx context.Context, in *CallResource_Request, opts ...grpc.CallOption) (*CallResource_Response, error) { func (c *coreClient) CallResource(ctx context.Context, in *CallResource_Request, opts ...grpc.CallOption) (Core_CallResourceClient, error) {
out := new(CallResource_Response) stream, err := c.cc.NewStream(ctx, &_Core_serviceDesc.Streams[0], "/pluginv2.Core/CallResource", opts...)
err := c.cc.Invoke(ctx, "/pluginv2.Core/CallResource", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return out, nil x := &coreCallResourceClient{stream}
if err := x.ClientStream.SendMsg(in); err != nil {
return nil, err
}
if err := x.ClientStream.CloseSend(); err != nil {
return nil, err
}
return x, nil
}
type Core_CallResourceClient interface {
Recv() (*CallResource_Response, error)
grpc.ClientStream
}
type coreCallResourceClient struct {
grpc.ClientStream
}
func (x *coreCallResourceClient) Recv() (*CallResource_Response, error) {
m := new(CallResource_Response)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
return m, nil
} }
func (c *coreClient) DataQuery(ctx context.Context, in *DataQueryRequest, opts ...grpc.CallOption) (*DataQueryResponse, error) { func (c *coreClient) DataQuery(ctx context.Context, in *DataQueryRequest, opts ...grpc.CallOption) (*DataQueryResponse, error) {
...@@ -1388,7 +1514,7 @@ func (c *coreClient) DataQuery(ctx context.Context, in *DataQueryRequest, opts . ...@@ -1388,7 +1514,7 @@ func (c *coreClient) DataQuery(ctx context.Context, in *DataQueryRequest, opts .
// CoreServer is the server API for Core service. // CoreServer is the server API for Core service.
type CoreServer interface { type CoreServer interface {
// HTTP Style request // HTTP Style request
CallResource(context.Context, *CallResource_Request) (*CallResource_Response, error) CallResource(*CallResource_Request, Core_CallResourceServer) error
// Well typed query interface // Well typed query interface
DataQuery(context.Context, *DataQueryRequest) (*DataQueryResponse, error) DataQuery(context.Context, *DataQueryRequest) (*DataQueryResponse, error)
} }
...@@ -1397,8 +1523,8 @@ type CoreServer interface { ...@@ -1397,8 +1523,8 @@ type CoreServer interface {
type UnimplementedCoreServer struct { type UnimplementedCoreServer struct {
} }
func (*UnimplementedCoreServer) CallResource(ctx context.Context, req *CallResource_Request) (*CallResource_Response, error) { func (*UnimplementedCoreServer) CallResource(req *CallResource_Request, srv Core_CallResourceServer) error {
return nil, status.Errorf(codes.Unimplemented, "method CallResource not implemented") return status.Errorf(codes.Unimplemented, "method CallResource not implemented")
} }
func (*UnimplementedCoreServer) DataQuery(ctx context.Context, req *DataQueryRequest) (*DataQueryResponse, error) { func (*UnimplementedCoreServer) DataQuery(ctx context.Context, req *DataQueryRequest) (*DataQueryResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method DataQuery not implemented") return nil, status.Errorf(codes.Unimplemented, "method DataQuery not implemented")
...@@ -1408,22 +1534,25 @@ func RegisterCoreServer(s *grpc.Server, srv CoreServer) { ...@@ -1408,22 +1534,25 @@ func RegisterCoreServer(s *grpc.Server, srv CoreServer) {
s.RegisterService(&_Core_serviceDesc, srv) s.RegisterService(&_Core_serviceDesc, srv)
} }
func _Core_CallResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _Core_CallResource_Handler(srv interface{}, stream grpc.ServerStream) error {
in := new(CallResource_Request) m := new(CallResource_Request)
if err := dec(in); err != nil { if err := stream.RecvMsg(m); err != nil {
return nil, err return err
}
if interceptor == nil {
return srv.(CoreServer).CallResource(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/pluginv2.Core/CallResource",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(CoreServer).CallResource(ctx, req.(*CallResource_Request))
} }
return interceptor(ctx, in, info, handler) return srv.(CoreServer).CallResource(m, &coreCallResourceServer{stream})
}
type Core_CallResourceServer interface {
Send(*CallResource_Response) error
grpc.ServerStream
}
type coreCallResourceServer struct {
grpc.ServerStream
}
func (x *coreCallResourceServer) Send(m *CallResource_Response) error {
return x.ServerStream.SendMsg(m)
} }
func _Core_DataQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _Core_DataQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
...@@ -1449,15 +1578,17 @@ var _Core_serviceDesc = grpc.ServiceDesc{ ...@@ -1449,15 +1578,17 @@ var _Core_serviceDesc = grpc.ServiceDesc{
HandlerType: (*CoreServer)(nil), HandlerType: (*CoreServer)(nil),
Methods: []grpc.MethodDesc{ Methods: []grpc.MethodDesc{
{ {
MethodName: "CallResource",
Handler: _Core_CallResource_Handler,
},
{
MethodName: "DataQuery", MethodName: "DataQuery",
Handler: _Core_DataQuery_Handler, Handler: _Core_DataQuery_Handler,
}, },
}, },
Streams: []grpc.StreamDesc{}, Streams: []grpc.StreamDesc{
{
StreamName: "CallResource",
Handler: _Core_CallResource_Handler,
ServerStreams: true,
},
},
Metadata: "backend.proto", Metadata: "backend.proto",
} }
...@@ -1573,7 +1704,7 @@ var _Diagnostics_serviceDesc = grpc.ServiceDesc{ ...@@ -1573,7 +1704,7 @@ var _Diagnostics_serviceDesc = grpc.ServiceDesc{
// //
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type GrafanaPlatformClient interface { type GrafanaPlatformClient interface {
Resource(ctx context.Context, in *CallResource_Request, opts ...grpc.CallOption) (*CallResource_Response, error) Resource(ctx context.Context, in *CallResource_Request, opts ...grpc.CallOption) (GrafanaPlatform_ResourceClient, error)
DataQuery(ctx context.Context, in *DataQueryRequest, opts ...grpc.CallOption) (*DataQueryResponse, error) DataQuery(ctx context.Context, in *DataQueryRequest, opts ...grpc.CallOption) (*DataQueryResponse, error)
} }
...@@ -1585,13 +1716,36 @@ func NewGrafanaPlatformClient(cc *grpc.ClientConn) GrafanaPlatformClient { ...@@ -1585,13 +1716,36 @@ func NewGrafanaPlatformClient(cc *grpc.ClientConn) GrafanaPlatformClient {
return &grafanaPlatformClient{cc} return &grafanaPlatformClient{cc}
} }
func (c *grafanaPlatformClient) Resource(ctx context.Context, in *CallResource_Request, opts ...grpc.CallOption) (*CallResource_Response, error) { func (c *grafanaPlatformClient) Resource(ctx context.Context, in *CallResource_Request, opts ...grpc.CallOption) (GrafanaPlatform_ResourceClient, error) {
out := new(CallResource_Response) stream, err := c.cc.NewStream(ctx, &_GrafanaPlatform_serviceDesc.Streams[0], "/pluginv2.GrafanaPlatform/Resource", opts...)
err := c.cc.Invoke(ctx, "/pluginv2.GrafanaPlatform/Resource", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return out, nil x := &grafanaPlatformResourceClient{stream}
if err := x.ClientStream.SendMsg(in); err != nil {
return nil, err
}
if err := x.ClientStream.CloseSend(); err != nil {
return nil, err
}
return x, nil
}
type GrafanaPlatform_ResourceClient interface {
Recv() (*CallResource_Response, error)
grpc.ClientStream
}
type grafanaPlatformResourceClient struct {
grpc.ClientStream
}
func (x *grafanaPlatformResourceClient) Recv() (*CallResource_Response, error) {
m := new(CallResource_Response)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
return m, nil
} }
func (c *grafanaPlatformClient) DataQuery(ctx context.Context, in *DataQueryRequest, opts ...grpc.CallOption) (*DataQueryResponse, error) { func (c *grafanaPlatformClient) DataQuery(ctx context.Context, in *DataQueryRequest, opts ...grpc.CallOption) (*DataQueryResponse, error) {
...@@ -1605,7 +1759,7 @@ func (c *grafanaPlatformClient) DataQuery(ctx context.Context, in *DataQueryRequ ...@@ -1605,7 +1759,7 @@ func (c *grafanaPlatformClient) DataQuery(ctx context.Context, in *DataQueryRequ
// GrafanaPlatformServer is the server API for GrafanaPlatform service. // GrafanaPlatformServer is the server API for GrafanaPlatform service.
type GrafanaPlatformServer interface { type GrafanaPlatformServer interface {
Resource(context.Context, *CallResource_Request) (*CallResource_Response, error) Resource(*CallResource_Request, GrafanaPlatform_ResourceServer) error
DataQuery(context.Context, *DataQueryRequest) (*DataQueryResponse, error) DataQuery(context.Context, *DataQueryRequest) (*DataQueryResponse, error)
} }
...@@ -1613,8 +1767,8 @@ type GrafanaPlatformServer interface { ...@@ -1613,8 +1767,8 @@ type GrafanaPlatformServer interface {
type UnimplementedGrafanaPlatformServer struct { type UnimplementedGrafanaPlatformServer struct {
} }
func (*UnimplementedGrafanaPlatformServer) Resource(ctx context.Context, req *CallResource_Request) (*CallResource_Response, error) { func (*UnimplementedGrafanaPlatformServer) Resource(req *CallResource_Request, srv GrafanaPlatform_ResourceServer) error {
return nil, status.Errorf(codes.Unimplemented, "method Resource not implemented") return status.Errorf(codes.Unimplemented, "method Resource not implemented")
} }
func (*UnimplementedGrafanaPlatformServer) DataQuery(ctx context.Context, req *DataQueryRequest) (*DataQueryResponse, error) { func (*UnimplementedGrafanaPlatformServer) DataQuery(ctx context.Context, req *DataQueryRequest) (*DataQueryResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method DataQuery not implemented") return nil, status.Errorf(codes.Unimplemented, "method DataQuery not implemented")
...@@ -1624,22 +1778,25 @@ func RegisterGrafanaPlatformServer(s *grpc.Server, srv GrafanaPlatformServer) { ...@@ -1624,22 +1778,25 @@ func RegisterGrafanaPlatformServer(s *grpc.Server, srv GrafanaPlatformServer) {
s.RegisterService(&_GrafanaPlatform_serviceDesc, srv) s.RegisterService(&_GrafanaPlatform_serviceDesc, srv)
} }
func _GrafanaPlatform_Resource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _GrafanaPlatform_Resource_Handler(srv interface{}, stream grpc.ServerStream) error {
in := new(CallResource_Request) m := new(CallResource_Request)
if err := dec(in); err != nil { if err := stream.RecvMsg(m); err != nil {
return nil, err return err
}
if interceptor == nil {
return srv.(GrafanaPlatformServer).Resource(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/pluginv2.GrafanaPlatform/Resource",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(GrafanaPlatformServer).Resource(ctx, req.(*CallResource_Request))
} }
return interceptor(ctx, in, info, handler) return srv.(GrafanaPlatformServer).Resource(m, &grafanaPlatformResourceServer{stream})
}
type GrafanaPlatform_ResourceServer interface {
Send(*CallResource_Response) error
grpc.ServerStream
}
type grafanaPlatformResourceServer struct {
grpc.ServerStream
}
func (x *grafanaPlatformResourceServer) Send(m *CallResource_Response) error {
return x.ServerStream.SendMsg(m)
} }
func _GrafanaPlatform_DataQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _GrafanaPlatform_DataQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
...@@ -1665,15 +1822,17 @@ var _GrafanaPlatform_serviceDesc = grpc.ServiceDesc{ ...@@ -1665,15 +1822,17 @@ var _GrafanaPlatform_serviceDesc = grpc.ServiceDesc{
HandlerType: (*GrafanaPlatformServer)(nil), HandlerType: (*GrafanaPlatformServer)(nil),
Methods: []grpc.MethodDesc{ Methods: []grpc.MethodDesc{
{ {
MethodName: "Resource",
Handler: _GrafanaPlatform_Resource_Handler,
},
{
MethodName: "DataQuery", MethodName: "DataQuery",
Handler: _GrafanaPlatform_DataQuery_Handler, Handler: _GrafanaPlatform_DataQuery_Handler,
}, },
}, },
Streams: []grpc.StreamDesc{}, Streams: []grpc.StreamDesc{
{
StreamName: "Resource",
Handler: _GrafanaPlatform_Resource_Handler,
ServerStreams: true,
},
},
Metadata: "backend.proto", Metadata: "backend.proto",
} }
......
...@@ -148,7 +148,7 @@ github.com/gosimple/slug ...@@ -148,7 +148,7 @@ github.com/gosimple/slug
# github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4 # github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4
github.com/grafana/grafana-plugin-model/go/datasource github.com/grafana/grafana-plugin-model/go/datasource
github.com/grafana/grafana-plugin-model/go/renderer github.com/grafana/grafana-plugin-model/go/renderer
# github.com/grafana/grafana-plugin-sdk-go v0.16.0 # github.com/grafana/grafana-plugin-sdk-go v0.19.0
github.com/grafana/grafana-plugin-sdk-go/backend/plugin github.com/grafana/grafana-plugin-sdk-go/backend/plugin
github.com/grafana/grafana-plugin-sdk-go/dataframe github.com/grafana/grafana-plugin-sdk-go/dataframe
github.com/grafana/grafana-plugin-sdk-go/genproto/pluginv2 github.com/grafana/grafana-plugin-sdk-go/genproto/pluginv2
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment