123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- var express = require('express');
- var morgan = require('morgan');
- var bodyParser = require('body-parser');
- var _ = require('lodash');
- var app = express();
- var mysql = require('mysql');
- var connection = mysql.createConnection({
- host : 'mysql',
- user : 'root',
- password : '235r2342gtfsw',
- database : 'statsd_db'
- });
- app.use(morgan('combined'))
- app.use(bodyParser.json());
- var timeserie = [
- {'target': 's1', 'datapoints': [ [0,0], [1,0], [2,0], [3,0], [4,0] , [5,0], [6,0] , [7,0], [8,0], [9,0], [10,0], [11,0], [12,0], [13,0], [14,0], [15,0]]},
- {'target': 's2', 'datapoints': [ [15,0], [14,0], [13,0], [12,0], [11,0] , [10,0], [9,0] , [8,0], [7,0], [6,0], [5,0], [4,0], [3,0], [2,0], [1,0], [0,0]]},
- {'target': 's3', 'datapoints': [ [0,0], [1,0], [2,0], [3,0], [4,0] , [5,0], [6,0] , [7,0], [8,0], [9,0], [10,0], [11,0], [12,0], [13,0], [14,0], [15,0]]},
- {'target': 's4', 'datapoints': [ [15,0], [14,0], [13,0], [12,0], [11,0] , [10,0], [9,0] , [8,0], [7,0], [6,0], [5,0], [4,0], [3,0], [2,0], [1,0], [0,0]]},
- {'target': 's5', 'datapoints': [ [0,0], [1,0], [2,0], [3,0], [4,0] , [5,0], [6,0] , [7,0], [8,0], [9,0], [10,0], [11,0], [12,0], [13,0], [14,0], [15,0]]},
- {'target': 's6', 'datapoints': [ [15,0], [14,0], [13,0], [12,0], [11,0] , [10,0], [9,0] , [8,0], [7,0], [6,0], [5,0], [4,0], [3,0], [2,0], [1,0], [0,0]]}
- ]; //require('./series');
- var now = Date.now();
- for (var i = timeserie.length -1; i >= 0; i--) {
- var series = timeserie[i];
- var decreaser = 0;
- for (var y = series.datapoints.length -1; y >= 0; y--) {
- series.datapoints[y][1] = Math.round((now - decreaser) /1000) * 1000;
- decreaser += 50000;
- }
- }
- var annotation = {
- name : "annotation name",
- enabled: true,
- datasource: "generic datasource",
- showLine: true,
- }
- var annotations = [
- { annotation: annotation, "title": "Donlad trump is kinda funny", "time": 1450754160000, text: "teeext", tags: "taaags" },
- { annotation: annotation, "title": "Wow he really won", "time": 1450754160000, text: "teeext", tags: "taaags" },
- { annotation: annotation, "title": "When is the next ", "time": 1450754160000, text: "teeext", tags: "taaags" }
- ];
- var now = Date.now();
- var decreaser = 0;
- for (var i = 0;i < annotations.length; i++) {
- var anon = annotations[i];
- anon.time = (now - decreaser);
- decreaser += 1000000
- }
- var table =
- {
- columns: [{text: 'Time', type: 'time'}, {text: 'Country', type: 'string'}, {text: 'Number', type: 'number'}],
- values: [
- [ 1234567, 'SE', 123 ],
- [ 1234567, 'DE', 231 ],
- [ 1234567, 'US', 321 ],
- ]
- };
-
- function setCORSHeaders(res) {
- res.setHeader("Access-Control-Allow-Origin", "*");
- res.setHeader("Access-Control-Allow-Methods", "POST");
- res.setHeader("Access-Control-Allow-Headers", "accept, content-type");
- }
- var now = Date.now();
- var decreaser = 0;
- for (var i = 0;i < table.values.length; i++) {
- var anon = table.values[i];
- anon[0] = (now - decreaser);
- decreaser += 1000000
- }
- app.all('/', function(req, res) {
- setCORSHeaders(res);
- res.send('https://grafana.com/plugins/grafana-simple-json-datasource\n');
- 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();
- });
- /**
- * Este metodo no esta implementado.
- */
- //app.all('/annotations', function(req, res) {
- // setCORSHeaders(res);
- // console.log(req.url);
- // console.log(req.body);
- //
- // res.json(annotations);
- // res.end();
- //})
- /**
- * @todo : intervalMs: 500,
- * targets: [ {
- * type: 'timeserie'
- * }]
- * maxDataPoints: 1920,
- *
- */
- 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);
- console.log("Server is listening to port 8000");
|