index.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. const express = require('express');
  2. const bodyparser = require('body-parser');
  3. const async = require('async');
  4. const ejs = require('ejs');
  5. const serve = require('./serve');
  6. const im = require("./intervalMenager");
  7. var app = express();
  8. var engine = require("./engine");
  9. app.set('view engine', 'ejs');
  10. app.set('views', __dirname + '/web');
  11. // app.engine('ejs', require('ejs').renderFile);
  12. var updateInterval = new im();
  13. var locals = {
  14. title: "Simple Stats"
  15. };
  16. var localf = function (req, res, next) {
  17. res.locals = Object.assign(res.locals, locals);
  18. next();
  19. };
  20. app.use(localf);
  21. app.use(bodyparser.urlencoded({
  22. extended: true
  23. }));
  24. app.use(bodyparser.json());
  25. // Space for site requests
  26. app.use(serve("web", "ejs"));
  27. app.use("/api", function (req, res, next) {
  28. res.type("json");
  29. next();
  30. });
  31. app.get("/api/types", function (req, res) {
  32. res.send(JSON.stringify(engine.st.getServerTypes()));
  33. });
  34. app.get("/api/servers/list", function (req,res) {
  35. engine.serverMenager.list(function (data) {
  36. res.send(JSON.stringify(data));
  37. });
  38. });
  39. app.get("/api/servers/get/:id", function (req,res) {
  40. engine.serverMenager.getByID(Number(req.params.id), function (err, data) {
  41. if(err){
  42. res.send(JSON.stringify({
  43. success:false,
  44. msg: err
  45. }));
  46. return;
  47. }
  48. var server = data;
  49. engine.statusGrabber.getDetails(server.type, server.address, function(data) {
  50. if(data){
  51. data._id = Number(req.params.id);
  52. res.send(JSON.stringify(data));
  53. }else{
  54. res.send(JSON.stringify({
  55. success:false,
  56. msg: "Intertnal Error"
  57. }));
  58. }
  59. });
  60. });
  61. });
  62. app.post("/api/servers/add", function (req,res) {
  63. var type = req.body.type;
  64. var name = req.body.name;
  65. var address = req.body.address;
  66. engine.serverMenager.add(type, address, name);
  67. res.send(JSON.stringify({
  68. success: true
  69. }));
  70. });
  71. app.get("/api/servers/remove/:id", function (req, res) {
  72. var id = req.params.id;
  73. engine.serverMenager.remove(id);
  74. res.send(JSON.stringify({
  75. success: true
  76. }));
  77. });
  78. app.get("/api/trafic/update", function (req, res) {
  79. engine.serverMenager.list(function (data) {
  80. async.map(data, function (data, callback) {
  81. var server = data;
  82. engine.statusGrabber.getStatus(server.type, server.address, function(data) {
  83. var h = engine.statusGrabber.getResponseHandler(server.type);
  84. h(data, server.get("id"));
  85. callback(null, data);
  86. });
  87. }, function (err, map) {
  88. res.send(JSON.stringify(map));
  89. });
  90. });
  91. });
  92. app.get("/api/trafic/update/:id", function (req, res) {
  93. engine.serverMenager.getByID(Number(req.params.id), function (err, data) {
  94. if(err){
  95. res.send(JSON.stringify({
  96. success:false,
  97. msg: err
  98. }));
  99. return;
  100. }
  101. var server = data;
  102. engine.statusGrabber.getStatus(server.type, server.address, function(data) {
  103. var h = engine.statusGrabber.getResponseHandler(server.type);
  104. h(data, server.get("id"));
  105. res.send(JSON.stringify(data));
  106. });
  107. });
  108. });
  109. app.get("/api/trafic/last", function (req, res) {
  110. res.send(JSON.stringify({
  111. success: true,
  112. last: updateInterval.getLast()
  113. }));
  114. });
  115. app.get("/api/trafic/start", function (req, res) {
  116. try {
  117. updateInterval.start();
  118. res.send(JSON.stringify({
  119. success: true
  120. }));
  121. } catch (e) {
  122. res.send(JSON.stringify({
  123. success: false
  124. }));
  125. }
  126. });
  127. app.get("/api/trafic/stop", function (req, res) {
  128. try {
  129. updateInterval.stop();
  130. res.send(JSON.stringify({
  131. success: true
  132. }));
  133. } catch (e) {
  134. res.send(JSON.stringify({
  135. success: false
  136. }));
  137. }
  138. });
  139. app.get("/api/trafic/get/all", function (req, res) {
  140. engine.statusGrabber.getTraffic(function (data) {
  141. res.send(JSON.stringify(data));
  142. });
  143. });
  144. app.get("/api/trafic/get/:id", function (req, res) {
  145. engine.statusGrabber.getTrafficById(req.params.id ,function (data) {
  146. res.send(JSON.stringify(data));
  147. });
  148. });
  149. app.get("/api/status", function (req, res) {
  150. engine.serverMenager.list(function (data) {
  151. async.map(data, function (data, callback) {
  152. var server = data;
  153. engine.statusGrabber.getStatus(server.type, server.address, function(data) {
  154. callback(null, data);
  155. });
  156. }, function (err, map) {
  157. res.send(JSON.stringify(map));
  158. });
  159. });
  160. });
  161. app.get("/api/status/:id", function (req, res) {
  162. engine.serverMenager.getByID(Number(req.params.id), function (err, data) {
  163. if(err){
  164. res.send(JSON.stringify({
  165. success:false,
  166. msg: err
  167. }));
  168. return;
  169. }
  170. var server = data;
  171. engine.statusGrabber.getStatus(server.type, server.address, function(data) {
  172. if(data){
  173. data._id = Number(req.params.id);
  174. res.send(JSON.stringify(data));
  175. }else{
  176. res.send("Intertnal Error");
  177. }
  178. });
  179. });
  180. });
  181. var cache = "";
  182. app.get("/api/details/cached", function (req, res) {
  183. res.send(cache);
  184. });
  185. app.get("/api/details", function (req, res) {
  186. engine.serverMenager.list(function (data) {
  187. async.map(data, function (data, callback) {
  188. var server = data;
  189. engine.statusGrabber.getStatus(server.type, server.address, function(data) {
  190. var h = engine.statusGrabber.getResponseHandler(server.type);
  191. data = h(data, server.get("id"), true);
  192. // data.name = server.name;
  193. var temp = {
  194. id: server.id,
  195. address: server.address,
  196. type: server.type,
  197. fullType: engine.st.getFullServerType(server.type),
  198. name: server.name,
  199. maxPlayers: data.traffic.maxplayers,
  200. players: data.traffic.players
  201. };
  202. callback(null, temp);
  203. });
  204. }, function (err, map) {
  205. var obj = JSON.stringify(map);
  206. cache = obj;
  207. res.send(obj);
  208. });
  209. });
  210. });
  211. app.use(function(req, res, next){
  212. res.render('index');
  213. });
  214. var onInit = function () {
  215. updateInterval
  216. .setInterval(engine.configMenager.config.updateInterval)
  217. .setFunction(function () {
  218. var date = new Date();
  219. engine.serverMenager.list(function (data) {
  220. async.map(data, function (data, callback) {
  221. var server = data;
  222. engine.statusGrabber.getStatus(server.type, server.address, function(data) {
  223. var h = engine.statusGrabber.getResponseHandler(server.type);
  224. data.date = date;
  225. h(data, server.get("id"));
  226. callback(null, data);
  227. });
  228. }, function (err, map) {
  229. });
  230. });
  231. })
  232. .start();
  233. };
  234. var onExit = function () {
  235. updateInterval.stop();
  236. };
  237. app.listen(engine.configMenager.config.port, function () {
  238. onInit();
  239. });