logger.js 5.9 KB

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