datasource_plugin_wrapper.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package tsdb
  2. import (
  3. "github.com/grafana/grafana/pkg/components/null"
  4. "github.com/grafana/grafana/pkg/models"
  5. "github.com/grafana/grafana/pkg/tsdb"
  6. proto "github.com/grafana/grafana/pkg/tsdb/models"
  7. "golang.org/x/net/context"
  8. )
  9. type DatasourcePluginWrapper struct {
  10. TsdbPlugin
  11. }
  12. func (tw *DatasourcePluginWrapper) Query(ctx context.Context, ds *models.DataSource, query *tsdb.TsdbQuery) (*tsdb.Response, error) {
  13. jsonData, err := ds.JsonData.MarshalJSON()
  14. if err != nil {
  15. return nil, err
  16. }
  17. pbQuery := &proto.TsdbQuery{
  18. Datasource: &proto.DatasourceInfo{
  19. JsonData: string(jsonData),
  20. Name: ds.Name,
  21. Type: ds.Type,
  22. Url: ds.Url,
  23. Id: ds.Id,
  24. OrgId: ds.OrgId,
  25. },
  26. TimeRange: &proto.TimeRange{
  27. FromRaw: query.TimeRange.From,
  28. ToRaw: query.TimeRange.To,
  29. ToEpochMs: query.TimeRange.GetToAsMsEpoch(),
  30. FromEpochMs: query.TimeRange.GetFromAsMsEpoch(),
  31. },
  32. Queries: []*proto.Query{},
  33. }
  34. for _, q := range query.Queries {
  35. modelJson, _ := q.Model.MarshalJSON()
  36. pbQuery.Queries = append(pbQuery.Queries, &proto.Query{
  37. ModelJson: string(modelJson),
  38. IntervalMs: q.IntervalMs,
  39. RefId: q.RefId,
  40. MaxDataPoints: q.MaxDataPoints,
  41. })
  42. }
  43. pbres, err := tw.TsdbPlugin.Query(ctx, pbQuery)
  44. if err != nil {
  45. return nil, err
  46. }
  47. res := &tsdb.Response{
  48. Results: map[string]*tsdb.QueryResult{},
  49. }
  50. for _, r := range pbres.Results {
  51. res.Results[r.RefId] = &tsdb.QueryResult{
  52. RefId: r.RefId,
  53. Series: []*tsdb.TimeSeries{},
  54. }
  55. for _, s := range r.Series {
  56. points := tsdb.TimeSeriesPoints{}
  57. for _, p := range s.Points {
  58. po := tsdb.NewTimePoint(null.FloatFrom(p.Value), float64(p.Timestamp))
  59. points = append(points, po)
  60. }
  61. res.Results[r.RefId].Series = append(res.Results[r.RefId].Series, &tsdb.TimeSeries{
  62. Name: s.Name,
  63. Tags: s.Tags,
  64. Points: points,
  65. })
  66. }
  67. }
  68. return res, nil
  69. }