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',
|
'config',
|
||||||
'kbn',
|
'kbn',
|
||||||
'moment',
|
'moment',
|
||||||
|
'./queryBuilder',
|
||||||
'./directives'
|
'./directives'
|
||||||
],
|
],
|
||||||
function (angular, _, config, kbn, moment) {
|
function (angular, _, config, kbn, moment, ElasticQueryBuilder) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var module = angular.module('grafana.services');
|
var module = angular.module('grafana.services');
|
||||||
@ -292,8 +293,46 @@ function (angular, _, config, kbn, moment) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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;
|
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