mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
feat(elasticsearch): added bucket agg id concept
This commit is contained in:
@@ -65,7 +65,7 @@ function (angular, _, $) {
|
||||
$scope.orderByOptions = [
|
||||
{text: "Doc Count", value: '_count' },
|
||||
{text: "Term name", value: '_term' },
|
||||
{text: "Average of @value", value: '0' },
|
||||
{text: "Average of @value", value: 'm0' },
|
||||
];
|
||||
}
|
||||
|
||||
@@ -78,7 +78,11 @@ function (angular, _, $) {
|
||||
addIndex - 1;
|
||||
}
|
||||
|
||||
bucketAggs.splice(addIndex, 0, {type: "terms", field: "select field" });
|
||||
var id = _.reduce($scope.target.bucketAggs.concat($scope.target.metrics), function(max, val) {
|
||||
return parseInt(val.id) > max ? parseInt(val.id) : max;
|
||||
}, 0);
|
||||
|
||||
bucketAggs.splice(addIndex, 0, {type: "terms", field: "select field", id: (id+1).toString()});
|
||||
};
|
||||
|
||||
$scope.removeBucketAgg = function() {
|
||||
|
||||
@@ -174,18 +174,19 @@ function (angular, _, config, kbn, moment, ElasticQueryBuilder) {
|
||||
|
||||
// This is quite complex
|
||||
// neeed to recurise down the nested buckets to build series
|
||||
ElasticDatasource.prototype._processBuckets = function(buckets, target, series, level, parentName) {
|
||||
var seriesName, value, metric, i, y, bucket, childBucket;
|
||||
ElasticDatasource.prototype._processBuckets = function(aggs, target, series, level, parentName) {
|
||||
var seriesName, value, metric, i, y, bucket, childBucket, aggDef, esAgg;
|
||||
var buckets;
|
||||
var dataFound = 0;
|
||||
|
||||
for (i = 0; i < buckets.length; i++) {
|
||||
bucket = buckets[i];
|
||||
childBucket = bucket['b' + level];
|
||||
aggDef = target.bucketAggs[level];
|
||||
esAgg = aggs[aggDef.id];
|
||||
|
||||
if (childBucket && childBucket.buckets) {
|
||||
seriesName = parentName + ' ' + bucket.key;
|
||||
this._processBuckets(childBucket.buckets, target, series, level+1, seriesName);
|
||||
} else {
|
||||
for (i = 0; i < esAgg.buckets.length; i++) {
|
||||
bucket = esAgg.buckets[i];
|
||||
|
||||
// if last agg collect series
|
||||
if (level === target.bucketAggs.length - 1) {
|
||||
for (y = 0; y < target.metrics.length; y++) {
|
||||
metric = target.metrics[y];
|
||||
seriesName = parentName;
|
||||
@@ -195,13 +196,16 @@ function (angular, _, config, kbn, moment, ElasticQueryBuilder) {
|
||||
value = bucket.doc_count;
|
||||
} else {
|
||||
seriesName += ' ' + metric.field + ' ' + metric.type;
|
||||
value = bucket['m' + y.toString()].value;
|
||||
value = bucket[metric.id].value;
|
||||
}
|
||||
|
||||
var serie = series[seriesName] = series[seriesName] || {target: seriesName, datapoints: []};
|
||||
serie.datapoints.push([value, bucket.key]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
this._processBuckets(bucket, target, series, level+1, parentName + ' ' + bucket.key);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -214,11 +218,11 @@ function (angular, _, config, kbn, moment, ElasticQueryBuilder) {
|
||||
throw { message: response.error };
|
||||
}
|
||||
|
||||
var buckets = response.aggregations["b0"].buckets;
|
||||
var aggregations = response.aggregations;
|
||||
var target = targets[i];
|
||||
var querySeries = {};
|
||||
|
||||
this._processBuckets(buckets, target, querySeries, 1, target.refId);
|
||||
this._processBuckets(aggregations, target, querySeries, 0, target.refId);
|
||||
|
||||
for (var prop in querySeries) {
|
||||
if (querySeries.hasOwnProperty(prop)) {
|
||||
|
||||
@@ -39,7 +39,12 @@ function (angular, _, $) {
|
||||
|
||||
$scope.addMetricAgg = function() {
|
||||
var addIndex = metricAggs.length;
|
||||
metricAggs.splice(addIndex, 0, {type: "count", field: "select field" });
|
||||
|
||||
var id = _.reduce($scope.target.bucketAggs.concat($scope.target.metrics), function(max, val) {
|
||||
return parseInt(val.id) > max ? parseInt(val.id) : max;
|
||||
}, 0);
|
||||
|
||||
metricAggs.splice(addIndex, 0, {type: "count", field: "select field", id: (id+1).toString()});
|
||||
};
|
||||
|
||||
$scope.removeMetricAgg = function() {
|
||||
|
||||
@@ -54,13 +54,19 @@ function (angular) {
|
||||
break;
|
||||
}
|
||||
case 'terms': {
|
||||
esAgg["terms"] = { "field": aggDef.field };
|
||||
esAgg.terms = { "field": aggDef.field };
|
||||
var size = parseInt(aggDef.size, 10);
|
||||
if (size > 0) { esAgg.terms.size = size; }
|
||||
if (aggDef.orderBy) {
|
||||
esAgg.terms.order = {};
|
||||
esAgg.terms.order[aggDef.orderBy] = aggDef.order;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
nestedAggs.aggs = {};
|
||||
nestedAggs.aggs['b' + i] = esAgg;
|
||||
nestedAggs.aggs[aggDef.id] = esAgg;
|
||||
nestedAggs = esAgg;
|
||||
}
|
||||
|
||||
@@ -74,7 +80,7 @@ function (angular) {
|
||||
|
||||
var aggField = {};
|
||||
aggField[metric.type] = {field: metric.field};
|
||||
nestedAggs.aggs['m' + i] = aggField;
|
||||
nestedAggs.aggs[metric.id] = aggField;
|
||||
}
|
||||
|
||||
return query;
|
||||
|
||||
@@ -15,16 +15,18 @@ function (angular, _, ElasticQueryBuilder) {
|
||||
if (!target) { return; }
|
||||
|
||||
target.timeField = target.timeField || '@timestamp';
|
||||
target.metrics = target.metrics || [{ type: 'count' }];
|
||||
target.metrics = target.metrics || [{ type: 'count', id: '1' }];
|
||||
target.bucketAggs = target.bucketAggs || [];
|
||||
target.bucketAggs = [
|
||||
{
|
||||
type: 'terms',
|
||||
field: '@hostname'
|
||||
field: '@hostname',
|
||||
id: '2'
|
||||
},
|
||||
{
|
||||
type: 'date_histogram',
|
||||
field: '@timestamp'
|
||||
field: '@timestamp',
|
||||
id: '3'
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user