mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
feat(elasticsearch): lots of work on elasticsearch metrics processing, handling grouped responses, etc, #1034
This commit is contained in:
@@ -172,6 +172,8 @@ function (angular, _, config, kbn, moment, ElasticQueryBuilder) {
|
||||
return date.getTime();
|
||||
};
|
||||
|
||||
// this is quite complex
|
||||
// neeed to recurise down the nested buckets to build series
|
||||
ElasticDatasource.prototype._processBuckets = function(buckets, groupByFields, series, level, parentName, parentTime) {
|
||||
var points = [];
|
||||
var groupBy = groupByFields[level];
|
||||
@@ -180,13 +182,14 @@ function (angular, _, config, kbn, moment, ElasticQueryBuilder) {
|
||||
var bucket = buckets[i];
|
||||
|
||||
if (groupBy) {
|
||||
var seriesName = "";
|
||||
var seriesName = level > 0 ? bucket.key : '';
|
||||
var time = parentTime || bucket.key;
|
||||
this._processBuckets(bucket[groupBy.field].buckets, groupByFields, series, level+1, seriesName, time)
|
||||
} else {
|
||||
var seriesName = parentName;
|
||||
|
||||
if (level > 0) {
|
||||
if (seriesName) { seriesName += " "; }
|
||||
seriesName += bucket.key;
|
||||
} else {
|
||||
parentTime = bucket.key;
|
||||
@@ -202,12 +205,17 @@ function (angular, _, config, kbn, moment, ElasticQueryBuilder) {
|
||||
var series = [];
|
||||
|
||||
for (var i = 0; i < results.responses.length; i++) {
|
||||
var buckets = results.responses[i].aggregations.histogram.buckets;
|
||||
var response = results.responses[i];
|
||||
if (response.error) {
|
||||
throw { message: response.error };
|
||||
}
|
||||
|
||||
var buckets = response.aggregations.histogram.buckets;
|
||||
var target = targets[i];
|
||||
var points = [];
|
||||
var querySeries = {}
|
||||
|
||||
this._processBuckets(buckets, target.groupByFields, querySeries, 0, target.refId);
|
||||
this._processBuckets(buckets, target.groupByFields, querySeries, 0);
|
||||
|
||||
_.each(querySeries, function(value) {
|
||||
series.push(value);
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
<div class="tight-form" ng-hide="target.rawQuery">
|
||||
<ul class="tight-form-list">
|
||||
<li class="tight-form-item query-keyword tight-form-align" style="width: 75px;">
|
||||
Group By
|
||||
Group by
|
||||
</li>
|
||||
<li ng-repeat="segment in groupBySegments">
|
||||
<metric-segment segment="segment" get-alt-segments="getGroupByFields(segment, $index)" on-value-changed="groupByChanged(segment, $index)"></metric-segment>
|
||||
|
||||
@@ -52,23 +52,23 @@ function () {
|
||||
"max": timeTo
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
var nestedAggs = {};
|
||||
var nestedAggs = query.aggs.histogram;
|
||||
|
||||
if (target.groupByFields && target.groupByFields.length > 0) {
|
||||
var field = target.groupByFields[0].field;
|
||||
nestedAggs[field] = {
|
||||
terms: {
|
||||
field: field,
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < target.groupByFields.length; i++) {
|
||||
var field = target.groupByFields[i].field;
|
||||
var aggs = {terms: {field: field}};
|
||||
|
||||
nestedAggs.aggs = {};
|
||||
nestedAggs.aggs[field] = aggs;
|
||||
nestedAggs = aggs;
|
||||
}
|
||||
|
||||
query.aggs.histogram.aggs = nestedAggs;
|
||||
console.log(angular.toJson(query, true));
|
||||
|
||||
query = JSON.stringify(query);
|
||||
query = angular.toJson(query);
|
||||
return query;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user