Patch for kibana4, to enable percentile aggregation (dirty and hacky) descdesc
From e7299b01d3367be2a54b89ca4a90db9f3edbab90 Mon Sep 17 00:00:00 2001
From: Tianxiang Chen <txchendev@gmail.com>
Date: Tue, 18 Nov 2014 16:55:43 -0800
Subject: [PATCH] add percentile metric support
---
src/kibana/components/agg_response/flat.js | 10 +++++++-
.../components/agg_response/tabify/tabify.js | 6 +++++
src/kibana/components/agg_types/metric_aggs.js | 27 +++++++++++++++++++++-
3 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/src/kibana/components/agg_response/flat.js b/src/kibana/components/agg_response/flat.js
index 2c454ad..bcc199b 100644
--- a/src/kibana/components/agg_response/flat.js
+++ b/src/kibana/components/agg_response/flat.js
@@ -72,7 +72,15 @@ define(function (require) {
row[i] = val;
});
- var metric = bucket.value == null ? bucket.doc_count : bucket.value;
+ var metric = null;
+ if (bucket.values != null) {
+ for (var firstKey in bucket.values) break;
+ if (bucket.values[firstKey] != null) {
+ metric = bucket.values[firstKey];
+ }
+ } else {
+ metric = bucket.value == null ? bucket.doc_count : bucket.value;
+ }
if (metric != null) {
row[row.length - 1] = metric;
} else {
diff --git a/src/kibana/components/agg_response/tabify/tabify.js b/src/kibana/components/agg_response/tabify/tabify.js
index 04e758f..74f07b9 100644
--- a/src/kibana/components/agg_response/tabify/tabify.js
+++ b/src/kibana/components/agg_response/tabify/tabify.js
@@ -80,6 +80,12 @@ define(function (require) {
// read the metric value from a metric response
function metricValue(aggResp) {
+ if (aggResp.values != null) {
+ for (var firstKey in aggResp.values) break;
+ if (aggResp.values[firstKey] != null) {
+ return aggResp.values[firstKey];
+ }
+ }
return aggResp.value == null ? 0 : aggResp.value;
}
diff --git a/src/kibana/components/agg_types/metric_aggs.js b/src/kibana/components/agg_types/metric_aggs.js
index cbed3c9..0fdef2c 100644
--- a/src/kibana/components/agg_types/metric_aggs.js
+++ b/src/kibana/components/agg_types/metric_aggs.js
@@ -74,9 +74,34 @@ define(function (require) {
name: 'field'
}
]
+ },
+ {
+ name: 'percentiles',
+ title: 'Percentiles',
+ makeLabel: function (aggConfig) {
+ return aggConfig.params.percents + ' percentile of ' + aggConfig.params.field.name;
+ },
+ params: [
+ {
+ name: 'field',
+ filterFieldTypes: 'number'
+ },
+ {
+ name: 'percents',
+ default: 95 ,
+ editor: '<div class="vis-editor-agg-form-row">\n <div class="form-group">\n <label>Percents</label>\n <div class="vis-editor-agg-form-row">\n <input\n name="percentsn"\n ng-model="params.percents"\n required\n class="form-control"\n type="range"\n min="1"\n max="99"\n >\n <div class="form-group vis-editor-agg-form-value">\n {{params.percents}}\n </div>\n </div>\n </div>\n</div>',
+ write: function (aggConfig, output) {
+ var percents = parseInt(aggConfig.params.percents);
+ if (isNaN(percents)) {
+ percents = 80;
+ }
+ output.params.percents = [ percents ];
+ }
+ }
+ ]
}
].map(function (def) {
return new AggType(def);
});
};
-});
\ No newline at end of file
+});
--
2.1.3