adds null check for response parser

This commit is contained in:
Carl Bergquist
2015-12-08 12:07:56 +01:00
parent 8ad10149ab
commit dd7a13930f
6 changed files with 34 additions and 47 deletions

View File

@@ -76,8 +76,12 @@ function (_, queryDef) {
newSeries = { datapoints: [], metric: metric.type, field: metric.field, props: props}; newSeries = { datapoints: [], metric: metric.type, field: metric.field, props: props};
for (i = 0; i < esAgg.buckets.length; i++) { for (i = 0; i < esAgg.buckets.length; i++) {
bucket = esAgg.buckets[i]; bucket = esAgg.buckets[i];
value = bucket[metric.id].value;
newSeries.datapoints.push([value, bucket.key]); value = bucket[metric.id];
if (value !== undefined) {
newSeries.datapoints.push([value.value, bucket.key]);
}
} }
seriesList.push(newSeries); seriesList.push(newSeries);
break; break;

View File

@@ -35,6 +35,10 @@ function (angular, _, queryDef) {
} }
switch($scope.agg.type) { switch($scope.agg.type) {
case 'moving_avg': {
$scope.agg.aggregation = $scope.agg.aggregation || 'sum';
break;
}
case 'percentiles': { case 'percentiles': {
$scope.agg.settings.percents = $scope.agg.settings.percents || [25,50,75,95,99]; $scope.agg.settings.percents = $scope.agg.settings.percents || [25,50,75,95,99];
$scope.settingsLinkText = 'values: ' + $scope.agg.settings.percents.join(','); $scope.settingsLinkText = 'values: ' + $scope.agg.settings.percents.join(',');
@@ -79,19 +83,9 @@ function (angular, _, queryDef) {
}; };
$scope.getMetrics = function() { $scope.getMetrics = function() {
console.log($scope.target.metrics); var aggs = [{ text: 'Sum', type: 'sum'}, { text: 'Average', type: 'avg'}];
var mets = _.filter($scope.target.metrics, function(x) { return $q.when(aggs)
return x.type !== 'moving_avg';
});
mets = _.map(mets, function(m) {
return { text: m.type, type: m.id };
});
console.log(mets);
return $q.when(mets)
.then(uiSegmentSrv.transformToSegments(false)); .then(uiSegmentSrv.transformToSegments(false));
}; };

View File

@@ -10,7 +10,7 @@
<metric-segment-model property="agg.field" get-options="getFieldsInternal()" on-change="onChange()" css-class="tight-form-item-xxlarge"></metric-segment-model> <metric-segment-model property="agg.field" get-options="getFieldsInternal()" on-change="onChange()" css-class="tight-form-item-xxlarge"></metric-segment-model>
</li> </li>
<li ng-if="aggDef.requiresBucketsPath"> <li ng-if="aggDef.requiresBucketsPath">
<metric-segment-model property="agg.field" get-options="getMetrics()" on-change="onChange()" css-class="tight-form-item-xxlarge"></metric-segment-model> <metric-segment-model property="agg.aggregation" get-options="getMetrics()" on-change="onChange()" css-class="tight-form-item-xxlarge"></metric-segment-model>
</li> </li>
<li class="tight-form-item last" ng-if="settingsLinkText"> <li class="tight-form-item last" ng-if="settingsLinkText">
<a ng-click="toggleOptions()">{{settingsLinkText}}</a> <a ng-click="toggleOptions()">{{settingsLinkText}}</a>

View File

@@ -167,36 +167,28 @@ function () {
continue; continue;
} }
var metricAgg = {field: metric.field}; var aggField = {};
var metricAgg = null;
if (metric.type === 'moving_avg') {
var subBucket = metric.id + "_mavg";
var af = {};
af[metric.aggregation] = {field: metric.field};
nestedAggs.aggs[subBucket] = af;
metricAgg = { buckets_path: subBucket };
} else {
metricAgg = {field: metric.field};
}
for (var prop in metric.settings) { for (var prop in metric.settings) {
if (metric.settings.hasOwnProperty(prop) && metric.settings[prop] !== null) { if (metric.settings.hasOwnProperty(prop) && metric.settings[prop] !== null) {
metricAgg[prop] = metric.settings[prop]; metricAgg[prop] = metric.settings[prop];
} }
} }
var aggField = {}; aggField[metric.type] = metricAgg;
if (metric.type === 'moving_avg') { nestedAggs.aggs[metric.id] = aggField;
var pipeAgg = '';
for(var aggname in nestedAggs.aggs) {
var agg = nestedAggs.aggs[aggname];
for(prop in agg) {
if (agg.hasOwnProperty(prop) && agg[prop] !== null) {
if (metric.field === prop) {
pipeAgg = aggname;
break;
}
}
}
}
if (pipeAgg !== '') {
aggField[metric.type] = { buckets_path: pipeAgg };
nestedAggs.aggs[metric.id] = aggField;
}
} else {
aggField[metric.type] = metricAgg;
nestedAggs.aggs[metric.id] = aggField;
}
} }
return query; return query;

View File

@@ -13,7 +13,7 @@ function (_) {
{text: "Min", value: 'min', requiresField: true}, {text: "Min", value: 'min', requiresField: true},
{text: "Extended Stats", value: 'extended_stats', requiresField: true}, {text: "Extended Stats", value: 'extended_stats', requiresField: true},
{text: "Percentiles", value: 'percentiles', requiresField: true}, {text: "Percentiles", value: 'percentiles', requiresField: true},
{text: "Moving Avg", value: 'moving_avg', requiresField: false, requiresBucketsPath: true}, {text: "Moving Avg", value: 'moving_avg', requiresField: true, requiresBucketsPath: true},
{text: "Unique Count", value: "cardinality", requiresField: true}, {text: "Unique Count", value: "cardinality", requiresField: true},
{text: "Raw Document", value: "raw_document", requiresField: false} {text: "Raw Document", value: "raw_document", requiresField: false}
], ],

View File

@@ -158,15 +158,11 @@ describe('ElasticQueryBuilder', function() {
it('with moving average', function() { it('with moving average', function() {
var query = builder.build({ var query = builder.build({
metrics: [ metrics: [
{
id: '1',
type: 'sum',
field: '@value',
},
{ {
id: '2', id: '2',
type: 'moving_avg', type: 'moving_avg',
field: 'sum' field: '@value',
aggregation: 'sum'
} }
], ],
bucketAggs: [ bucketAggs: [
@@ -175,8 +171,9 @@ describe('ElasticQueryBuilder', function() {
}); });
var firstLevel = query.aggs["3"]; var firstLevel = query.aggs["3"];
console.log(JSON.stringify(query));
expect(firstLevel.aggs["2"]).not.to.be(undefined); expect(firstLevel.aggs["2"]).not.to.be(undefined);
expect(firstLevel.aggs["2"].moving_avg).not.to.be(undefined); expect(firstLevel.aggs["2"].moving_avg).not.to.be(undefined);
expect(firstLevel.aggs["2"].moving_avg.buckets_path).to.be("1"); expect(firstLevel.aggs["2"].moving_avg.buckets_path).to.be("99");
}); });
}); });