engine.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. // Requirments
  2. const fs = require('fs');
  3. const path = require('path');
  4. const db = require("./database");
  5. const ut = require("./utils");
  6. { //CODE BLOCK Type list and modifing
  7. var rawTypes = JSON.parse(fs.readFileSync("availableTypes.json", "utf-8"));
  8. var gameTypes = {};
  9. var gameNames = {};
  10. for(var queryGroup in rawTypes){
  11. if(!rawTypes.hasOwnProperty(queryGroup)){
  12. continue;
  13. }
  14. Object.assign(gameTypes, rawTypes[queryGroup]);
  15. for(var gameName in rawTypes[queryGroup]){
  16. if(rawTypes[queryGroup].hasOwnProperty(gameName)){
  17. gameNames[rawTypes[queryGroup][gameName]] = gameName;
  18. }
  19. }
  20. }
  21. gameTypes = ut.sortObj(gameTypes);
  22. gameNames = ut.sortObj(gameNames);
  23. exports.st = {
  24. getServerTypes: function () {
  25. return gameTypes;
  26. },
  27. getServerType: function (id) {
  28. return gameTypes[id];
  29. },
  30. getFullServerTypes: function () {
  31. return gameNames;
  32. },
  33. getFullServerType: function (id) {
  34. return gameNames[id];
  35. }
  36. };
  37. }
  38. { //CODE BLOCK Status Grabber
  39. var searchQueryType = function (type) {
  40. var x;
  41. for(x in rawTypes){
  42. if(!rawTypes.hasOwnProperty(x)){
  43. continue;
  44. }
  45. var y;
  46. for(y in rawTypes[x]) {
  47. if(!rawTypes[x].hasOwnProperty(y)) {
  48. continue;
  49. }
  50. if(rawTypes[x][y] == type){
  51. return x;
  52. }
  53. }
  54. }
  55. };
  56. var responseHandlers = require("./responseHandler")(db);
  57. var statusHandlers = require("./statusHandler")(db);
  58. var trafficAtributes = [
  59. "players",
  60. "maxplayers",
  61. "createdAt",
  62. "serverId"
  63. ];
  64. exports.statusGrabber = {
  65. getHandler: function (type) {
  66. // var x = statusHandlers[searchQueryType(type)];
  67. var statusH = statusHandlers.getHandler(null, searchQueryType(type));
  68. if(statusH){
  69. return statusH;
  70. }
  71. throw new Error("No handler for "+type+" type");
  72. },
  73. getResponseHandler: function (type) {
  74. return responseHandlers.getHandler(type, searchQueryType(type));
  75. },
  76. getStatus: function (type, address, callback){
  77. var handler = this.getHandler(type);
  78. handler(type, address, callback);
  79. },
  80. getDetails: function (type, address, callback) {
  81. var handler = this.getHandler(type);
  82. var self = this;
  83. handler(type, address, function (data) {
  84. var resp = self.getResponseHandler(type);
  85. var details = resp(data, null, true);
  86. callback(details);
  87. });
  88. },
  89. getTraffic: function (callback) {
  90. db.traffic.findAll({
  91. attributes: trafficAtributes
  92. }).then(function(servers) {
  93. callback(servers);
  94. });
  95. },
  96. getTrafficById: function (id, callback) {
  97. db.traffic.findAll({where: {
  98. serverId: id
  99. },
  100. attributes: trafficAtributes
  101. }).then(function(servers) {
  102. callback(servers);
  103. });
  104. },
  105. getTrafficByRange: function (from, to, id, callback) {
  106. db.traffic.findAll({where: {
  107. serverId: id,
  108. createdAt: {
  109. $gt: from,
  110. $lt: to
  111. }
  112. },
  113. attributes: trafficAtributes
  114. }).then(function(records) {
  115. callback(records);
  116. });
  117. },
  118. pretty: {
  119. day: function (date, id, callback) {
  120. var from = new Date(date.toDateString()),
  121. to = new Date(from.valueOf() + 1000*60*60*24);
  122. exports.statusGrabber.getTrafficByRange(from, to, id, callback);
  123. },
  124. month: function (date, id, callback) {
  125. var from = new Date(date.toDateString());
  126. from.setUTCDate(1);
  127. var to = new Date(from.valueOf() + 1000*60*60*24*32);
  128. to.setUTCDate(1);
  129. exports.statusGrabber.getTrafficByRange(from, to, id, callback);
  130. },
  131. year: function (date, id, callback) {
  132. var from = new Date(date.toDateString());
  133. from.setUTCDate(1);
  134. from.setUTCMonth(0);
  135. var to = new Date(from);
  136. to.setUTCFullYear(to.getUTCFullYear() + 1);
  137. exports.statusGrabber.getTrafficByRange(from, to, id, callback);
  138. }
  139. }
  140. };
  141. }
  142. { //CODE BLOCK Server menager
  143. exports.serverMenager = {
  144. list: function (callback) {
  145. db.server.findAll().then(function(servers) {
  146. callback(servers);
  147. });
  148. },
  149. getByID: function (id, callback) {
  150. db.server.findById(id).then(function (server) {
  151. callback(null, server);
  152. }).catch(function () {
  153. callback("No server with this id");
  154. });
  155. },
  156. add: function (type, address, name) {
  157. db.server.create({
  158. type: type,
  159. name: name,
  160. address: address
  161. });
  162. },
  163. remove: function (id) {
  164. db.server.destroy({
  165. where:{
  166. id: id
  167. }
  168. });
  169. }
  170. };
  171. }
  172. { //CODE BLOCK Config menager
  173. var configFilePath = path.resolve("./config.json");
  174. const defaultConfig = {
  175. lang: "en",
  176. updateInterval : 1000 * 60 * 15,
  177. port: 8080,
  178. updateState: true
  179. };
  180. exports.configMenager = {
  181. config: {},
  182. load: function () {
  183. if(fs.existsSync(configFilePath)){
  184. var confFile = JSON.parse(fs.readFileSync(configFilePath));
  185. var defaultKeys = Object.keys(defaultConfig);
  186. var safeConfig = {};
  187. var configProblem = false;
  188. defaultKeys.forEach(function (key) {
  189. if(confFile.hasOwnProperty(key)){
  190. safeConfig[key] = confFile[key];
  191. }else{
  192. configProblem = true;
  193. safeConfig[key] = defaultConfig[key];
  194. }
  195. });
  196. this.config = safeConfig;
  197. if (configProblem) {
  198. this.save();
  199. }
  200. }else{
  201. this.config = defaultConfig;
  202. this.save();
  203. }
  204. },
  205. save: function () {
  206. fs.writeFileSync(configFilePath, JSON.stringify(this.config, null, "\t"));
  207. }
  208. };
  209. exports.configMenager.load();
  210. }