Guillermo Espinoza 8 tahun lalu
induk
melakukan
3aa2e7c236
1 mengubah file dengan 70 tambahan dan 56 penghapusan
  1. 70 56
      statsd/endpoint/mysql/index.js

+ 70 - 56
statsd/endpoint/mysql/index.js

@@ -90,19 +90,28 @@ 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) {
+            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,51 +134,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';
-    
-  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);
-		});
-
-		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);