mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Merge pull request #14151 from grafana/14150_cloudwatch
Fix invalid time range causes panic in Cloudwatch datasources
This commit is contained in:
commit
40a38552a9
@ -126,6 +126,18 @@ func (e *CloudWatchExecutor) executeTimeSeriesQuery(ctx context.Context, queryCo
|
|||||||
}
|
}
|
||||||
|
|
||||||
eg.Go(func() error {
|
eg.Go(func() error {
|
||||||
|
defer func() {
|
||||||
|
if err := recover(); err != nil {
|
||||||
|
plog.Error("Execute Query Panic", "error", err, "stack", log.Stack(1))
|
||||||
|
if theErr, ok := err.(error); ok {
|
||||||
|
resultChan <- &tsdb.QueryResult{
|
||||||
|
RefId: query.RefId,
|
||||||
|
Error: theErr,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
queryRes, err := e.executeQuery(ectx, query, queryContext)
|
queryRes, err := e.executeQuery(ectx, query, queryContext)
|
||||||
if ae, ok := err.(awserr.Error); ok && ae.Code() == "500" {
|
if ae, ok := err.(awserr.Error); ok && ae.Code() == "500" {
|
||||||
return err
|
return err
|
||||||
@ -146,6 +158,17 @@ func (e *CloudWatchExecutor) executeTimeSeriesQuery(ctx context.Context, queryCo
|
|||||||
for region, getMetricDataQuery := range getMetricDataQueries {
|
for region, getMetricDataQuery := range getMetricDataQueries {
|
||||||
q := getMetricDataQuery
|
q := getMetricDataQuery
|
||||||
eg.Go(func() error {
|
eg.Go(func() error {
|
||||||
|
defer func() {
|
||||||
|
if err := recover(); err != nil {
|
||||||
|
plog.Error("Execute Get Metric Data Query Panic", "error", err, "stack", log.Stack(1))
|
||||||
|
if theErr, ok := err.(error); ok {
|
||||||
|
resultChan <- &tsdb.QueryResult{
|
||||||
|
Error: theErr,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
queryResponses, err := e.executeGetMetricDataQuery(ectx, region, q, queryContext)
|
queryResponses, err := e.executeGetMetricDataQuery(ectx, region, q, queryContext)
|
||||||
if ae, ok := err.(awserr.Error); ok && ae.Code() == "500" {
|
if ae, ok := err.(awserr.Error); ok && ae.Code() == "500" {
|
||||||
return err
|
return err
|
||||||
@ -188,8 +211,8 @@ func (e *CloudWatchExecutor) executeQuery(ctx context.Context, query *CloudWatch
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if endTime.Before(startTime) {
|
if !startTime.Before(endTime) {
|
||||||
return nil, fmt.Errorf("Invalid time range: End time can't be before start time")
|
return nil, fmt.Errorf("Invalid time range: Start time must be before end time")
|
||||||
}
|
}
|
||||||
|
|
||||||
params := &cloudwatch.GetMetricStatisticsInput{
|
params := &cloudwatch.GetMetricStatisticsInput{
|
||||||
|
@ -1,9 +1,13 @@
|
|||||||
package cloudwatch
|
package cloudwatch
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/grafana/grafana/pkg/models"
|
||||||
|
"github.com/grafana/grafana/pkg/tsdb"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/cloudwatch"
|
"github.com/aws/aws-sdk-go/service/cloudwatch"
|
||||||
"github.com/grafana/grafana/pkg/components/null"
|
"github.com/grafana/grafana/pkg/components/null"
|
||||||
@ -14,6 +18,24 @@ import (
|
|||||||
func TestCloudWatch(t *testing.T) {
|
func TestCloudWatch(t *testing.T) {
|
||||||
Convey("CloudWatch", t, func() {
|
Convey("CloudWatch", t, func() {
|
||||||
|
|
||||||
|
Convey("executeQuery", func() {
|
||||||
|
e := &CloudWatchExecutor{
|
||||||
|
DataSource: &models.DataSource{
|
||||||
|
JsonData: simplejson.New(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
Convey("End time before start time should result in error", func() {
|
||||||
|
_, err := e.executeQuery(context.Background(), &CloudWatchQuery{}, &tsdb.TsdbQuery{TimeRange: tsdb.NewTimeRange("now-1h", "now-2h")})
|
||||||
|
So(err.Error(), ShouldEqual, "Invalid time range: Start time must be before end time")
|
||||||
|
})
|
||||||
|
|
||||||
|
Convey("End time equals start time should result in error", func() {
|
||||||
|
_, err := e.executeQuery(context.Background(), &CloudWatchQuery{}, &tsdb.TsdbQuery{TimeRange: tsdb.NewTimeRange("now-1h", "now-1h")})
|
||||||
|
So(err.Error(), ShouldEqual, "Invalid time range: Start time must be before end time")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
Convey("can parse cloudwatch json model", func() {
|
Convey("can parse cloudwatch json model", func() {
|
||||||
json := `
|
json := `
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user