From f3a2dc7c5f0593cf3b1c99f458a196052a8ce05e Mon Sep 17 00:00:00 2001 From: Mitsuhiro Tanda Date: Wed, 27 Sep 2017 00:00:38 +0900 Subject: [PATCH] improve cloudwatch tsdb --- pkg/tsdb/cloudwatch/annotation_query.go | 7 +-- pkg/tsdb/cloudwatch/metric_find_query.go | 56 ++++++++++++------------ 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/pkg/tsdb/cloudwatch/annotation_query.go b/pkg/tsdb/cloudwatch/annotation_query.go index 3736c19b100..a1c22d1542f 100644 --- a/pkg/tsdb/cloudwatch/annotation_query.go +++ b/pkg/tsdb/cloudwatch/annotation_query.go @@ -110,9 +110,10 @@ func (e *CloudWatchExecutor) executeAnnotationQuery(ctx context.Context, queryCo annotations := make([]map[string]string, 0) for _, alarmName := range alarmNames { params := &cloudwatch.DescribeAlarmHistoryInput{ - AlarmName: alarmName, - StartDate: aws.Time(startTime), - EndDate: aws.Time(endTime), + AlarmName: alarmName, + StartDate: aws.Time(startTime), + EndDate: aws.Time(endTime), + MaxRecords: aws.Int64(100), } resp, err := svc.DescribeAlarmHistory(params) if err != nil { diff --git a/pkg/tsdb/cloudwatch/metric_find_query.go b/pkg/tsdb/cloudwatch/metric_find_query.go index bc5525965d8..3f4f7bea9ef 100644 --- a/pkg/tsdb/cloudwatch/metric_find_query.go +++ b/pkg/tsdb/cloudwatch/metric_find_query.go @@ -392,40 +392,42 @@ func (e *CloudWatchExecutor) handleGetEc2InstanceAttribute(ctx context.Context, result := make([]suggestData, 0) dupCheck := make(map[string]bool) - for _, instance := range instances.Reservations[0].Instances { - tags := make(map[string]string) - for _, tag := range instance.Tags { - tags[*tag.Key] = *tag.Value - } + for _, reservation := range instances.Reservations { + for _, instance := range reservation.Instances { + tags := make(map[string]string) + for _, tag := range instance.Tags { + tags[*tag.Key] = *tag.Value + } - var data string - if strings.Index(attributeName, "Tags.") == 0 { - tagName := attributeName[5:] - data = tags[tagName] - } else { - attributePath := strings.Split(attributeName, ".") - v := reflect.ValueOf(instance) - for _, key := range attributePath { - if v.Kind() == reflect.Ptr { - v = v.Elem() + var data string + if strings.Index(attributeName, "Tags.") == 0 { + tagName := attributeName[5:] + data = tags[tagName] + } else { + attributePath := strings.Split(attributeName, ".") + v := reflect.ValueOf(instance) + for _, key := range attributePath { + if v.Kind() == reflect.Ptr { + v = v.Elem() + } + if v.Kind() != reflect.Struct { + return nil, errors.New("invalid attribute path") + } + v = v.FieldByName(key) } - if v.Kind() != reflect.Struct { + if attr, ok := v.Interface().(*string); ok { + data = *attr + } else { return nil, errors.New("invalid attribute path") } - v = v.FieldByName(key) } - if attr, ok := v.Interface().(*string); ok { - data = *attr - } else { - return nil, errors.New("invalid attribute path") - } - } - if _, exists := dupCheck[data]; exists { - continue + if _, exists := dupCheck[data]; exists { + continue + } + dupCheck[data] = true + result = append(result, suggestData{Text: data, Value: data}) } - dupCheck[data] = true - result = append(result, suggestData{Text: data, Value: data}) } sort.Slice(result, func(i, j int) bool {