Browse Source

stackdriver: skeleton for more query types on the backend

Daniel Lee 7 years ago
parent
commit
4777689f29

+ 24 - 0
pkg/tsdb/stackdriver/annotation_query.go

@@ -0,0 +1,24 @@
+package stackdriver
+
+import (
+	"context"
+
+	"github.com/grafana/grafana/pkg/tsdb"
+)
+
+func (e *StackdriverExecutor) executeAnnotationQuery(ctx context.Context, tsdbQuery *tsdb.TsdbQuery) (*tsdb.Response, error) {
+	result := &tsdb.Response{
+		Results: make(map[string]*tsdb.QueryResult),
+	}
+
+	_, err := e.buildAnnotationQuery(tsdbQuery)
+	if err != nil {
+		return nil, err
+	}
+
+	return result, nil
+}
+
+func (e *StackdriverExecutor) buildAnnotationQuery(tsdbQuery *tsdb.TsdbQuery) (*StackdriverQuery, error) {
+	return &StackdriverQuery{}, nil
+}

+ 41 - 0
pkg/tsdb/stackdriver/annotation_query_test.go

@@ -0,0 +1,41 @@
+package stackdriver
+
+import (
+	"fmt"
+	"testing"
+	"time"
+
+	"github.com/grafana/grafana/pkg/components/simplejson"
+	"github.com/grafana/grafana/pkg/tsdb"
+
+	. "github.com/smartystreets/goconvey/convey"
+)
+
+func TestStackdriverAnnotationQuery(t *testing.T) {
+	Convey("Stackdriver Annotation Query Executor", t, func() {
+		executor := &StackdriverExecutor{}
+		Convey("Parse queries from frontend and build Stackdriver API queries", func() {
+			fromStart := time.Date(2018, 3, 15, 13, 0, 0, 0, time.UTC).In(time.Local)
+			tsdbQuery := &tsdb.TsdbQuery{
+				TimeRange: &tsdb.TimeRange{
+					From: fmt.Sprintf("%v", fromStart.Unix()*1000),
+					To:   fmt.Sprintf("%v", fromStart.Add(34*time.Minute).Unix()*1000),
+				},
+				Queries: []*tsdb.Query{
+					{
+						Model: simplejson.NewFromAny(map[string]interface{}{
+							"metricType": "a/metric/type",
+							"view":       "FULL",
+							"type":       "annotationQuery",
+						}),
+						RefId: "annotationQuery",
+					},
+				},
+			}
+			query, err := executor.buildAnnotationQuery(tsdbQuery)
+			So(err, ShouldBeNil)
+
+			So(query, ShouldNotBeNil)
+		})
+	})
+}

+ 17 - 0
pkg/tsdb/stackdriver/stackdriver.go

@@ -66,6 +66,23 @@ func init() {
 // executes the queries against the Stackdriver API and parses the response into
 // the time series or table format
 func (e *StackdriverExecutor) Query(ctx context.Context, dsInfo *models.DataSource, tsdbQuery *tsdb.TsdbQuery) (*tsdb.Response, error) {
+	var result *tsdb.Response
+	var err error
+	queryType := tsdbQuery.Queries[0].Model.Get("type").MustString("")
+
+	switch queryType {
+	case "annotationQuery":
+		result, err = e.executeAnnotationQuery(ctx, tsdbQuery)
+	case "timeSeriesQuery":
+		fallthrough
+	default:
+		result, err = e.executeTimeSeriesQuery(ctx, tsdbQuery)
+	}
+
+	return result, err
+}
+
+func (e *StackdriverExecutor) executeTimeSeriesQuery(ctx context.Context, tsdbQuery *tsdb.TsdbQuery) (*tsdb.Response, error) {
 	result := &tsdb.Response{
 		Results: make(map[string]*tsdb.QueryResult),
 	}

+ 1 - 0
pkg/tsdb/stackdriver/stackdriver_test.go

@@ -31,6 +31,7 @@ func TestStackdriver(t *testing.T) {
 							"metricType": "a/metric/type",
 							"view":       "FULL",
 							"aliasBy":    "testalias",
+							"type":       "timeSeriesQuery",
 						}),
 						RefId: "A",
 					},