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

feat(influxdb): began work on influxdb policy selector

Torkel Ödegaard 10 лет назад
Родитель
Сommit
a8e3f731b7

+ 1 - 0
public/app/plugins/datasource/influxdb/influx_query.ts

@@ -12,6 +12,7 @@ export default class InfluxQuery {
   constructor(target) {
     this.target = target;
 
+    target.policy = target.policy || 'default';
     target.dsType = 'influxdb';
     target.resultFormat = target.resultFormat || 'time_series';
     target.tags = target.tags || [];

+ 3 - 0
public/app/plugins/datasource/influxdb/partials/query.editor.html

@@ -45,6 +45,9 @@
 			<li class="tight-form-item query-keyword" style="width: 75px">
 				FROM
 			</li>
+			<li>
+				<metric-segment segment="policySegment" get-options="getPolicySegments()" on-change="policyChanged()"></metric-segment>
+			</li>
 			<li>
 				<metric-segment segment="measurementSegment" get-options="getMeasurements()" on-change="measurementChanged()"></metric-segment>
 			</li>

+ 3 - 0
public/app/plugins/datasource/influxdb/query_builder.js

@@ -62,6 +62,9 @@ function (_) {
     } else if (type === 'FIELDS') {
       query = 'SHOW FIELD KEYS FROM "' + this.target.measurement + '"';
       return query;
+    } else if (type === 'RETENTION POLICIES') {
+      query = 'SHOW RETENTION POLICIES';
+      return query;
     }
 
     if (measurement) {

+ 14 - 0
public/app/plugins/datasource/influxdb/query_ctrl.js

@@ -28,6 +28,8 @@ function (angular, _, InfluxQueryBuilder, InfluxQuery, queryPart) {
          {text: 'Table', value: 'table'},
       ];
 
+      $scope.policySegment = uiSegmentSrv.newSegment($scope.target.policy);
+
       if (!$scope.target.measurement) {
         $scope.measurementSegment = uiSegmentSrv.newSelectMeasurement();
       } else {
@@ -131,6 +133,18 @@ function (angular, _, InfluxQueryBuilder, InfluxQuery, queryPart) {
       $scope.get_data();
     };
 
+    $scope.getPolicySegments = function() {
+      var policiesQuery = $scope.queryBuilder.buildExploreQuery('RETENTION POLICIES');
+      return $scope.datasource.metricFindQuery(policiesQuery)
+      .then($scope.transformToSegments(false))
+      .then(null, $scope.handleQueryError);
+    };
+
+    $scope.policyChanged = function() {
+      $scope.target.policy = $scope.policySegment.value;
+      $scope.get_data();
+    };
+
     $scope.toggleQueryMode = function () {
       $scope.target.rawQuery = !$scope.target.rawQuery;
     };

+ 5 - 1
public/app/plugins/datasource/influxdb/specs/query_builder_specs.ts

@@ -70,6 +70,10 @@ describe('InfluxQueryBuilder', function() {
       expect(query).to.be('SHOW FIELD KEYS FROM "cpu"');
     });
 
+    it('should build show retention policies query', function() {
+      var builder = new InfluxQueryBuilder({measurement: 'cpu', tags: []});
+      var query = builder.buildExploreQuery('RETENTION POLICIES');
+      expect(query).to.be('SHOW RETENTION POLICIES');
+    });
   });
-
 });