diff --git a/README.md b/README.md index 401304c..203290a 100644 --- a/README.md +++ b/README.md @@ -23,22 +23,25 @@ func main() { ... snip ... - now := time.Now() - mq := &tsplot.MetricQuery{ - Project: "bitly-gcp-prod" - MetricDescriptor: "custom.googleapis.com/opencensus/fishnet/queuereader_fishnet/messages_total" - StartTime: now.Add(-time.Hour * 2) // start two hours ago - EndTime: now - } - - - // enable cross series reducer - query.SetReduce(true) - - tsi, err := mq.PerformWithClient(client) + start := time.Now().Add(-1 * time.Hour) + end := time.Now() + mq := &tsplot.NewMetricQuery( + "bitly-gcp-prod", // GCP project + "custom.googleapis.com/opencensus/fishent/queuereader_fishnet/messages_total", // metric descriptor + &start, // start of time window + &end, // end of time window + ) + + // disable cross series reducer (MEAN reduction is default) + query.Set_REDUCE_NONE() + + // set different alignment window. (Default is 1 minute) + query.SetAlignmentPeriod(time.Minute * 2) + + tsi, err := mq.PerformWithClient(client) // client is provided by user if err != nil { fmt.Printf("error performing query: %v\n", err) - os.Exit(1) + } } ``` @@ -53,6 +56,7 @@ func main() { ts := tsplot.TimeSeries{} + // optionally iterate over returned time series timeSeries, _ := tsi.Next() ts[metric] = ts.GetPoints() diff --git a/tsplot/query_test.go b/tsplot/query_test.go index e7c7604..2ef438b 100644 --- a/tsplot/query_test.go +++ b/tsplot/query_test.go @@ -2,6 +2,9 @@ package tsplot import ( "testing" + "time" + + monitoringpb "google.golang.org/genproto/googleapis/monitoring/v3" ) func TestMetricQuery_BuildRequest(t *testing.T) { @@ -36,3 +39,60 @@ func TestMetricQuery_BuildRequest(t *testing.T) { } } } + +func TestMetricQuery_SetQueryFilter(t *testing.T) { + expectedFilter := "some advanced query" + st := time.Now().Add(-1 * time.Hour) + et := time.Now() + query := NewMetricQuery("bitly-gcp-prod", "", &st, &et) + query.SetQueryFilter(expectedFilter) + + tsr, err := query.request() + if err != nil { + t.Error(err) + } + + filter := tsr.GetFilter() + if filter != expectedFilter { + t.Fatalf("query filter not overriden. got: %s, expected: %s", filter, expectedFilter) + } +} + +func TestMetricQuery_SetAlignmentPeriod(t *testing.T) { + expectedAlignmentPeriod := time.Minute * 10 + st := time.Now().Add(-1 * time.Hour) + et := time.Now() + query := NewMetricQuery("bitly-gcp-prod", "some metric", &st, &et) + query.SetAlignmentPeriod(expectedAlignmentPeriod) + + req, err := query.request() + if err != nil { + t.Error(err) + } + + alignmentPeriod := req.GetAggregation().GetAlignmentPeriod().GetSeconds() + if req.GetAggregation().GetAlignmentPeriod().GetSeconds() != int64(expectedAlignmentPeriod.Seconds()) { + t.Fatalf("alignment period not overriden. got %d, expected: %s", alignmentPeriod, expectedAlignmentPeriod) + } +} + +func TestMetricQuery_AggregationOptions(t *testing.T) { + st := time.Now().Add(-1 * time.Hour) + et := time.Now() + query := NewMetricQuery("bitly-gcp-prod", "some metric", &st, &et) + query.Set_ALIGN_NONE() + query.Set_REDUCE_NONE() + + req, err := query.request() + if err != nil { + t.Error(err) + } + + aggregation := req.GetAggregation() + if aggregation.GetPerSeriesAligner() != monitoringpb.Aggregation_ALIGN_NONE { + t.Fatal("aligner not overridden") + } + if aggregation.GetCrossSeriesReducer() != monitoringpb.Aggregation_REDUCE_NONE { + t.Fatal("reducer not overridden") + } +}