2015-07-01 08:54:06 -04:00
|
|
|
define([
|
|
|
|
|
],
|
|
|
|
|
function () {
|
|
|
|
|
'use strict';
|
|
|
|
|
|
2015-09-02 17:45:41 +02:00
|
|
|
function ElasticQueryBuilder() { }
|
2015-07-01 08:54:06 -04:00
|
|
|
|
2015-09-03 08:18:00 +02:00
|
|
|
ElasticQueryBuilder.prototype.build = function(target, timeFrom, timeTo) {
|
|
|
|
|
if (target.rawQuery) {
|
|
|
|
|
return angular.fromJson(target.rawJson);
|
|
|
|
|
}
|
2015-09-02 17:45:41 +02:00
|
|
|
|
2015-09-03 08:18:00 +02:00
|
|
|
var query = {
|
|
|
|
|
"size": 0,
|
|
|
|
|
"query": {
|
|
|
|
|
"filtered": {
|
|
|
|
|
"query": {
|
|
|
|
|
"query_string": {
|
|
|
|
|
"analyze_wildcard": true,
|
|
|
|
|
"query": target.query || '*' ,
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"filter": {
|
|
|
|
|
"bool": {
|
|
|
|
|
"must": [
|
|
|
|
|
{
|
|
|
|
|
"range": {
|
|
|
|
|
"@timestamp": {
|
|
|
|
|
"gte": timeFrom,
|
|
|
|
|
"lte": timeTo
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-08-28 13:06:57 -04:00
|
|
|
}
|
2015-09-03 08:18:00 +02:00
|
|
|
],
|
|
|
|
|
"must_not": [
|
|
|
|
|
|
|
|
|
|
]
|
2015-08-28 13:06:57 -04:00
|
|
|
}
|
2015-07-01 08:54:06 -04:00
|
|
|
}
|
2015-08-31 08:25:05 -04:00
|
|
|
}
|
2015-09-03 08:18:00 +02:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
query.aggs = {
|
2015-09-03 11:14:25 +02:00
|
|
|
"histogram": {
|
2015-09-03 08:18:00 +02:00
|
|
|
"date_histogram": {
|
|
|
|
|
"interval": target.interval || "$interval",
|
|
|
|
|
"field": target.timeField,
|
|
|
|
|
"min_doc_count": 0,
|
|
|
|
|
"extended_bounds": {
|
|
|
|
|
"min": timeFrom,
|
|
|
|
|
"max": timeTo
|
2015-09-02 17:45:41 +02:00
|
|
|
}
|
2015-09-03 08:18:00 +02:00
|
|
|
}
|
2015-09-03 12:35:21 +02:00
|
|
|
},
|
2015-09-03 08:18:00 +02:00
|
|
|
};
|
2015-09-02 17:45:41 +02:00
|
|
|
|
2015-09-03 12:35:21 +02:00
|
|
|
var nestedAggs = query.aggs.histogram;
|
2015-09-03 14:55:48 +02:00
|
|
|
target.groupByFields = target.groupByFields || [];
|
2015-09-03 11:14:25 +02:00
|
|
|
|
2015-09-03 12:35:21 +02:00
|
|
|
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;
|
2015-09-03 11:14:25 +02:00
|
|
|
}
|
|
|
|
|
|
2015-09-03 14:55:48 +02:00
|
|
|
for (var i = 0; i < target.select.length; i++) {
|
|
|
|
|
var select = target.select[i];
|
|
|
|
|
if (select.field) {
|
|
|
|
|
nestedAggs.aggs = {};
|
|
|
|
|
nestedAggs.aggs[select.field] = {};
|
|
|
|
|
nestedAggs.aggs[select.field][select.agg] = {field: select.field};
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-09-03 11:14:25 +02:00
|
|
|
|
2015-09-03 14:55:48 +02:00
|
|
|
console.log(angular.toJson(query, true));
|
2015-07-01 08:54:06 -04:00
|
|
|
return query;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return ElasticQueryBuilder;
|
2015-09-03 14:02:31 +02:00
|
|
|
|
2015-07-01 08:54:06 -04:00
|
|
|
});
|