'use strict'; var express = require('express'); var morgan = require('morgan'); var bodyParser = require('body-parser'); var _ = require('lodash'); var app = express(); var request = require('request'); var timeout = process.env.TIMEOUT; app.use(morgan('combined')); app.use(bodyParser.json()); 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"); } app.all('/', function(req, res) { setCORSHeaders(res); res.send('https://grafana.com/plugins/grafana-simple-json-datasource\n'); res.end(); }); function search(url, body, res) { request.post({ url: url, body: JSON.stringify(body), timeout: timeout }, function (error, response, body) { if (!error && response.statusCode == 200) { if (search_result.length == 0) { search_result = JSON.parse(body); } else { var values = JSON.parse(body); for (var i = 0; i < values.length; i++) { if (search_result.indexOf(values[i]) === -1) { search_result.push(values[i]); } } search_result.sort(); } if (res !== undefined) { setCORSHeaders(res); res.json(search_result); res.end(); } } else { console.log(error); } } ); } function query(url, query_result, req, res) { request.post({ url: url, headers: req.headers, body: JSON.stringify(req.body), timeout: timeout }, function (error, response, body) { if (!error && response.statusCode == 200) { if (query_result.length == 0) { query_result = JSON.parse(body); } else { query_result = query_result.concat(JSON.parse(body)); } if (res !== undefined) { setCORSHeaders(res); res.json(query_result); res.end(); } } else { console.log(error); } } ); } var search_result = []; app.all('/search', function (req, res) { search_result = []; search('http://mysql_jsonendpoint:8000/search', req.body); search('http://mongodb_jsonendpoint:8000/search', req.body, res); }); app.all('/query', function (req, res) { var query_result = []; query('http://mysql_jsonendpoint:8000/query', query_result, req); query('http://mongodb_jsonendpoint:8000/query', query_result, req, res); }); app.listen(8000); console.log("Server is listening to port 8000");