index.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. 'use strict';
  2. var express = require('express');
  3. var morgan = require('morgan');
  4. var bodyParser = require('body-parser');
  5. var app = express();
  6. var curlify = require('request-as-curl');
  7. var rp = require('request-promise-native');
  8. var timeout = process.env.TIMEOUT;
  9. // var hosts = ['http://jsonep_mysql:8000', 'http://jsonep_mongo:8000'];
  10. var hosts = ['http://jsonep_mongo:8000'];
  11. app.use(morgan('combined'));
  12. app.use(bodyParser.json());
  13. function setCORSHeaders(res) {
  14. res.setHeader("Access-Control-Allow-Origin", "*");
  15. res.setHeader("Access-Control-Allow-Methods", "POST");
  16. res.setHeader("Access-Control-Allow-Headers", "accept, content-type");
  17. }
  18. app.all('/', function(req, res) {
  19. setCORSHeaders(res);
  20. console.log(curlify(req, req.body));
  21. res.send('https://grafana.com/plugins/grafana-simple-json-datasource\n');
  22. res.end();
  23. });
  24. var search_result = [];
  25. app.all('/search', function(req, res) {
  26. console.log(curlify(req, req.body));
  27. search_result = [];
  28. var results = hosts.map(
  29. function(host, index) {
  30. var options = {
  31. method: 'POST',
  32. uri: host + '/search',
  33. body: req.body,
  34. timeout: timeout,
  35. json: true
  36. };
  37. return rp(options)
  38. .then(function(parsedBody) {
  39. if (search_result.length == 0) {
  40. search_result = parsedBody;
  41. } else {
  42. var values = parsedBody;
  43. for (var i = 0; i < values.length; i++) {
  44. if (search_result.indexOf(values[i]) === -1) {
  45. search_result.push(values[i]);
  46. }
  47. }
  48. search_result.sort();
  49. }
  50. return search_result;
  51. })
  52. .catch(function(err) {
  53. return err;
  54. });
  55. }
  56. );
  57. Promise.all(results).then(function(value) {
  58. setCORSHeaders(res);
  59. res.json(search_result);
  60. res.end();
  61. }, reason => {
  62. console.log(reason)
  63. res.status(500).send(reason);
  64. });
  65. });
  66. app.all('/query', function(req, res) {
  67. console.log(curlify(req, req.body));
  68. var query_result = [];
  69. var results = hosts.map(function(host) {
  70. var options = {
  71. method: 'POST',
  72. uri: host + '/query',
  73. body: req.body,
  74. timeout: timeout,
  75. json: true
  76. };
  77. return rp(options).then(function(parsedBody) {
  78. var c;
  79. if (parsedBody.length) {
  80. for (var x = 0; x < parsedBody.length; x++) {
  81. c = false;
  82. for (var y = 0; y < query_result.length; y++) {
  83. if (query_result[y].target == parsedBody[x].target && parsedBody[x].datapoints.length) {
  84. query_result[y].datapoints.push(parsedBody[x].datapoints);
  85. c = true;
  86. }
  87. }
  88. if (c == false && parsedBody[x].datapoints.length) {
  89. query_result.push(parsedBody[x]);
  90. }
  91. }
  92. }
  93. return query_result;
  94. }).catch(function(err) {
  95. return err;
  96. });
  97. });
  98. Promise.all(results).then(function(results) {
  99. setCORSHeaders(res);
  100. res.json(query_result);
  101. res.end();
  102. }, reason => {
  103. console.log(reason);
  104. res.status(500).send(reason);
  105. });
  106. });
  107. app.listen(8000);
  108. console.log("Server is listening to port 8000");