Browse Source

index.js editado a través de la web en Bitbucket
Se agrega /last para obtener los últimos x valores de una x métrica.

Maximiliano Schvindt 7 years ago
parent
commit
57c3616b9e
1 changed files with 53 additions and 0 deletions
  1. 53 0
      statsd/endpoint/mysql/index.js

+ 53 - 0
statsd/endpoint/mysql/index.js

@@ -124,6 +124,59 @@ app.all('/query', function (req, res) {
     query('sets_statistics', req, mysql_query_result, res);
 });
 
+function last(table, req, mysql_query_result, res)
+{
+    var names = _.map(req.body.targets, function (t) {
+        return t.target;
+    });
+    
+    var mode = "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); ";
+    var sql = mode + 'SELECT `timestamp`, `name`, `value` FROM `' + table + '` WHERE (`name` IN ("' + names.join('", "') + '"))';
+    var group_by = '';
+    var order_by = ' ORDER BY `timestamp` DESC';
+    var maxDataPoints = req.body.maxDataPoints;
+    var limit = ' LIMIT ' + maxDataPoints + ';';
+    sql += group_by + order_by + limit;  
+
+    connection.query(sql, function (err, rows, fields) {
+        if (err) {
+            console.log(err);
+            throw err;
+        }
+        
+        var result = [];
+        var results = rows[1];
+        for (var i = 0; i < results.length; i++) {
+            var name = results[i].name;
+            if (name !== undefined) {
+                if (result[name] === undefined) {
+                    result[name] = [];
+                }
+                result[name].push([results[i].value, 1000 * results[i].timestamp]);
+            }
+        }
+        var keys = _.keys(result);
+        for (var i = 0; i < keys.length; i++) {
+            var data = {
+                target: keys[i],
+                datapoints: result[keys[i]]
+            };
+            mysql_query_result.push(data);
+        }
+        if (res !== undefined) {
+            setCORSHeaders(res);
+            res.json(mysql_query_result);
+            res.end();
+        }
+    });
+}
+
+app.all('/last', function (req, res) {
+    var mysql_query_result = [];
+    
+    last('gauges_statistics', req, mysql_query_result, res);
+});
+
 app.listen(8000);
 
 console.log("Server is listening to port 8000");