No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

server.js 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. var express = require('express')
  2. var app = express()
  3. app.use(express.json())
  4. var argv = require('yargs').argv;
  5. // --local_ip
  6. // --local_port
  7. // --local_name
  8. const si = require('systeminformation');
  9. var LOCAL_ENDPOINT = {IP : argv.local_ip, PORT : argv.local_port, NAME : argv.local_name};
  10. const E_OK = 200;
  11. const E_CREATED = 201;
  12. const E_FORBIDDEN = 403;
  13. const E_NOT_FOUND = 404;
  14. const E_ALREADY_EXIST = 500;
  15. var db = {
  16. devices : new Map(),
  17. data : new Map(),
  18. gateways : new Map()
  19. };
  20. function addNewDevice(dev) {
  21. var result = -1;
  22. if (!db.devices.get(dev.Name)) {
  23. db.devices.set(dev.Name, dev);
  24. if (db.devices.get(dev.Name))
  25. db.data.delete(dev.Name);
  26. db.data.set(dev.Name, []);
  27. result = 0;
  28. }
  29. return result;
  30. }
  31. function addNewGateway(gw) {
  32. var result = -1;
  33. if (!db.gateways.get(gw.Name)) {
  34. db.gateways.set(gw.Name, gw);
  35. result = 0;
  36. }
  37. return result;
  38. }
  39. function removeDevice(dev) {
  40. if (db.devices.get(dev.Name)) {
  41. db.devices.delete(dev.Name);
  42. if (db.devices.get(dev.Name))
  43. db.data.delete(dev.Name);
  44. }
  45. }
  46. function removeGateway(gw) {
  47. if (db.gateways.get(gw.Name))
  48. db.gateways.delete(gw.Name);
  49. }
  50. function addDeviceData(dev, data) {
  51. var result = -1;
  52. var device = db.devices.get(dev);
  53. if (device) {
  54. db.data.get(dev).push(data);
  55. result = 0;
  56. }
  57. return result;
  58. }
  59. app.get('/devices', function(req, res) {
  60. console.log(req.body);
  61. let resObj = [];
  62. db.devices.forEach((v,k) => {
  63. resObj.push(v);
  64. });
  65. res.status(E_OK).send(resObj);
  66. });
  67. app.get('/device/:dev', function(req, res) {
  68. console.log(req.body);
  69. var dev = req.params.dev;
  70. var device = db.devices.get(dev);
  71. if (device)
  72. res.status(E_OK).send(JSON.stringify(device));
  73. else
  74. res.sendStatus(E_NOT_FOUND);
  75. });
  76. app.post('/device/:dev/data', function(req, res) {
  77. console.log(req.body);
  78. var dev = req.params.dev;
  79. var result = addDeviceData(dev, req.body);
  80. if (result === 0)
  81. res.sendStatus(E_CREATED);
  82. else
  83. res.sendStatus(E_NOT_FOUND);
  84. });
  85. app.get('/device/:dev/data', function(req, res) {
  86. console.log(req.body);
  87. var dev = req.params.dev;
  88. var device = db.devices.get(dev);
  89. if (device){
  90. var data = db.data.get(dev);
  91. if (data) {
  92. let resObj = [];
  93. data.forEach((v,k) => {
  94. resObj.push(v);
  95. });
  96. res.status(E_OK).send(JSON.stringify(resObj));
  97. }
  98. else
  99. res.sendStatus(E_NOT_FOUND);
  100. }
  101. else
  102. res.sendStatus(E_NOT_FOUND);
  103. });
  104. app.post('/devices/register', function(req, res) {
  105. console.log(req.body);
  106. var result = addNewDevice(req.body);
  107. if ( result === 0)
  108. res.sendStatus(E_CREATED);
  109. else
  110. res.sendStatus(E_ALREADY_EXIST);
  111. });
  112. app.get('/gateways', function(req, res) {
  113. console.log(req.body);
  114. let resObj = [];
  115. db.gateways.forEach((v,k) => {
  116. resObj.push(v);
  117. });
  118. res.send(resObj);
  119. });
  120. app.get('/gateway/:gw', function(req, res) {
  121. console.log(req.body);
  122. var gw = req.params.gw;
  123. var gateway = db.gateways.get(gw);
  124. if (gateway)
  125. res.status(E_OK).send(JSON.stringify(gateway));
  126. else
  127. res.sendStatus(E_NOT_FOUND);
  128. });
  129. app.post('/gateways/register', function(req, res) {
  130. console.log(req.body);
  131. var result = addNewGateway(req.body);
  132. if ( result === 0)
  133. res.sendStatus(E_CREATED);
  134. else
  135. res.sendStatus(E_ALREADY_EXIST);
  136. });
  137. app.get('/ping', function(req, res) {
  138. console.log(req.body);
  139. res.status(E_OK).send({pong: Date.now()});
  140. });
  141. app.get('/health', function(req, res) {
  142. console.log(req.body);
  143. si.currentLoad((d) => {
  144. console.log(d);
  145. res.status(E_OK).send(JSON.stringify(d));
  146. })
  147. });
  148. app.listen(LOCAL_ENDPOINT.PORT , function () {
  149. console.log(LOCAL_ENDPOINT.NAME + ' listening on : ' + LOCAL_ENDPOINT.PORT );
  150. });