Jelajahi Sumber

add tests for elastic search versioning in query builder and make es version 2 default

Mauro Stettler 10 tahun lalu
induk
melakukan
a30ceefa6b

+ 1 - 1
public/app/features/org/datasourceEditCtrl.js

@@ -13,7 +13,7 @@ function (angular, _, config) {
 
     $scope.httpConfigPartialSrc = 'app/features/org/partials/datasourceHttpConfig.html';
 
-    var defaults = {name: '', type: 'graphite', url: '', access: 'proxy' };
+    var defaults = {name: '', type: 'graphite', url: '', access: 'proxy', jsonData: {'elasticsearchVersion': 2} };
 
     $scope.indexPatternTypes = [
       {name: 'No pattern',  value: undefined},

+ 2 - 2
public/app/plugins/datasource/elasticsearch/query_builder.js

@@ -13,7 +13,7 @@ function (angular) {
     var filter = {};
     filter[this.timeField] = {"gte": "$timeFrom", "lte": "$timeTo"};
 
-    // elastic search versions above 2.0 require the time format to be specified
+    // elastic search versions 2.x require the time format to be specified
     if (this.elasticsearchVersion >= 2) {
       filter[this.timeField]["format"] = "epoch_millis";
     }
@@ -136,7 +136,7 @@ function (angular) {
             "min_doc_count": 0,
             "extended_bounds": { "min": "$timeFrom", "max": "$timeTo" }
           };
-          // elastic search versions above 2.0 require the time format to be specified
+          // elastic search versions 2.x require the time format to be specified
           if (this.elasticsearchVersion >= 2) {
             esAgg["date_histogram"]["format"] = "epoch_millis";
           }

+ 33 - 0
public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts

@@ -44,6 +44,39 @@ describe('ElasticQueryBuilder', function() {
     expect(query.aggs["2"].aggs["3"].date_histogram.field).to.be("@timestamp");
   });
 
+  it('with es1.x and es2.x date histogram queries check time format', function() {
+    var builder_2x = new ElasticQueryBuilder({
+      timeField: '@timestamp',
+      elasticsearchVersion: 2
+    });
+
+    var query_params = {
+      metrics: [],
+      bucketAggs: [
+        {type: 'date_histogram', field: '@timestamp', id: '1'}
+      ],
+    };
+
+    // format should not be specified in 1.x queries
+    expect("format" in builder.build(query_params)["aggs"]["1"]["date_histogram"]).to.be(false);
+
+    // 2.x query should specify format to be "epoch_millis"
+    expect(builder_2x.build(query_params)["aggs"]["1"]["date_histogram"]["format"]).to.be("epoch_millis");
+  });
+
+  it('with es1.x and es2.x range filter check time format', function() {
+    var builder_2x = new ElasticQueryBuilder({
+      timeField: '@timestamp',
+      elasticsearchVersion: 2
+    });
+
+    // format should not be specified in 1.x queries
+    expect("format" in builder.getRangeFilter()["@timestamp"]).to.be(false);
+
+    // 2.x query should specify format to be "epoch_millis"
+    expect(builder_2x.getRangeFilter()["@timestamp"]["format"]).to.be("epoch_millis");
+  });
+
   it('with select field', function() {
     var query = builder.build({
       metrics: [{type: 'avg', field: '@value', id: '1'}],