Просмотр исходного кода

Merge branch 'master' of github.com:grafana/grafana

Torkel Ödegaard 8 лет назад
Родитель
Сommit
3662b03d8f
1 измененных файлов с 26 добавлено и 12 удалено
  1. 26 12
      pkg/tsdb/cloudwatch/metric_find_query.go

+ 26 - 12
pkg/tsdb/cloudwatch/metric_find_query.go

@@ -188,18 +188,6 @@ func (e *CloudWatchExecutor) executeMetricFindQuery(ctx context.Context, queryCo
 		data, err = e.handleGetEbsVolumeIds(ctx, parameters, queryContext)
 		break
 	case "ec2_instance_attribute":
-		region := parameters.Get("region").MustString()
-		dsInfo := e.getDsInfo(region)
-		cfg, err := e.getAwsConfig(dsInfo)
-		if err != nil {
-			return nil, fmt.Errorf("Failed to call ec2:DescribeInstances, %v", err)
-		}
-		sess, err := session.NewSession(cfg)
-		if err != nil {
-			return nil, fmt.Errorf("Failed to call ec2:DescribeInstances, %v", err)
-		}
-		e.ec2Svc = ec2.New(sess, cfg)
-
 		data, err = e.handleGetEc2InstanceAttribute(ctx, parameters, queryContext)
 		break
 	}
@@ -365,10 +353,31 @@ func (e *CloudWatchExecutor) handleGetDimensionValues(ctx context.Context, param
 	return result, nil
 }
 
+func (e *CloudWatchExecutor) ensureClientSession(region string) error {
+	if e.ec2Svc == nil {
+		dsInfo := e.getDsInfo(region)
+		cfg, err := e.getAwsConfig(dsInfo)
+		if err != nil {
+			return fmt.Errorf("Failed to call ec2:getAwsConfig, %v", err)
+		}
+		sess, err := session.NewSession(cfg)
+		if err != nil {
+			return fmt.Errorf("Failed to call ec2:NewSession, %v", err)
+		}
+		e.ec2Svc = ec2.New(sess, cfg)
+	}
+	return nil
+}
+
 func (e *CloudWatchExecutor) handleGetEbsVolumeIds(ctx context.Context, parameters *simplejson.Json, queryContext *tsdb.TsdbQuery) ([]suggestData, error) {
 	region := parameters.Get("region").MustString()
 	instanceId := parameters.Get("instanceId").MustString()
 
+	err := e.ensureClientSession(region)
+	if err != nil {
+		return nil, err
+	}
+
 	instanceIds := []*string{aws.String(instanceId)}
 	instances, err := e.ec2DescribeInstances(region, nil, instanceIds)
 	if err != nil {
@@ -404,6 +413,11 @@ func (e *CloudWatchExecutor) handleGetEc2InstanceAttribute(ctx context.Context,
 		}
 	}
 
+	err := e.ensureClientSession(region)
+	if err != nil {
+		return nil, err
+	}
+
 	instances, err := e.ec2DescribeInstances(region, filters, nil)
 	if err != nil {
 		return nil, err