testdata.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package testdata
  2. import (
  3. "math/rand"
  4. "github.com/grafana/grafana/pkg/tsdb"
  5. )
  6. type TestDataExecutor struct {
  7. *tsdb.DataSourceInfo
  8. }
  9. func NewTestDataExecutor(dsInfo *tsdb.DataSourceInfo) tsdb.Executor {
  10. return &TestDataExecutor{dsInfo}
  11. }
  12. func init() {
  13. tsdb.RegisterExecutor("grafana-testdata-datasource", NewTestDataExecutor)
  14. }
  15. func (e *TestDataExecutor) Execute(queries tsdb.QuerySlice, context *tsdb.QueryContext) *tsdb.BatchResult {
  16. result := &tsdb.BatchResult{}
  17. result.QueryResults = make(map[string]*tsdb.QueryResult)
  18. from, _ := context.TimeRange.FromTime()
  19. to, _ := context.TimeRange.ToTime()
  20. queryRes := &tsdb.QueryResult{}
  21. for _, query := range queries {
  22. // scenario := query.Model.Get("scenario").MustString("random_walk")
  23. series := &tsdb.TimeSeries{Name: "test-series-0"}
  24. stepInSeconds := (to.Unix() - from.Unix()) / query.MaxDataPoints
  25. points := make([][2]*float64, 0)
  26. walker := rand.Float64() * 100
  27. time := from.Unix()
  28. for i := int64(0); i < query.MaxDataPoints; i++ {
  29. timestamp := float64(time)
  30. val := float64(walker)
  31. points = append(points, [2]*float64{&val, &timestamp})
  32. walker += rand.Float64() - 0.5
  33. time += stepInSeconds
  34. }
  35. series.Points = points
  36. queryRes.Series = append(queryRes.Series, series)
  37. }
  38. result.QueryResults["A"] = queryRes
  39. return result
  40. }