* fix dispense * plugin loading refactor Moves common functionality of registering, starting, stopping and restarting backend plugins to backendplugin package. * simplify plugin descriptors * target sdk v0.5.0 Co-authored-by: Kyle Brandt <kyle@kbrandt.com>
73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package wrapper
|
|
|
|
import (
|
|
"context"
|
|
|
|
sdk "github.com/grafana/grafana-plugin-sdk-go/backend"
|
|
"github.com/grafana/grafana-plugin-sdk-go/genproto/pluginv2"
|
|
"github.com/grafana/grafana/pkg/components/simplejson"
|
|
"github.com/grafana/grafana/pkg/infra/log"
|
|
"github.com/grafana/grafana/pkg/models"
|
|
"github.com/grafana/grafana/pkg/tsdb"
|
|
)
|
|
|
|
func NewDatasourcePluginWrapperV2(log log.Logger, plugin sdk.BackendPlugin) *DatasourcePluginWrapperV2 {
|
|
return &DatasourcePluginWrapperV2{BackendPlugin: plugin, logger: log}
|
|
}
|
|
|
|
type DatasourcePluginWrapperV2 struct {
|
|
sdk.BackendPlugin
|
|
logger log.Logger
|
|
}
|
|
|
|
func (tw *DatasourcePluginWrapperV2) Query(ctx context.Context, ds *models.DataSource, query *tsdb.TsdbQuery) (*tsdb.Response, error) {
|
|
jsonData, err := ds.JsonData.MarshalJSON()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
pbQuery := &pluginv2.DataQueryRequest{
|
|
Config: &pluginv2.PluginConfig{
|
|
Name: ds.Name,
|
|
Type: ds.Type,
|
|
Url: ds.Url,
|
|
Id: ds.Id,
|
|
OrgId: ds.OrgId,
|
|
JsonData: string(jsonData),
|
|
DecryptedSecureJsonData: ds.SecureJsonData.Decrypt(),
|
|
},
|
|
Queries: []*pluginv2.DataQuery{},
|
|
}
|
|
|
|
for _, q := range query.Queries {
|
|
modelJSON, err := q.Model.MarshalJSON()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
pbQuery.Queries = append(pbQuery.Queries, &pluginv2.DataQuery{
|
|
Json: modelJSON,
|
|
IntervalMS: q.IntervalMs,
|
|
RefId: q.RefId,
|
|
MaxDataPoints: q.MaxDataPoints,
|
|
TimeRange: &pluginv2.TimeRange{
|
|
ToEpochMS: query.TimeRange.GetToAsMsEpoch(),
|
|
FromEpochMS: query.TimeRange.GetFromAsMsEpoch(),
|
|
},
|
|
})
|
|
}
|
|
|
|
pbRes, err := tw.BackendPlugin.DataQuery(ctx, pbQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &tsdb.Response{
|
|
Results: map[string]*tsdb.QueryResult{
|
|
"": {
|
|
Dataframes: pbRes.Frames,
|
|
Meta: simplejson.NewFromAny(pbRes.Metadata),
|
|
},
|
|
},
|
|
}, nil
|
|
}
|