logger.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. 'use strict';
  2. const dir = `${__dirname}/../../log`;
  3. const fs = require('fs');
  4. const config = require('config');
  5. const Discord = require("discord.js");
  6. let client;
  7. let utils;
  8. if (!config.isDocker && !fs.existsSync(`${dir}`)) {
  9. fs.mkdirSync(dir);
  10. }
  11. let started;
  12. let success = 0;
  13. let successThisMinute = 0;
  14. let successThisHour = 0;
  15. let error = 0;
  16. let errorThisMinute = 0;
  17. let errorThisHour = 0;
  18. let info = 0;
  19. let infoThisMinute = 0;
  20. let infoThisHour = 0;
  21. let successUnitsPerMinute = [0,0,0,0,0,0,0,0,0,0];
  22. let errorUnitsPerMinute = [0,0,0,0,0,0,0,0,0,0];
  23. let infoUnitsPerMinute = [0,0,0,0,0,0,0,0,0,0];
  24. let successUnitsPerHour = [0,0,0,0,0,0,0,0,0,0];
  25. let errorUnitsPerHour = [0,0,0,0,0,0,0,0,0,0];
  26. let infoUnitsPerHour = [0,0,0,0,0,0,0,0,0,0];
  27. function calculateUnits(units, unit) {
  28. units.push(unit);
  29. if (units.length > 10) units.shift();
  30. return units;
  31. }
  32. function calculateHourUnits() {
  33. successUnitsPerHour = calculateUnits(successUnitsPerHour, successThisHour);
  34. errorUnitsPerHour = calculateUnits(errorUnitsPerHour, errorThisHour);
  35. infoUnitsPerHour = calculateUnits(infoUnitsPerHour, infoThisHour);
  36. successThisHour = 0;
  37. errorThisHour = 0;
  38. infoThisHour = 0;
  39. utils.emitToRoom('admin.statistics', 'event:admin.statistics.success.units.hour', successUnitsPerHour);
  40. utils.emitToRoom('admin.statistics', 'event:admin.statistics.error.units.hour', errorUnitsPerHour);
  41. utils.emitToRoom('admin.statistics', 'event:admin.statistics.info.units.hour', infoUnitsPerHour);
  42. setTimeout(calculateHourUnits, 1000 * 60 * 60)
  43. }
  44. function calculateMinuteUnits() {
  45. successUnitsPerMinute = calculateUnits(successUnitsPerMinute, successThisMinute);
  46. errorUnitsPerMinute = calculateUnits(errorUnitsPerMinute, errorThisMinute);
  47. infoUnitsPerMinute = calculateUnits(infoUnitsPerMinute, infoThisMinute);
  48. successThisMinute = 0;
  49. errorThisMinute = 0;
  50. infoThisMinute = 0;
  51. utils.emitToRoom('admin.statistics', 'event:admin.statistics.success.units.minute', successUnitsPerMinute);
  52. utils.emitToRoom('admin.statistics', 'event:admin.statistics.error.units.minute', errorUnitsPerMinute);
  53. utils.emitToRoom('admin.statistics', 'event:admin.statistics.info.units.minute', infoUnitsPerMinute);
  54. setTimeout(calculateMinuteUnits, 1000 * 60)
  55. }
  56. let twoDigits = (num) => {
  57. return (num < 10) ? '0' + num : num;
  58. };
  59. let getTime = () => {
  60. let time = new Date();
  61. return {
  62. year: time.getFullYear(),
  63. month: time.getMonth() + 1,
  64. day: time.getDate(),
  65. hour: time.getHours(),
  66. minute: time.getMinutes(),
  67. second: time.getSeconds()
  68. }
  69. };
  70. let getTimeFormatted = () => {
  71. let time = getTime();
  72. return `${time.year}-${twoDigits(time.month)}-${twoDigits(time.day)} ${twoDigits(time.hour)}:${twoDigits(time.minute)}:${twoDigits(time.second)}`;
  73. }
  74. module.exports = {
  75. init: function(cb) {
  76. utils = require('./utils');
  77. started = Date.now();
  78. setTimeout(calculateMinuteUnits, 1000 * 60);
  79. setTimeout(calculateHourUnits, 1000 * 60 * 60);
  80. setTimeout(this.calculate, 1000 * 30);
  81. let time = getTimeFormatted();
  82. fs.appendFile(dir + '/all.log', `${time} BACKEND_RESTARTED\n`, ()=>{});
  83. fs.appendFile(dir + '/success.log', `${time} BACKEND_RESTARTED\n`, ()=>{});
  84. fs.appendFile(dir + '/error.log', `${time} BACKEND_RESTARTED\n`, ()=>{});
  85. fs.appendFile(dir + '/info.log', `${time} BACKEND_RESTARTED\n`, ()=>{});
  86. fs.appendFile(dir + '/debugStation.log', `${time} BACKEND_RESTARTED\n`, ()=>{});
  87. cb("MAJOR FAILURE!");
  88. //cb();
  89. },
  90. success: (type, message, display = true) => {
  91. success++;
  92. successThisMinute++;
  93. successThisHour++;
  94. let time = getTimeFormatted();
  95. fs.appendFile(dir + '/all.log', `${time} SUCCESS - ${type} - ${message}\n`, ()=>{});
  96. fs.appendFile(dir + '/success.log', `${time} SUCCESS - ${type} - ${message}\n`, ()=>{});
  97. if (display) console.info('\x1b[32m', time, 'SUCCESS', '-', type, '-', message, '\x1b[0m');
  98. },
  99. error: (type, message, display = true) => {
  100. error++;
  101. errorThisMinute++;
  102. errorThisHour++;
  103. let time = getTimeFormatted();
  104. fs.appendFile(dir + '/all.log', `${time} ERROR - ${type} - ${message}\n`, ()=>{});
  105. fs.appendFile(dir + '/error.log', `${time} ERROR - ${type} - ${message}\n`, ()=>{});
  106. if (display) console.warn('\x1b[31m', time, 'ERROR', '-', type, '-', message, '\x1b[0m');
  107. },
  108. info: (type, message, display = true) => {
  109. info++;
  110. infoThisMinute++;
  111. infoThisHour++;
  112. let time = getTimeFormatted();
  113. fs.appendFile(dir + '/all.log', `${time} INFO - ${type} - ${message}\n`, ()=>{});
  114. fs.appendFile(dir + '/info.log', `${time} INFO - ${type} - ${message}\n`, ()=>{});
  115. if (display) console.info('\x1b[36m', time, 'INFO', '-', type, '-', message, '\x1b[0m');
  116. },
  117. stationIssue: (string, display = false) => {
  118. let time = getTimeFormatted();
  119. fs.appendFile(dir + '/debugStation.log', `${time} - ${string}\n`, ()=>{});
  120. if (display) console.info('\x1b[35m', time, '-', string, '\x1b[0m');
  121. },
  122. calculatePerSecond: function(number) {
  123. let secondsRunning = Math.floor((Date.now() - started) / 1000);
  124. let perSecond = number / secondsRunning;
  125. return perSecond;
  126. },
  127. calculatePerMinute: function(number) {
  128. let perMinute = this.calculatePerSecond(number) * 60;
  129. return perMinute;
  130. },
  131. calculatePerHour: function(number) {
  132. let perHour = this.calculatePerMinute(number) * 60;
  133. return perHour;
  134. },
  135. calculatePerDay: function(number) {
  136. let perDay = this.calculatePerHour(number) * 24;
  137. return perDay;
  138. },
  139. calculate: function() {
  140. let _this = module.exports;
  141. utils.emitToRoom('admin.statistics', 'event:admin.statistics.logs', {
  142. second: {
  143. success: _this.calculatePerSecond(success),
  144. error: _this.calculatePerSecond(error),
  145. info: _this.calculatePerSecond(info)
  146. },
  147. minute: {
  148. success: _this.calculatePerMinute(success),
  149. error: _this.calculatePerMinute(error),
  150. info: _this.calculatePerMinute(info)
  151. },
  152. hour: {
  153. success: _this.calculatePerHour(success),
  154. error: _this.calculatePerHour(error),
  155. info: _this.calculatePerHour(info)
  156. },
  157. day: {
  158. success: _this.calculatePerDay(success),
  159. error: _this.calculatePerDay(error),
  160. info: _this.calculatePerDay(info)
  161. }
  162. });
  163. setTimeout(_this.calculate, 1000 * 30);
  164. }
  165. };