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

Merge branch 'mtanda-cloudwatch_interval'

bergquist 9 лет назад
Родитель
Сommit
6f1a9f4f2e

+ 26 - 7
public/app/plugins/datasource/cloudwatch/datasource.js

@@ -3,9 +3,10 @@ define([
   'lodash',
   'moment',
   'app/core/utils/datemath',
+  'app/core/utils/kbn',
   './annotation_query',
 ],
-function (angular, _, moment, dateMath, CloudWatchAnnotationQuery) {
+function (angular, _, moment, dateMath, kbn, CloudWatchAnnotationQuery) {
   'use strict';
 
   /** @ngInject */
@@ -36,12 +37,9 @@ function (angular, _, moment, dateMath, CloudWatchAnnotationQuery) {
         query.dimensions = self.convertDimensionFormat(target.dimensions, options.scopedVars);
         query.statistics = target.statistics;
 
-        var range = end - start;
-        query.period = parseInt(target.period, 10) || (query.namespace === 'AWS/EC2' ? 300 : 60);
-        if (range / query.period >= 1440) {
-          query.period = Math.ceil(range / 1440 / 60) * 60;
-        }
-        target.period = query.period;
+        var period = this._getPeriod(target, query, options, start, end);
+        target.period = period;
+        query.period = period;
 
         queries.push(query);
       }.bind(this));
@@ -69,6 +67,27 @@ function (angular, _, moment, dateMath, CloudWatchAnnotationQuery) {
       });
     };
 
+    this._getPeriod = function(target, query, options, start, end) {
+      var period;
+      var range = end - start;
+
+      if (!target.period) {
+        period = (query.namespace === 'AWS/EC2') ? 300 : 60;
+      } else if (/^\d+$/.test(target.period)) {
+        period = parseInt(target.period, 10);
+      } else {
+        period = kbn.interval_to_seconds(templateSrv.replace(target.period, options.scopedVars));
+      }
+      if (query.period < 60) {
+        period = 60;
+      }
+      if (range / query.period >= 1440) {
+        period = Math.ceil(range / 1440 / 60) * 60;
+      }
+
+      return period;
+    };
+
     this.performTimeSeriesQuery = function(query, start, end) {
       return this.awsRequest({
         region: query.region,

+ 29 - 0
public/app/plugins/datasource/cloudwatch/specs/datasource_specs.ts

@@ -82,6 +82,35 @@ describe('CloudWatchDatasource', function() {
       ctx.$rootScope.$apply();
     });
 
+    it('should generate the correct query with interval variable', function(done) {
+      ctx.templateSrv.data = {
+        period: '10m'
+      };
+
+      var query = {
+        range: { from: 'now-1h', to: 'now' },
+        targets: [
+          {
+            region: 'us-east-1',
+            namespace: 'AWS/EC2',
+            metricName: 'CPUUtilization',
+            dimensions: {
+              InstanceId: 'i-12345678'
+            },
+            statistics: ['Average'],
+            period: '[[period]]'
+          }
+        ]
+      };
+
+      ctx.ds.query(query).then(function() {
+        var params = requestParams.data.parameters;
+        expect(params.period).to.be(600);
+        done();
+      });
+      ctx.$rootScope.$apply();
+    });
+
     it('should return series list', function(done) {
       ctx.ds.query(query).then(function(result) {
         expect(result.data[0].target).to.be('CPUUtilization_Average');