index.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. 'use strict';
  2. var express = require('express');
  3. var morgan = require('morgan');
  4. var bodyParser = require('body-parser');
  5. var _ = require('lodash');
  6. var app = express();
  7. var request = require('request');
  8. var timeout = process.env.TIMEOUT;
  9. app.use(morgan('combined'));
  10. app.use(bodyParser.json());
  11. function setCORSHeaders(res) {
  12. res.setHeader("Access-Control-Allow-Origin", "*");
  13. res.setHeader("Access-Control-Allow-Methods", "POST");
  14. res.setHeader("Access-Control-Allow-Headers", "accept, content-type");
  15. }
  16. app.all('/', function(req, res) {
  17. setCORSHeaders(res);
  18. res.send('https://grafana.com/plugins/grafana-simple-json-datasource\n');
  19. res.end();
  20. });
  21. function search(url, body, res)
  22. {
  23. request.post({
  24. url: url,
  25. body: JSON.stringify(body),
  26. timeout: timeout
  27. },
  28. function (error, response, body) {
  29. if (!error && response.statusCode == 200) {
  30. if (search_result.length == 0) {
  31. search_result = JSON.parse(body);
  32. } else {
  33. var values = JSON.parse(body);
  34. for (var i = 0; i < values.length - 1; i++) {
  35. if (search_result.indexOf(values[i]) === -1) {
  36. search_result.push(values[i]);
  37. }
  38. }
  39. search_result.sort();
  40. }
  41. if (res !== undefined) {
  42. setCORSHeaders(res);
  43. res.json(search_result);
  44. res.end();
  45. }
  46. } else {
  47. console.log(error);
  48. }
  49. }
  50. );
  51. }
  52. function query(url, query_result, req, res)
  53. {
  54. request.post({
  55. url: url,
  56. headers: req.headers,
  57. body: JSON.stringify(req.body),
  58. timeout: timeout
  59. },
  60. function (error, response, body) {
  61. if (!error && response.statusCode == 200) {
  62. if (query_result.length == 0) {
  63. query_result = JSON.parse(body);
  64. } else {
  65. query_result = query_result.concat(JSON.parse(body));
  66. }
  67. if (res !== undefined) {
  68. setCORSHeaders(res);
  69. res.json(query_result);
  70. res.end();
  71. }
  72. } else {
  73. console.log(error);
  74. }
  75. }
  76. );
  77. }
  78. var search_result = [];
  79. app.all('/search', function (req, res) {
  80. search_result = [];
  81. search('http://mysql_jsonendpoint:8000/search', req.body);
  82. search('http://mongodb_jsonendpoint:8000/search', req.body, res);
  83. });
  84. app.all('/query', function (req, res) {
  85. var query_result = [];
  86. query('http://mysql_jsonendpoint:8000/query', query_result, req);
  87. query('http://mongodb_jsonendpoint:8000/query', query_result, req, res);
  88. });
  89. app.listen(8000);
  90. console.log("Server is listening to port 8000");