diff --git a/src/app/panels/histogram/editor.html b/src/app/panels/histogram/editor.html
index a4a5e2f07928e2..31f94396b92e6f 100644
--- a/src/app/panels/histogram/editor.html
+++ b/src/app/panels/histogram/editor.html
@@ -3,7 +3,7 @@
Values
-
+
diff --git a/src/app/panels/histogram/module.js b/src/app/panels/histogram/module.js
index 20f6bbcca586f3..de651b4486cef1 100644
--- a/src/app/panels/histogram/module.js
+++ b/src/app/panels/histogram/module.js
@@ -354,20 +354,26 @@ function (angular, app, $, _, kbn, moment, timeSeries, numeral) {
filterSrv.getBoolFilter(filterSrv.ids())
);
- var facet = $scope.ejs.DateHistogramFacet(q.id);
+ var aggr = $scope.ejs.DateHistogramAggregation(q.id);
if($scope.panel.mode === 'count') {
- facet = facet.field($scope.panel.time_field).global(true);
+ aggr = aggr.field($scope.panel.time_field);
+ } else if($scope.panel.mode === 'uniq') {
+ aggr = aggr.field($scope.panel.time_field).agg($scope.ejs.CardinalityAggregation(q.id).field($scope.panel.value_field));
} else {
if(_.isNull($scope.panel.value_field)) {
$scope.panel.error = "In " + $scope.panel.mode + " mode a field must be specified";
return;
}
- facet = facet.keyField($scope.panel.time_field).valueField($scope.panel.value_field).global(true);
+ aggr = aggr.field($scope.panel.time_field).agg($scope.ejs.StatsAggregation(q.id).field($scope.panel.value_field));
}
- facet = facet.interval(_interval).facetFilter($scope.ejs.QueryFilter(query));
- request = request.facet(facet)
- .size($scope.panel.annotate.enable ? $scope.panel.annotate.size : 0);
+ request = request.agg(
+ $scope.ejs.GlobalAggregation(q.id).agg(
+ $scope.ejs.FilterAggregation(q.id).filter($scope.ejs.QueryFilter(query)).agg(
+ aggr.interval(_interval)
+ )
+ )
+ ).size($scope.panel.annotate.enable ? $scope.panel.annotate.size : 0);
});
if($scope.panel.annotate.enable) {
@@ -419,7 +425,7 @@ function (angular, app, $, _, kbn, moment, timeSeries, numeral) {
counters; // Stores the bucketed hit counts.
_.each(queries, function(q) {
- var query_results = results.facets[q.id];
+ var query_results = results.aggregations[q.id][q.id][q.id];
// we need to initialize the data variable on the first run,
// and when we are working on the first segment of the data.
if(_.isUndefined(data[i]) || segment === 0) {
@@ -439,38 +445,40 @@ function (angular, app, $, _, kbn, moment, timeSeries, numeral) {
}
// push each entry into the time series, while incrementing counters
- _.each(query_results.entries, function(entry) {
+ _.each(query_results.buckets, function(entry) {
var value;
- hits += entry.count; // The series level hits counter
- $scope.hits += entry.count; // Entire dataset level hits counter
- counters[entry.time] = (counters[entry.time] || 0) + entry.count;
+ hits += entry.doc_count; // The series level hits counter
+ $scope.hits += entry.doc_count; // Entire dataset level hits counter
+ counters[entry.key] = (counters[entry.key] || 0) + entry.doc_count;
if($scope.panel.mode === 'count') {
- value = (time_series._data[entry.time] || 0) + entry.count;
+ value = (time_series._data[entry.key] || 0) + entry.doc_count;
+ } else if ($scope.panel.mode === 'uniq') {
+ value = (time_series._data[entry.key] || 0) + entry[q.id].value;
} else if ($scope.panel.mode === 'mean') {
// Compute the ongoing mean by
// multiplying the existing mean by the existing hits
// plus the new mean multiplied by the new hits
// divided by the total hits
- value = (((time_series._data[entry.time] || 0)*(counters[entry.time]-entry.count)) +
- entry.mean*entry.count)/(counters[entry.time]);
+ value = (((time_series._data[entry.key] || 0)*(counters[entry.key]-entry.doc_count)) +
+ entry[q.id].avg*entry.doc_count)/(counters[entry.key]);
} else if ($scope.panel.mode === 'min'){
- if(_.isUndefined(time_series._data[entry.time])) {
- value = entry.min;
+ if(_.isUndefined(time_series._data[entry.key])) {
+ value = entry[q.id].min;
} else {
- value = time_series._data[entry.time] < entry.min ? time_series._data[entry.time] : entry.min;
+ value = time_series._data[entry.key] < entry[q.id].min ? time_series._data[entry.key] : entry[q.id].min;
}
} else if ($scope.panel.mode === 'max'){
- if(_.isUndefined(time_series._data[entry.time])) {
- value = entry.max;
+ if(_.isUndefined(time_series._data[entry.key])) {
+ value = entry[q.id].max;
} else {
- value = time_series._data[entry.time] > entry.max ? time_series._data[entry.time] : entry.max;
+ value = time_series._data[entry.key] > entry[q.id].max ? time_series._data[entry.key] : entry[q.id].max;
}
} else if ($scope.panel.mode === 'total'){
- value = (time_series._data[entry.time] || 0) + entry.total;
+ value = (time_series._data[entry.key] || 0) + entry[q.id].sum;
}
- time_series.addValue(entry.time, value);
+ time_series.addValue(entry.key, value);
});
$scope.legend[i] = {query:q,hits:hits};
@@ -482,10 +490,10 @@ function (angular, app, $, _, kbn, moment, timeSeries, numeral) {
counters: counters
};
- var monitorTitle = $scope.panel.queries.check[i] +' for query: '+ ( queries[i].alias || queries[i].query );
- if ($scope.panel.queries.check[i] === 'threshold') {
+ var monitorTitle = $scope.panel.queries.check[q.id] +' for query: '+ ( q.alias || q.query );
+ if ($scope.panel.queries.check[q.id] === 'threshold') {
monitor.check(data[i].counters, monitorTitle, $scope.panel.queries.threshold[i]);
- } else if ($scope.panel.queries.check[i] === 'anomaly') {
+ } else if ($scope.panel.queries.check[q.id] === 'anomaly') {
monitor.check(data[i].counters, monitorTitle);
};