mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
| package wrapper
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"errors"
 | |
| 
 | |
| 	sdk "github.com/grafana/grafana-plugin-sdk-go/datasource"
 | |
| 	"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.DatasourcePlugin) *DatasourcePluginWrapperV2 {
 | |
| 	return &DatasourcePluginWrapperV2{DatasourcePlugin: plugin, logger: log}
 | |
| }
 | |
| 
 | |
| type DatasourcePluginWrapperV2 struct {
 | |
| 	sdk.DatasourcePlugin
 | |
| 	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.DatasourceRequest{
 | |
| 		Datasource: &pluginv2.DatasourceInfo{
 | |
| 			Name:                    ds.Name,
 | |
| 			Type:                    ds.Type,
 | |
| 			Url:                     ds.Url,
 | |
| 			Id:                      ds.Id,
 | |
| 			OrgId:                   ds.OrgId,
 | |
| 			JsonData:                string(jsonData),
 | |
| 			DecryptedSecureJsonData: ds.SecureJsonData.Decrypt(),
 | |
| 		},
 | |
| 		TimeRange: &pluginv2.TimeRange{
 | |
| 			FromRaw:     query.TimeRange.From,
 | |
| 			ToRaw:       query.TimeRange.To,
 | |
| 			ToEpochMs:   query.TimeRange.GetToAsMsEpoch(),
 | |
| 			FromEpochMs: query.TimeRange.GetFromAsMsEpoch(),
 | |
| 		},
 | |
| 		Queries: []*pluginv2.DatasourceQuery{},
 | |
| 	}
 | |
| 
 | |
| 	for _, q := range query.Queries {
 | |
| 		modelJSON, err := q.Model.MarshalJSON()
 | |
| 		if err != nil {
 | |
| 			return nil, err
 | |
| 		}
 | |
| 		pbQuery.Queries = append(pbQuery.Queries, &pluginv2.DatasourceQuery{
 | |
| 			ModelJson:     string(modelJSON),
 | |
| 			IntervalMs:    q.IntervalMs,
 | |
| 			RefId:         q.RefId,
 | |
| 			MaxDataPoints: q.MaxDataPoints,
 | |
| 		})
 | |
| 	}
 | |
| 
 | |
| 	pbres, err := tw.DatasourcePlugin.Query(ctx, pbQuery)
 | |
| 
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	res := &tsdb.Response{
 | |
| 		Results: map[string]*tsdb.QueryResult{},
 | |
| 	}
 | |
| 
 | |
| 	for _, r := range pbres.Results {
 | |
| 		qr := &tsdb.QueryResult{
 | |
| 			RefId: r.RefId,
 | |
| 		}
 | |
| 
 | |
| 		if r.Error != "" {
 | |
| 			qr.Error = errors.New(r.Error)
 | |
| 			qr.ErrorString = r.Error
 | |
| 		}
 | |
| 
 | |
| 		if r.MetaJson != "" {
 | |
| 			metaJSON, err := simplejson.NewJson([]byte(r.MetaJson))
 | |
| 			if err != nil {
 | |
| 				tw.logger.Error("Error parsing JSON Meta field: " + err.Error())
 | |
| 			}
 | |
| 			qr.Meta = metaJSON
 | |
| 		}
 | |
| 		qr.Dataframes = r.Dataframes
 | |
| 
 | |
| 		res.Results[r.RefId] = qr
 | |
| 	}
 | |
| 
 | |
| 	return res, nil
 | |
| }
 |