agora-foundation 3.6.1 → 3.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,8 +32,8 @@ var LoggerImpl = exports.LoggerImpl = /*#__PURE__*/function () {
32
32
  var path = window.require('path');
33
33
  var _window$require = window.require('@electron/remote'),
34
34
  app = _window$require.app;
35
- var logPath = path.resolve(app.getPath('logs'), 'logs', "apaas-".concat(_label, ".log"));
36
- _logWorkerInteractor.addFsLogger(_label, logPath);
35
+ var logFolderPath = path.resolve(app.getPath('logs'), 'logs');
36
+ _logWorkerInteractor.addFsLogger(_label, logFolderPath);
37
37
  } else {
38
38
  this.warn('window.require is not present, logWorkerInteractor.addFsLogger cannot proceed');
39
39
  }
@@ -22,5 +22,5 @@ export interface LogWorkerInteractor {
22
22
  lastId: number;
23
23
  }>;
24
24
  deleteLogs(labels: string[], lastId: number): Promise<void>;
25
- addFsLogger(label: string, logPath: string): void;
25
+ addFsLogger(label: string, logFolderPath: string): void;
26
26
  }
@@ -104,7 +104,11 @@ var zipDir = exports.zipDir = function zipDir(dirPath, filter) {
104
104
  case 32:
105
105
  _context.next = 34;
106
106
  return zip.generateAsync({
107
- type: 'blob'
107
+ type: 'blob',
108
+ compression: 'DEFLATE',
109
+ compressionOptions: {
110
+ level: 9
111
+ }
108
112
  });
109
113
  case 34:
110
114
  blob = _context.sent;
@@ -0,0 +1,2 @@
1
+ import type winstonType from 'winston';
2
+ export declare const createRotateTransport: (filenamePrefix: string, logFolderPath: string) => winstonType.transport;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.object.define-property.js");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createRotateTransport = void 0;
8
+ require("core-js/modules/es.array.concat.js");
9
+ require("core-js/modules/es.array.filter.js");
10
+ require("core-js/modules/es.array.for-each.js");
11
+ require("core-js/modules/es.array.join.js");
12
+ require("core-js/modules/es.array.slice.js");
13
+ require("core-js/modules/es.array.sort.js");
14
+ require("core-js/modules/es.object.to-string.js");
15
+ require("core-js/modules/es.regexp.constructor.js");
16
+ require("core-js/modules/es.regexp.dot-all.js");
17
+ require("core-js/modules/es.regexp.exec.js");
18
+ require("core-js/modules/es.regexp.sticky.js");
19
+ require("core-js/modules/es.regexp.test.js");
20
+ require("core-js/modules/es.regexp.to-string.js");
21
+ require("core-js/modules/esnext.async-iterator.filter.js");
22
+ require("core-js/modules/esnext.async-iterator.for-each.js");
23
+ require("core-js/modules/esnext.iterator.constructor.js");
24
+ require("core-js/modules/esnext.iterator.filter.js");
25
+ require("core-js/modules/esnext.iterator.for-each.js");
26
+ require("core-js/modules/web.dom-collections.for-each.js");
27
+ require("core-js/modules/web.timers.js");
28
+ var createRotateTransport = exports.createRotateTransport = function createRotateTransport(filenamePrefix, logFolderPath) {
29
+ require('winston-daily-rotate-file');
30
+ var winston = require('winston');
31
+ console.log('[worker] log rotate transport created:', filenamePrefix, logFolderPath);
32
+ var transport = new winston.transports.DailyRotateFile({
33
+ level: 'info',
34
+ frequency: '9999d',
35
+ dirname: logFolderPath,
36
+ filename: "".concat(filenamePrefix, "-%DATE%.log"),
37
+ datePattern: 'YYYYMMDDhhmmss',
38
+ maxSize: 1024 * 1024
39
+ });
40
+ transport.on('error', function (error) {
41
+ // log or handle errors here
42
+ console.error('[worker] winston transport error:', error);
43
+ });
44
+ transport.on('new', function (filename) {
45
+ console.log("[worker] winston transport new file created: ".concat(filename));
46
+ });
47
+ transport.on('rotate', function (oldFilename, newFilename) {
48
+ console.log("[worker] winston transport rotated: ".concat(oldFilename, " -> ").concat(newFilename));
49
+ clearLogFolder(logFolderPath, filenamePrefix);
50
+ });
51
+
52
+ // only keep the latest 5 log files
53
+ clearLogFolder(logFolderPath, filenamePrefix);
54
+ return transport;
55
+ };
56
+ var clearLogFolder = function clearLogFolder(logFolderPath, filenamePrefix) {
57
+ var fs = require('node:fs');
58
+ setTimeout(function () {
59
+ fs.readdir(logFolderPath, function (err, files) {
60
+ if (err) {
61
+ console.error("[worker] failed to read log folder: ".concat(logFolderPath), err);
62
+ return;
63
+ }
64
+ var sortedLogFileList = files.filter(function (file) {
65
+ return new RegExp("^".concat(filenamePrefix, "-\\d{14}\\.log")).test(file);
66
+ }).sort(function (a, b) {
67
+ return fs.statSync("".concat(logFolderPath, "/").concat(a)).mtime.getTime() - fs.statSync("".concat(logFolderPath, "/").concat(b)).mtime.getTime();
68
+ });
69
+ console.log("[worker] sorted log files: ".concat(sortedLogFileList.join(', '), ", count: ").concat(sortedLogFileList.length));
70
+ if (sortedLogFileList.length <= 5) {
71
+ return; // 不需要删除文件
72
+ }
73
+ var listToDelete = sortedLogFileList.slice(0, sortedLogFileList.length - 5);
74
+
75
+ // 判断如果超过5个文件,则删除最旧的文件
76
+ console.log("[worker] log files to delete: ".concat(listToDelete.join(', ')));
77
+ listToDelete.forEach(function (file) {
78
+ var oldFilename = "".concat(logFolderPath, "/").concat(file);
79
+ fs.unlink(oldFilename, function (err) {
80
+ if (err) {
81
+ console.error("[worker] failed to delete log file: ".concat(oldFilename), err);
82
+ } else {
83
+ console.log("[worker] successfully deleted log file: ".concat(oldFilename));
84
+ }
85
+ });
86
+ });
87
+ });
88
+ });
89
+ };
@@ -10,6 +10,6 @@ export declare const writeLog: (self: WorkerContext, callId: number, log: Log) =
10
10
  export declare const collectLogs: (self: WorkerContext, callId: number, labels: string[]) => Promise<void>;
11
11
  export declare const deleteLogs: (self: WorkerContext, callId: number, labels: string[], lastId: number) => Promise<void>;
12
12
  export declare const setMaxRecords: (self: WorkerContext, callId: number, max: number) => void;
13
- export declare const addFsLogger: (self: WorkerContext, callId: number, label: string, logPath: string) => void;
13
+ export declare const addFsLogger: (self: WorkerContext, callId: number, label: string, logFolderPath: string) => void;
14
14
  export declare const writeLogsToDisk: (logs: LogSchema[]) => void;
15
15
  export {};
@@ -41,6 +41,7 @@ var _reply = require("./reply");
41
41
  var _raceCondition = require("../../utilities/race-condition");
42
42
  var _jszip = _interopRequireDefault(require("jszip"));
43
43
  var _env = require("../../utilities/env");
44
+ var _logRotate = require("./log-rotate");
44
45
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
45
46
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
46
47
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -259,20 +260,22 @@ var setMaxRecords = exports.setMaxRecords = function setMaxRecords(self, callId,
259
260
  isSuccess: true
260
261
  });
