index.js 8.5 KB

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