index.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  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/config", function (req, res) {
  35. res.send(JSON.stringify(engine.configMenager.config));
  36. });
  37. app.post("/api/config", function (req, res) {
  38. for (var key in req.body) {
  39. if (!req.body.hasOwnProperty(key)) {
  40. continue;
  41. }
  42. if(engine.configMenager.config.hasOwnProperty(key)){
  43. if (typeof(ngine.configMenager.config[key]) === "number") {
  44. engine.configMenager.config[key] = parseInt(req.body[key]);
  45. }else{
  46. engine.configMenager.config[key] = req.body[key];
  47. }
  48. }
  49. engine.configMenager.save();
  50. }
  51. res.send(JSON.stringify({
  52. success: "true"
  53. }));
  54. });
  55. app.get("/api/servers/list", function (req,res) {
  56. engine.serverMenager.list(function (data) {
  57. res.send(JSON.stringify(data));
  58. });
  59. });
  60. app.get("/api/servers/get/:id", function (req,res) {
  61. engine.serverMenager.getByID(Number(req.params.id), function (err, data) {
  62. if(err){
  63. res.send(JSON.stringify({
  64. success:false,
  65. msg: err
  66. }));
  67. return;
  68. }
  69. var server = data;
  70. engine.statusGrabber.getDetails(server.type, server.address, function(data) {
  71. if(data){
  72. data._id = Number(req.params.id);
  73. res.send(JSON.stringify(data));
  74. }else{
  75. res.send(JSON.stringify({
  76. success:false,
  77. msg: "Intertnal Error"
  78. }));
  79. }
  80. });
  81. });
  82. });
  83. app.post("/api/servers/add", function (req,res) {
  84. var type = req.body.type;
  85. var name = req.body.name;
  86. var address = req.body.address;
  87. engine.serverMenager.add(type, address, name);
  88. res.send(JSON.stringify({
  89. success: true
  90. }));
  91. });
  92. app.get("/api/servers/remove/:id", function (req, res) {
  93. var id = req.params.id;
  94. engine.serverMenager.remove(id);
  95. res.send(JSON.stringify({
  96. success: true
  97. }));
  98. });
  99. app.get("/api/trafic/update", function (req, res) {
  100. engine.serverMenager.list(function (data) {
  101. async.map(data, function (data, callback) {
  102. var server = data;
  103. engine.statusGrabber.getStatus(server.type, server.address, function(data) {
  104. var h = engine.statusGrabber.getResponseHandler(server.type);
  105. h(data, server.get("id"));
  106. callback(null, data);
  107. });
  108. }, function (err, map) {
  109. res.send(JSON.stringify(map));
  110. });
  111. });
  112. });
  113. app.get("/api/trafic/update/:id", function (req, res) {
  114. engine.serverMenager.getByID(Number(req.params.id), function (err, data) {
  115. if(err){
  116. res.send(JSON.stringify({
  117. success:false,
  118. msg: err
  119. }));
  120. return;
  121. }
  122. var server = data;
  123. engine.statusGrabber.getStatus(server.type, server.address, function(data) {
  124. var h = engine.statusGrabber.getResponseHandler(server.type);
  125. h(data, server.get("id"));
  126. res.send(JSON.stringify(data));
  127. });
  128. });
  129. });
  130. app.get("/api/trafic/last", function (req, res) {
  131. res.send(JSON.stringify({
  132. success: true,
  133. last: updateInterval.getLast()
  134. }));
  135. });
  136. app.get("/api/trafic/start", function (req, res) {
  137. try {
  138. updateInterval.start();
  139. res.send(JSON.stringify({
  140. success: true
  141. }));
  142. } catch (e) {
  143. res.send(JSON.stringify({
  144. success: false
  145. }));
  146. }
  147. });
  148. app.get("/api/trafic/stop", function (req, res) {
  149. try {
  150. updateInterval.stop();
  151. res.send(JSON.stringify({
  152. success: true
  153. }));
  154. } catch (e) {
  155. res.send(JSON.stringify({
  156. success: false
  157. }));
  158. }
  159. });
  160. app.get("/api/trafic/get/all", function (req, res) {
  161. engine.statusGrabber.getTraffic(function (data) {
  162. res.send(JSON.stringify(data));
  163. });
  164. });
  165. app.get("/api/trafic/get/:id", function (req, res) {
  166. engine.statusGrabber.getTrafficById(req.params.id ,function (data) {
  167. res.send(JSON.stringify(data));
  168. });
  169. });
  170. app.get("/api/status", function (req, res) {
  171. engine.serverMenager.list(function (data) {
  172. async.map(data, function (data, callback) {
  173. var server = data;
  174. engine.statusGrabber.getStatus(server.type, server.address, function(data) {
  175. callback(null, data);
  176. });
  177. }, function (err, map) {
  178. res.send(JSON.stringify(map));
  179. });
  180. });
  181. });
  182. app.get("/api/status/:id", function (req, res) {
  183. engine.serverMenager.getByID(Number(req.params.id), function (err, data) {
  184. if(err){
  185. res.send(JSON.stringify({
  186. success:false,
  187. msg: err
  188. }));
  189. return;
  190. }
  191. var server = data;
  192. engine.statusGrabber.getStatus(server.type, server.address, function(data) {
  193. if(data){
  194. data._id = Number(req.params.id);
  195. res.send(JSON.stringify(data));
  196. }else{
  197. res.send("Intertnal Error");
  198. }
  199. });
  200. });
  201. });
  202. var cache = "";
  203. app.get("/api/details/cached", function (req, res) {
  204. res.send(cache);
  205. });
  206. app.get("/api/details", function (req, res) {
  207. engine.serverMenager.list(function (data) {
  208. async.map(data, function (data, callback) {
  209. var server = data;
  210. engine.statusGrabber.getStatus(server.type, server.address, function(data) {
  211. var h = engine.statusGrabber.getResponseHandler(server.type);
  212. data = h(data, server.get("id"), true);
  213. // data.name = server.name;
  214. var temp = {
  215. id: server.id,
  216. address: server.address,
  217. type: server.type,
  218. fullType: engine.st.getFullServerType(server.type),
  219. name: server.name,
  220. maxPlayers: data.traffic.maxplayers,
  221. players: data.traffic.players
  222. };
  223. callback(null, temp);
  224. });
  225. }, function (err, map) {
  226. var obj = JSON.stringify(map);
  227. cache = obj;
  228. res.send(obj);
  229. });
  230. });
  231. });
  232. app.use(function(req, res, next){
  233. res.render('index');
  234. });
  235. var onInit = function () {
  236. updateInterval
  237. .setInterval(engine.configMenager.config.updateInterval)
  238. .setFunction(function () {
  239. var date = new Date();
  240. engine.serverMenager.list(function (data) {
  241. async.map(data, function (data, callback) {
  242. var server = data;
  243. engine.statusGrabber.getStatus(server.type, server.address, function(data) {
  244. var h = engine.statusGrabber.getResponseHandler(server.type);
  245. data.date = date;
  246. h(data, server.get("id"));
  247. callback(null, data);
  248. });
  249. }, function (err, map) {
  250. });
  251. });
  252. })
  253. .start();
  254. };
  255. var onExit = function () {
  256. updateInterval.stop();
  257. };
  258. app.listen(engine.configMenager.config.port, function () {
  259. onInit();
  260. });