261
262
  };
262
- var addFsLogger = exports.addFsLogger = function addFsLogger(self, callId, label, logPath) {
263
- var winston = eval('require("winston")');
263
+ var addFsLogger = exports.addFsLogger = function addFsLogger(self, callId, label, logFolderPath) {
264
+ var winston = require('winston');
264
265
  if (!winston.loggers.has(label)) {
265
- console.log("[worker] add fs logger, label: ".concat(label, ", path: ").concat(logPath));
266
+ console.log("[worker] add fs logger, label: ".concat(label));
266
267
  winston.loggers.add(label, {
267
268
  format: winston.format.printf(function (_ref4) {
268
269
  var message = _ref4.message;
269
270
  return "".concat(message);
270
271
  }),
271
- transports: [new winston.transports.File({
272
- filename: logPath,
273
- maxFiles: 3,
274
- maxsize: 1048576 //1MB,
275
- })]
272
+ transports: [
273
+ // new winston.transports.File({
274
+ // filename: logPath,
275
+ // maxFiles: 3,
276
+ // maxsize: 1048576, //1MB,
277
+ // }),
278
+ (0, _logRotate.createRotateTransport)("apaas-".concat(label), logFolderPath)]
276
279
  });
277
280
  }
278
281
  (0, _reply.reply)(self, callId, _constants.WorkerDirectives.ADD_FS_LOGGER, {
@@ -280,7 +283,7 @@ var addFsLogger = exports.addFsLogger = function addFsLogger(self, callId, label
280
283
  });
281
284
  };
282
285
  var writeLogsToDisk = exports.writeLogsToDisk = function writeLogsToDisk(logs) {
283
- var winston = eval('require("winston")');
286
+ var winston = require('winston');
284
287
  logs.forEach(function (log) {
285
288
  winston.loggers.get(log.label).info(log.content);
286
289
  });
@@ -3,7 +3,7 @@ export declare class WorkerInteractor implements LogWorkerInteractor {
3
3
  private _eventEmitter;
4
4
  private _logWorker;
5
5
  constructor();
6
- addFsLogger(label: string, logPath: string): Promise<void>;
6
+ addFsLogger(label: string, logFolderPath: string): Promise<void>;
7
7
  clearTempLogs(): Promise<void>;
8
8
  setMaxRecords(maxRecords: number): Promise<void>;
9
9
  sendLog(message: string, label: string): void;
@@ -10,7 +10,6 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
10
10
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
11
  require("core-js/modules/es.error.cause.js");
12
12
  require("core-js/modules/es.error.to-string.js");
13
- require("core-js/modules/es.array.concat.js");
14
13
  require("core-js/modules/es.date.now.js");
15
14
  require("core-js/modules/es.function.bind.js");
16
15
  require("core-js/modules/es.object.to-string.js");
@@ -39,14 +38,14 @@ var WorkerInteractor = exports.WorkerInteractor = /*#__PURE__*/function () {
39
38
  }
40
39
  return (0, _createClass2["default"])(WorkerInteractor, [{
41
40
  key: "addFsLogger",
42
- value: function addFsLogger(label, logPath) {
41
+ value: function addFsLogger(label, logFolderPath) {
43
42
  try {
44
- console.info("[WorkerInteractor] add fs logger, label: ".concat(label, ", log path: ").concat(logPath));
43
+ console.info("[WorkerInteractor] add fs logger, label: ".concat(label));
45
44
  return this._promisify({
46
45
  type: _constants.WorkerDirectives.ADD_FS_LOGGER,
47
46
  data: {
48
47
  label: label,
49
- logPath: logPath
48
+ logFolderPath: logFolderPath
50
49
  }
51
50
  });
52
51
  } catch (err) {