mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Initial prototype returning time series from (partially hardcoded) Elasticsearch data source.
This commit is contained in:
parent
3dfa28570f
commit
a1dcd5f069
@ -4,9 +4,10 @@ define([
|
||||
'config',
|
||||
'kbn',
|
||||
'moment',
|
||||
'./queryBuilder',
|
||||
'./directives'
|
||||
],
|
||||
function (angular, _, config, kbn, moment) {
|
||||
function (angular, _, config, kbn, moment, ElasticQueryBuilder) {
|
||||
'use strict';
|
||||
|
||||
var module = angular.module('grafana.services');
|
||||
@ -292,8 +293,46 @@ function (angular, _, config, kbn, moment) {
|
||||
});
|
||||
};
|
||||
|
||||
return ElasticDatasource;
|
||||
ElasticDatasource.prototype.query = function(options) {
|
||||
var self = this;
|
||||
var allQueries = _.map(options.targets, function(target) {
|
||||
if (target.hide) { return []; }
|
||||
|
||||
var queryBuilder = new ElasticQueryBuilder(target);
|
||||
var query = queryBuilder.build();
|
||||
query = query.replace(/\$interval/g, target.interval || options.interval);
|
||||
query = query.replace(/\$rangeFrom/g, options.range.from);
|
||||
query = query.replace(/\$rangeTo/g, options.range.to);
|
||||
query = query.replace(/\$maxDataPoints/g, options.maxDataPoints);
|
||||
return query;
|
||||
|
||||
}).join("\n");
|
||||
|
||||
// replace templated variables
|
||||
// allQueries = templateSrv.replace(allQueries, options.scopedVars);
|
||||
return this._post('/_search?search_type=count', allQueries).then(function(results) {
|
||||
if (!results || !results.facets) {
|
||||
return { data: [] };
|
||||
}
|
||||
return { data: self._getTimeSeries(results.facets) };
|
||||
});
|
||||
};
|
||||
|
||||
ElasticDatasource.prototype._getTimeSeries = function(facets) {
|
||||
var self = this;
|
||||
var targets = ['metric'];
|
||||
var data = targets.map(function(target) {
|
||||
var datapoints = facets[target].entries.map(self._getDatapoint);
|
||||
return { target: target, datapoints: datapoints };
|
||||
});
|
||||
return data;
|
||||
};
|
||||
|
||||
ElasticDatasource.prototype._getDatapoint = function(entry) {
|
||||
return [entry.mean, entry.time];
|
||||
};
|
||||
|
||||
return ElasticDatasource;
|
||||
});
|
||||
|
||||
});
|
||||
|
54
public/app/plugins/datasource/elasticsearch/queryBuilder.js
Normal file
54
public/app/plugins/datasource/elasticsearch/queryBuilder.js
Normal file
@ -0,0 +1,54 @@
|
||||
define([
|
||||
],
|
||||
function () {
|
||||
'use strict';
|
||||
|
||||
function ElasticQueryBuilder(target) {
|
||||
this.target = target;
|
||||
}
|
||||
|
||||
ElasticQueryBuilder.prototype.build = function() {
|
||||
var target = this.target;
|
||||
var query = {
|
||||
"facets": {
|
||||
"metric": {
|
||||
"date_histogram": {
|
||||
"interval": "$interval",
|
||||
"key_field": "@timestamp",
|
||||
"min_doc_count": 0,
|
||||
"value_field": "metric"
|
||||
}
|
||||
}
|
||||
},
|
||||
"fields": [],
|
||||
"query": {
|
||||
"filtered": {
|
||||
"filter": {
|
||||
"and": [
|
||||
{
|
||||
"range": {
|
||||
"@timestamp": {
|
||||
"gte": "$rangeFrom",
|
||||
"lte": "$rangeTo"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"term": {
|
||||
"service": "cpu",
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"size": "$maxDataPoints",
|
||||
"sort": "@timestamp"
|
||||
};
|
||||
query = JSON.stringify(query);
|
||||
target.query = query;
|
||||
return query;
|
||||
};
|
||||
|
||||
return ElasticQueryBuilder;
|
||||
});
|
Loading…
Reference in New Issue
Block a user