|
@@ -90,19 +90,30 @@ app.all('/', function(req, res) {
|
|
|
res.end();
|
|
|
});
|
|
|
|
|
|
-app.all('/search', function(req, res){
|
|
|
- setCORSHeaders(res);
|
|
|
- var result = [];
|
|
|
-
|
|
|
- connection.query('SELECT `name` FROM `gauges_statistics` GROUP BY `name` ORDER BY `name`', function(err, rows, fields) {
|
|
|
- if (err) throw err;
|
|
|
- _.each(rows, function(ts) {
|
|
|
- result.push(ts.name);
|
|
|
- });
|
|
|
- res.json(result);
|
|
|
- res.end();
|
|
|
- });
|
|
|
+var result = [];
|
|
|
+function search(table)
|
|
|
+{
|
|
|
+ connection.query('SELECT `name` FROM `' + table + '` GROUP BY `name` ORDER BY `name`', function (err, rows, fields) {
|
|
|
+ if (err)
|
|
|
+ throw err;
|
|
|
+ _.each(rows, function (ts) {
|
|
|
+ if (result.indexOf(ts.name) === -1) { // Se agregan solo los name que no esten en result
|
|
|
+ result.push(ts.name);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
|
|
|
+}
|
|
|
+app.all('/search', function (req, res) {
|
|
|
+ setCORSHeaders(res);
|
|
|
+
|
|
|
+ search('gauges_statistics');
|
|
|
+ search('counters_statistics');
|
|
|
+ search('timers_statistics');
|
|
|
+ search('sets_statistics');
|
|
|
+
|
|
|
+ res.json(result);
|
|
|
+ res.end();
|
|
|
});
|
|
|
|
|
|
/**
|
|
@@ -125,43 +136,56 @@ app.all('/search', function(req, res){
|
|
|
* maxDataPoints: 1920,
|
|
|
*
|
|
|
*/
|
|
|
-app.all('/query', function(req, res){
|
|
|
- setCORSHeaders(res);
|
|
|
- console.log(req.url);
|
|
|
- console.log(req.body);
|
|
|
-
|
|
|
- var tsResult = [];
|
|
|
-
|
|
|
- var from = new Date(req.body.range.from);
|
|
|
- var to = new Date(req.body.range.to);
|
|
|
- var from_str = Math.floor(from.getTime()/1000);
|
|
|
- var to_str = Math.floor(to.getTime()/1000);
|
|
|
- var names = _.map(req.body.targets, function(t){
|
|
|
- return t.target
|
|
|
- console.log(t);
|
|
|
- });
|
|
|
- var sql = 'SELECT * FROM `gauges_statistics` WHERE (timestamp BETWEEN ' + from_str +' AND ' + to_str + ') AND (`name` IN ("' + names.join('", "') + '")) ORDER BY timestamp ASC';
|
|
|
- console.log(sql);
|
|
|
- connection.query(sql, function(err, rows, fields) {
|
|
|
- var result = {};
|
|
|
- _.each(rows, function (d){
|
|
|
- if(!(d.name in result)){
|
|
|
- result[d.name] = new Array();
|
|
|
- }
|
|
|
- (result[d.name]).push([d.value, 1000 * d.timestamp]);
|
|
|
- });
|
|
|
-
|
|
|
- _.each(_.keys(result), function (d){
|
|
|
- var data = {target: d};
|
|
|
- data['datapoints'] = result[d];
|
|
|
- tsResult.push(data);
|
|
|
- });
|
|
|
-
|
|
|
- res.json(tsResult);
|
|
|
- res.end();
|
|
|
-
|
|
|
- });
|
|
|
+var tsResult = [];
|
|
|
+function query(table, req)
|
|
|
+{
|
|
|
+ var from = new Date(req.body.range.from);
|
|
|
+ var to = new Date(req.body.range.to);
|
|
|
+ var from_str = Math.floor(from.getTime() / 1000);
|
|
|
+ var to_str = Math.floor(to.getTime() / 1000);
|
|
|
+ var names = _.map(req.body.targets, function (t) {
|
|
|
+ return t.target
|
|
|
+ console.log(t);
|
|
|
+ });
|
|
|
+ var sql = 'SELECT timestamp, name, AVG(value) as value FROM `' + table + '` WHERE (timestamp BETWEEN ' + from_str + ' AND ' + to_str + ') AND (`name` IN ("' + names.join('", "') + '")) ORDER BY timestamp ASC';
|
|
|
+
|
|
|
+ var interval = req.body.intervalMs / 1000;
|
|
|
+ var group_by = ' GROUP BY UNIX_TIMESTAMP(timestamp) DIV ' + interval;
|
|
|
+
|
|
|
+ var maxDataPoints = req.body.maxDataPoints;
|
|
|
+ var limit = ' LIMIT ' + maxDataPoints;
|
|
|
+
|
|
|
+ sql += group_by + limit;
|
|
|
+ console.log(sql);
|
|
|
+ connection.query(sql, function (err, rows, fields) {
|
|
|
+ var result = {};
|
|
|
+ _.each(rows, function (d) {
|
|
|
+ if (!(d.name in result)) {
|
|
|
+ result[d.name] = new Array();
|
|
|
+ }
|
|
|
+ (result[d.name]).push([d.value, 1000 * d.timestamp]);
|
|
|
+ });
|
|
|
+
|
|
|
+ _.each(_.keys(result), function (d) {
|
|
|
+ var data = {target: d};
|
|
|
+ data['datapoints'] = result[d];
|
|
|
+ tsResult.push(data);
|
|
|
+ });
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+app.all('/query', function (req, res) {
|
|
|
+ setCORSHeaders(res);
|
|
|
+ console.log(req.url);
|
|
|
+ console.log(req.body);
|
|
|
+
|
|
|
+ query('gauges_statistics', req);
|
|
|
+ query('counters_statistics', req);
|
|
|
+ query('timers_statistics', req);
|
|
|
+ query('sets_statistics', req);
|
|
|
|
|
|
+ res.json(tsResult);
|
|
|
+ res.end();
|
|
|
});
|
|
|
|
|
|
app.listen(8000);
|