agora-foundation 3.7.9-alpha → 3.8.0-alpha
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.
- package/lib/restful-scheduler/scheduler.d.ts +16 -0
- package/lib/restful-scheduler/scheduler.js +232 -0
- package/lib/utilities/safely-remove-child.d.ts +7 -0
- package/lib/utilities/safely-remove-child.js +36 -0
- package/lib/utilities/zip.d.ts +4 -0
- package/lib/utilities/zip.js +53 -11
- package/lib/worker/handler/log.js +47 -34
- package/lib/worker/worker-factory.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const DEFAULT_MAX_CONCURRENT = 10;
|
|
2
|
+
export declare class AgoraRequestScheduler {
|
|
3
|
+
private _maxConcurrent;
|
|
4
|
+
private _runningCount;
|
|
5
|
+
private _queueControl;
|
|
6
|
+
private _weightManager;
|
|
7
|
+
private _timeoutThreshold;
|
|
8
|
+
constructor(configs?: {
|
|
9
|
+
rules?: Map<RegExp, number>;
|
|
10
|
+
maxConcurrent?: number;
|
|
11
|
+
});
|
|
12
|
+
addTask(url: string, executor: () => Promise<any>): void;
|
|
13
|
+
private _isIdle;
|
|
14
|
+
private _executeTask;
|
|
15
|
+
private _onTaskComplete;
|
|
16
|
+
}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.symbol.js");
|
|
4
|
+
require("core-js/modules/es.symbol.description.js");
|
|
5
|
+
require("core-js/modules/es.symbol.iterator.js");
|
|
6
|
+
require("core-js/modules/es.error.cause.js");
|
|
7
|
+
require("core-js/modules/es.error.to-string.js");
|
|
8
|
+
require("core-js/modules/es.array.from.js");
|
|
9
|
+
require("core-js/modules/es.array.is-array.js");
|
|
10
|
+
require("core-js/modules/es.array.slice.js");
|
|
11
|
+
require("core-js/modules/es.date.to-string.js");
|
|
12
|
+
require("core-js/modules/es.function.name.js");
|
|
13
|
+
require("core-js/modules/es.object.define-property.js");
|
|
14
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
15
|
+
Object.defineProperty(exports, "__esModule", {
|
|
16
|
+
value: true
|
|
17
|
+
});
|
|
18
|
+
exports.DEFAULT_MAX_CONCURRENT = exports.AgoraRequestScheduler = void 0;
|
|
19
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
20
|
+
require("core-js/modules/es.array.find-index.js");
|
|
21
|
+
require("core-js/modules/es.array.for-each.js");
|
|
22
|
+
require("core-js/modules/es.array.iterator.js");
|
|
23
|
+
require("core-js/modules/es.array.map.js");
|
|
24
|
+
require("core-js/modules/es.array.push.js");
|
|
25
|
+
require("core-js/modules/es.array.splice.js");
|
|
26
|
+
require("core-js/modules/es.date.now.js");
|
|
27
|
+
require("core-js/modules/es.map.js");
|
|
28
|
+
require("core-js/modules/es.object.to-string.js");
|
|
29
|
+
require("core-js/modules/es.regexp.constructor.js");
|
|
30
|
+
require("core-js/modules/es.regexp.dot-all.js");
|
|
31
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
32
|
+
require("core-js/modules/es.regexp.sticky.js");
|
|
33
|
+
require("core-js/modules/es.regexp.test.js");
|
|
34
|
+
require("core-js/modules/es.regexp.to-string.js");
|
|
35
|
+
require("core-js/modules/es.string.iterator.js");
|
|
36
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
37
|
+
require("core-js/modules/esnext.iterator.for-each.js");
|
|
38
|
+
require("core-js/modules/esnext.iterator.map.js");
|
|
39
|
+
require("core-js/modules/esnext.map.delete-all.js");
|
|
40
|
+
require("core-js/modules/esnext.map.emplace.js");
|
|
41
|
+
require("core-js/modules/esnext.map.every.js");
|
|
42
|
+
require("core-js/modules/esnext.map.filter.js");
|
|
43
|
+
require("core-js/modules/esnext.map.find.js");
|
|
44
|
+
require("core-js/modules/esnext.map.find-key.js");
|
|
45
|
+
require("core-js/modules/esnext.map.includes.js");
|
|
46
|
+
require("core-js/modules/esnext.map.key-of.js");
|
|
47
|
+
require("core-js/modules/esnext.map.map-keys.js");
|
|
48
|
+
require("core-js/modules/esnext.map.map-values.js");
|
|
49
|
+
require("core-js/modules/esnext.map.merge.js");
|
|
50
|
+
require("core-js/modules/esnext.map.reduce.js");
|
|
51
|
+
require("core-js/modules/esnext.map.some.js");
|
|
52
|
+
require("core-js/modules/esnext.map.update.js");
|
|
53
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
54
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
55
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
56
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
57
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
58
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
59
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
60
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
61
|
+
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; } } }; }
|
|
62
|
+
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; } }
|
|
63
|
+
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; }
|
|
64
|
+
var DEFAULT_MAX_CONCURRENT = exports.DEFAULT_MAX_CONCURRENT = 10;
|
|
65
|
+
var AgoraRequestWeightManager = /*#__PURE__*/function () {
|
|
66
|
+
function AgoraRequestWeightManager() {
|
|
67
|
+
(0, _classCallCheck2["default"])(this, AgoraRequestWeightManager);
|
|
68
|
+
(0, _defineProperty2["default"])(this, "_rules", new Map());
|
|
69
|
+
}
|
|
70
|
+
return (0, _createClass2["default"])(AgoraRequestWeightManager, [{
|
|
71
|
+
key: "getWeight",
|
|
72
|
+
value: function getWeight(url) {
|
|
73
|
+
var _iterator = _createForOfIteratorHelper(this._rules),
|
|
74
|
+
_step;
|
|
75
|
+
try {
|
|
76
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
77
|
+
var _step$value = (0, _slicedToArray2["default"])(_step.value, 2),
|
|
78
|
+
pattern = _step$value[0],
|
|
79
|
+
weight = _step$value[1];
|
|
80
|
+
if (pattern.test(url)) {
|
|
81
|
+
return weight;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
} catch (err) {
|
|
85
|
+
_iterator.e(err);
|
|
86
|
+
} finally {
|
|
87
|
+
_iterator.f();
|
|
88
|
+
}
|
|
89
|
+
return 0;
|
|
90
|
+
}
|
|
91
|
+
}, {
|
|
92
|
+
key: "addRule",
|
|
93
|
+
value: function addRule(pattern, weight) {
|
|
94
|
+
if (typeof pattern === 'string') {
|
|
95
|
+
this._rules.set(new RegExp(pattern), weight);
|
|
96
|
+
} else {
|
|
97
|
+
this._rules.set(pattern, weight);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}]);
|
|
101
|
+
}();
|
|
102
|
+
var AgoraPriorityQueue = /*#__PURE__*/function () {
|
|
103
|
+
function AgoraPriorityQueue() {
|
|
104
|
+
(0, _classCallCheck2["default"])(this, AgoraPriorityQueue);
|
|
105
|
+
(0, _defineProperty2["default"])(this, "_items", []);
|
|
106
|
+
}
|
|
107
|
+
return (0, _createClass2["default"])(AgoraPriorityQueue, [{
|
|
108
|
+
key: "enqueue",
|
|
109
|
+
value: function enqueue(item) {
|
|
110
|
+
this._items.push(item);
|
|
111
|
+
}
|
|
112
|
+
}, {
|
|
113
|
+
key: "dequeue",
|
|
114
|
+
value: function dequeue(timeoutThreshold) {
|
|
115
|
+
var _this = this;
|
|
116
|
+
var now = Date.now();
|
|
117
|
+
var taskIndex = this._items.findIndex(function (item) {
|
|
118
|
+
return now - (item === null || item === void 0 ? void 0 : item.addedAt) > timeoutThreshold;
|
|
119
|
+
});
|
|
120
|
+
if (taskIndex !== -1) {
|
|
121
|
+
return this._items.splice(taskIndex, 1)[0];
|
|
122
|
+
}
|
|
123
|
+
taskIndex = this._items.findIndex(function (item) {
|
|
124
|
+
return (item === null || item === void 0 ? void 0 : item.weight) === Math.max.apply(Math, (0, _toConsumableArray2["default"])(_this._items.map(function (item) {
|
|
125
|
+
return item === null || item === void 0 ? void 0 : item.weight;
|
|
126
|
+
})));
|
|
127
|
+
});
|
|
128
|
+
if (taskIndex !== -1) {
|
|
129
|
+
return this._items.splice(taskIndex, 1)[0];
|
|
130
|
+
}
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
}]);
|
|
134
|
+
}();
|
|
135
|
+
var AgoraRequestScheduler = exports.AgoraRequestScheduler = /*#__PURE__*/function () {
|
|
136
|
+
// in ms
|
|
137
|
+
|
|
138
|
+
function AgoraRequestScheduler(configs) {
|
|
139
|
+
var _rules$size,
|
|
140
|
+
_this2 = this;
|
|
141
|
+
(0, _classCallCheck2["default"])(this, AgoraRequestScheduler);
|
|
142
|
+
(0, _defineProperty2["default"])(this, "_maxConcurrent", DEFAULT_MAX_CONCURRENT);
|
|
143
|
+
(0, _defineProperty2["default"])(this, "_runningCount", 0);
|
|
144
|
+
(0, _defineProperty2["default"])(this, "_queueControl", new AgoraPriorityQueue());
|
|
145
|
+
(0, _defineProperty2["default"])(this, "_weightManager", new AgoraRequestWeightManager());
|
|
146
|
+
(0, _defineProperty2["default"])(this, "_timeoutThreshold", 5000);
|
|
147
|
+
var _ref = configs !== null && configs !== void 0 ? configs : {},
|
|
148
|
+
rules = _ref.rules,
|
|
149
|
+
maxConcurrent = _ref.maxConcurrent;
|
|
150
|
+
if (maxConcurrent && typeof maxConcurrent === 'number') {
|
|
151
|
+
this._maxConcurrent = maxConcurrent;
|
|
152
|
+
}
|
|
153
|
+
if (((_rules$size = rules === null || rules === void 0 ? void 0 : rules.size) !== null && _rules$size !== void 0 ? _rules$size : 0) > 0) {
|
|
154
|
+
rules === null || rules === void 0 || rules.forEach(function (v, k) {
|
|
155
|
+
if ((k instanceof RegExp || typeof k === 'string') && typeof v === 'number') {
|
|
156
|
+
_this2._weightManager.addRule(k, v);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return (0, _createClass2["default"])(AgoraRequestScheduler, [{
|
|
162
|
+
key: "addTask",
|
|
163
|
+
value: function addTask(url, executor) {
|
|
164
|
+
var task = {
|
|
165
|
+
url: url,
|
|
166
|
+
weight: this._weightManager.getWeight(url),
|
|
167
|
+
addedAt: Date.now(),
|
|
168
|
+
executor: executor
|
|
169
|
+
};
|
|
170
|
+
this._queueControl.enqueue(task);
|
|
171
|
+
this._executeTask();
|
|
172
|
+
}
|
|
173
|
+
}, {
|
|
174
|
+
key: "_isIdle",
|
|
175
|
+
value: function _isIdle() {
|
|
176
|
+
if (this._runningCount < this._maxConcurrent) {
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
}, {
|
|
182
|
+
key: "_executeTask",
|
|
183
|
+
value: function () {
|
|
184
|
+
var _executeTask2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
185
|
+
var task, _t;
|
|
186
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
187
|
+
while (1) switch (_context.prev = _context.next) {
|
|
188
|
+
case 0:
|
|
189
|
+
if (this._isIdle()) {
|
|
190
|
+
_context.next = 1;
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
return _context.abrupt("return");
|
|
194
|
+
case 1:
|
|
195
|
+
task = this._queueControl.dequeue(this._timeoutThreshold);
|
|
196
|
+
if (!task) {
|
|
197
|
+
_context.next = 6;
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
this._runningCount++;
|
|
201
|
+
_context.prev = 2;
|
|
202
|
+
_context.next = 3;
|
|
203
|
+
return task.executor();
|
|
204
|
+
case 3:
|
|
205
|
+
_context.next = 5;
|
|
206
|
+
break;
|
|
207
|
+
case 4:
|
|
208
|
+
_context.prev = 4;
|
|
209
|
+
_t = _context["catch"](2);
|
|
210
|
+
case 5:
|
|
211
|
+
_context.prev = 5;
|
|
212
|
+
this._onTaskComplete();
|
|
213
|
+
return _context.finish(5);
|
|
214
|
+
case 6:
|
|
215
|
+
case "end":
|
|
216
|
+
return _context.stop();
|
|
217
|
+
}
|
|
218
|
+
}, _callee, this, [[2, 4, 5, 6]]);
|
|
219
|
+
}));
|
|
220
|
+
function _executeTask() {
|
|
221
|
+
return _executeTask2.apply(this, arguments);
|
|
222
|
+
}
|
|
223
|
+
return _executeTask;
|
|
224
|
+
}()
|
|
225
|
+
}, {
|
|
226
|
+
key: "_onTaskComplete",
|
|
227
|
+
value: function _onTaskComplete() {
|
|
228
|
+
this._runningCount--;
|
|
229
|
+
this._executeTask();
|
|
230
|
+
}
|
|
231
|
+
}]);
|
|
232
|
+
}();
|
|
@@ -0,0 +1,36 @@
|
|
|
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.safelyRemoveChild = safelyRemoveChild;
|
|
8
|
+
var _logger = require("../logger");
|
|
9
|
+
/**
|
|
10
|
+
* 安全地使用 Node.removeChild 移除子节点
|
|
11
|
+
* @param parent 父节点
|
|
12
|
+
* @param child 要移除的子节点
|
|
13
|
+
* @returns 移除的节点,如果失败返回 null
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
var logger = (0, _logger.getLogger)();
|
|
17
|
+
function safelyRemoveChild(parent, child) {
|
|
18
|
+
// 参数检查
|
|
19
|
+
if (!parent || !child) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
// 检查父子关系
|
|
24
|
+
if (parent.contains(child)) {
|
|
25
|
+
return parent.removeChild(child);
|
|
26
|
+
} else {
|
|
27
|
+
// 子节点不属于该父节点
|
|
28
|
+
logger.warn('safelyRemoveChild: The node to be removed is not a child of this node');
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
} catch (error) {
|
|
32
|
+
// 捕获其他可能的错误
|
|
33
|
+
logger.error('safelyRemoveChild: Failed to remove child node', error);
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
package/lib/utilities/zip.d.ts
CHANGED
package/lib/utilities/zip.js
CHANGED
|
@@ -9,10 +9,8 @@ require("core-js/modules/es.array.from.js");
|
|
|
9
9
|
require("core-js/modules/es.array.is-array.js");
|
|
10
10
|
require("core-js/modules/es.array.iterator.js");
|
|
11
11
|
require("core-js/modules/es.array.slice.js");
|
|
12
|
-
require("core-js/modules/es.date.to-string.js");
|
|
13
12
|
require("core-js/modules/es.function.name.js");
|
|
14
13
|
require("core-js/modules/es.object.define-property.js");
|
|
15
|
-
require("core-js/modules/es.regexp.exec.js");
|
|
16
14
|
require("core-js/modules/es.regexp.test.js");
|
|
17
15
|
require("core-js/modules/es.regexp.to-string.js");
|
|
18
16
|
require("core-js/modules/es.string.iterator.js");
|
|
@@ -21,27 +19,29 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
21
19
|
Object.defineProperty(exports, "__esModule", {
|
|
22
20
|
value: true
|
|
23
21
|
});
|
|
24
|
-
exports.zipDir = void 0;
|
|
22
|
+
exports.zipDir = exports.createMultiEntryZip = void 0;
|
|
25
23
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
26
24
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
27
25
|
require("core-js/modules/es.array.concat.js");
|
|
26
|
+
require("core-js/modules/es.date.to-iso-string.js");
|
|
27
|
+
require("core-js/modules/es.date.to-string.js");
|
|
28
28
|
require("core-js/modules/es.object.to-string.js");
|
|
29
29
|
require("core-js/modules/es.promise.js");
|
|
30
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
31
|
+
require("core-js/modules/es.string.replace.js");
|
|
30
32
|
var _jszip = _interopRequireDefault(require("jszip"));
|
|
31
|
-
var _logger = require("../logger");
|
|
32
|
-
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
33
33
|
var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
|
|
34
34
|
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; } } }; }
|
|
35
35
|
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; } }
|
|
36
36
|
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; }
|
|
37
|
+
var COMPRESSION_LEVEL = 9;
|
|
37
38
|
var zipDir = exports.zipDir = function zipDir(dirPath, filter) {
|
|
38
|
-
var logger = (0, _logger.getLogger)();
|
|
39
39
|
return new Promise(function (resolve) {
|
|
40
40
|
try {
|
|
41
41
|
var fs = window.require('fs');
|
|
42
42
|
fs.readdir(dirPath, /*#__PURE__*/function () {
|
|
43
43
|
var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(err, files) {
|
|
44
|
-
var zip, _iterator, _step, _file, filePath, logsStr, blob, buffer, datefmt, file, _t;
|
|
44
|
+
var zip, _iterator, _step, _file, filePath, logsStr, blob, buffer, now, datefmt, file, _t;
|
|
45
45
|
return _regenerator["default"].wrap(function (_context) {
|
|
46
46
|
while (1) switch (_context.prev = _context.next) {
|
|
47
47
|
case 0:
|
|
@@ -107,7 +107,7 @@ var zipDir = exports.zipDir = function zipDir(dirPath, filter) {
|
|
|
107
107
|
type: 'blob',
|
|
108
108
|
compression: 'DEFLATE',
|
|
109
109
|
compressionOptions: {
|
|
110
|
-
level:
|
|
110
|
+
level: COMPRESSION_LEVEL
|
|
111
111
|
}
|
|
112
112
|
});
|
|
113
113
|
case 12:
|
|
@@ -116,7 +116,9 @@ var zipDir = exports.zipDir = function zipDir(dirPath, filter) {
|
|
|
116
116
|
return blob.arrayBuffer();
|
|
117
117
|
case 13:
|
|
118
118
|
buffer = _context.sent;
|
|
119
|
-
|
|
119
|
+
// 使用 JavaScript 内置 Date 对象格式化日期
|
|
120
|
+
now = new Date();
|
|
121
|
+
datefmt = now.toISOString().replace(/\.\d{3}Z$/, 'Z') + 'Z';
|
|
120
122
|
file = new File([buffer], "logs-".concat(datefmt, ".zip"), {
|
|
121
123
|
type: 'application/zip'
|
|
122
124
|
});
|
|
@@ -132,7 +134,7 @@ var zipDir = exports.zipDir = function zipDir(dirPath, filter) {
|
|
|
132
134
|
};
|
|
133
135
|
}());
|
|
134
136
|
} catch (e) {
|
|
135
|
-
|
|
137
|
+
console.error("failed to get buffer.", e);
|
|
136
138
|
resolve(null);
|
|
137
139
|
}
|
|
138
140
|
});
|
|
@@ -163,4 +165,44 @@ var isFile = /*#__PURE__*/function () {
|
|
|
163
165
|
return function isFile(_x3) {
|
|
164
166
|
return _ref2.apply(this, arguments);
|
|
165
167
|
};
|
|
166
|
-
}();
|
|
168
|
+
}();
|
|
169
|
+
var createMultiEntryZip = exports.createMultiEntryZip = function createMultiEntryZip() {
|
|
170
|
+
var zip = new _jszip["default"]();
|
|
171
|
+
return {
|
|
172
|
+
addFile: function addFile(fileName, content) {
|
|
173
|
+
zip.file(fileName, content);
|
|
174
|
+
},
|
|
175
|
+
finish: function () {
|
|
176
|
+
var _finish = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
177
|
+
var blob, buffer;
|
|
178
|
+
return _regenerator["default"].wrap(function (_context3) {
|
|
179
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
180
|
+
case 0:
|
|
181
|
+
_context3.next = 1;
|
|
182
|
+
return zip.generateAsync({
|
|
183
|
+
type: 'blob',
|
|
184
|
+
compression: 'DEFLATE',
|
|
185
|
+
compressionOptions: {
|
|
186
|
+
level: COMPRESSION_LEVEL
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
case 1:
|
|
190
|
+
blob = _context3.sent;
|
|
191
|
+
_context3.next = 2;
|
|
192
|
+
return blob.arrayBuffer();
|
|
193
|
+
case 2:
|
|
194
|
+
buffer = _context3.sent;
|
|
195
|
+
return _context3.abrupt("return", buffer);
|
|
196
|
+
case 3:
|
|
197
|
+
case "end":
|
|
198
|
+
return _context3.stop();
|
|
199
|
+
}
|
|
200
|
+
}, _callee3);
|
|
201
|
+
}));
|
|
202
|
+
function finish() {
|
|
203
|
+
return _finish.apply(this, arguments);
|
|
204
|
+
}
|
|
205
|
+
return finish;
|
|
206
|
+
}()
|
|
207
|
+
};
|
|
208
|
+
};
|
|
@@ -24,10 +24,15 @@ require("core-js/modules/es.array.concat.js");
|
|
|
24
24
|
require("core-js/modules/es.array.for-each.js");
|
|
25
25
|
require("core-js/modules/es.array.iterator.js");
|
|
26
26
|
require("core-js/modules/es.array.push.js");
|
|
27
|
-
require("core-js/modules/es.array.
|
|
27
|
+
require("core-js/modules/es.array-buffer.constructor.js");
|
|
28
|
+
require("core-js/modules/es.array-buffer.slice.js");
|
|
29
|
+
require("core-js/modules/es.data-view.js");
|
|
28
30
|
require("core-js/modules/es.date.to-string.js");
|
|
29
31
|
require("core-js/modules/es.object.to-string.js");
|
|
30
32
|
require("core-js/modules/es.string.iterator.js");
|
|
33
|
+
require("core-js/modules/esnext.array-buffer.detached.js");
|
|
34
|
+
require("core-js/modules/esnext.array-buffer.transfer.js");
|
|
35
|
+
require("core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js");
|
|
31
36
|
require("core-js/modules/esnext.iterator.constructor.js");
|
|
32
37
|
require("core-js/modules/esnext.iterator.for-each.js");
|
|
33
38
|
require("core-js/modules/web.dom-collections.for-each.js");
|
|
@@ -38,16 +43,17 @@ var _mutex = require("../mutex");
|
|
|
38
43
|
var _constants = require("../constants");
|
|
39
44
|
var _reply = require("./reply");
|
|
40
45
|
var _raceCondition = require("../../utilities/race-condition");
|
|
41
|
-
var _jszip = _interopRequireDefault(require("jszip"));
|
|
42
46
|
var _env = require("../../utilities/env");
|
|
43
47
|
var _logRotateNew = require("./log-rotate-new");
|
|
48
|
+
var _zip = require("../../utilities/zip");
|
|
44
49
|
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
50
|
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
51
|
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; } // import { createRotateTransport } from './log-rotate';
|
|
47
52
|
var MAX_WAIT_TIME = 3000;
|
|
48
53
|
var mutex = new _mutex.Mutex();
|
|
49
|
-
var maxRecords =
|
|
54
|
+
var maxRecords = 20000;
|
|
50
55
|
var logsCount = 0;
|
|
56
|
+
var maxDeleteCount = 5000;
|
|
51
57
|
var logs = [];
|
|
52
58
|
var writeLog = exports.writeLog = function writeLog(self, callId, log) {
|
|
53
59
|
logsCount++;
|
|
@@ -60,7 +66,7 @@ var writeLog = exports.writeLog = function writeLog(self, callId, log) {
|
|
|
60
66
|
var debouncedWriting = (0, _debounce["default"])(function () {
|
|
61
67
|
mutex.dispatch(function () {
|
|
62
68
|
return (0, _raceCondition.timeout)((0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
63
|
-
var time1, logscopy, count, exceedNo, total, pk, time2, _t, _t2;
|
|
69
|
+
var time1, logscopy, count, exceedNo, records, maxIdToDelete, total, pk, time2, _t, _t2;
|
|
64
70
|
return _regenerator["default"].wrap(function (_context) {
|
|
65
71
|
while (1) switch (_context.prev = _context.next) {
|
|
66
72
|
case 0:
|
|
@@ -72,7 +78,7 @@ var debouncedWriting = (0, _debounce["default"])(function () {
|
|
|
72
78
|
break;
|
|
73
79
|
}
|
|
74
80
|
writeLogsToDisk(logscopy);
|
|
75
|
-
_context.next =
|
|
81
|
+
_context.next = 11;
|
|
76
82
|
break;
|
|
77
83
|
case 1:
|
|
78
84
|
_context.prev = 1;
|
|
@@ -82,43 +88,56 @@ var debouncedWriting = (0, _debounce["default"])(function () {
|
|
|
82
88
|
count = _context.sent;
|
|
83
89
|
exceedNo = logscopy.length + count - maxRecords;
|
|
84
90
|
if (!(exceedNo > 0)) {
|
|
85
|
-
_context.next =
|
|
91
|
+
_context.next = 6;
|
|
86
92
|
break;
|
|
87
93
|
}
|
|
88
94
|
console.log("[worker] the count of stored logs exceeded limit of ".concat(maxRecords, " for ").concat(exceedNo, "."));
|
|
89
|
-
console.log("[worker] start deleting records.
|
|
95
|
+
console.log("[worker] start deleting records. will delete: ".concat(maxDeleteCount));
|
|
90
96
|
_context.next = 3;
|
|
91
|
-
return _db.db.logs.orderBy(':id').
|
|
97
|
+
return _db.db.logs.orderBy(':id').limit(maxDeleteCount).keys();
|
|
92
98
|
case 3:
|
|
99
|
+
records = _context.sent;
|
|
100
|
+
if (!(records.length > 0)) {
|
|
101
|
+
_context.next = 5;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
maxIdToDelete = records[records.length - 1];
|
|
105
|
+
_context.next = 4;
|
|
106
|
+
return _db.db.logs.where(':id').belowOrEqual(maxIdToDelete)["delete"]();
|
|
107
|
+
case 4:
|
|
93
108
|
total = _context.sent;
|
|
94
109
|
console.log("[worker] done deleting records. total: ".concat(total));
|
|
95
|
-
case 4:
|
|
96
110
|
_context.next = 6;
|
|
97
111
|
break;
|
|
98
112
|
case 5:
|
|
99
|
-
|
|
113
|
+
console.log("[worker] no records to delete");
|
|
114
|
+
case 6:
|
|
115
|
+
_context.next = 8;
|
|
116
|
+
break;
|
|
117
|
+
case 7:
|
|
118
|
+
_context.prev = 7;
|
|
100
119
|
_t = _context["catch"](1);
|
|
101
120
|
console.error("[worker] clear db failed.", _t);
|
|
102
|
-
case
|
|
103
|
-
_context.prev =
|
|
121
|
+
case 8:
|
|
122
|
+
_context.prev = 8;
|
|
104
123
|
console.log("[worker] start writing logs. total: ".concat(logscopy.length));
|
|
105
|
-
_context.next =
|
|
124
|
+
_context.next = 9;
|
|
106
125
|
return _db.db.logs.bulkPut(logscopy);
|
|
107
|
-
case
|
|
126
|
+
case 9:
|
|
108
127
|
pk = _context.sent;
|
|
109
128
|
time2 = new Date().getTime();
|
|
110
129
|
console.log("[worker] done writing logs in ".concat(time2 - time1, "ms. total: ").concat(logscopy.length, ", lastId: ").concat(pk));
|
|
111
|
-
_context.next =
|
|
130
|
+
_context.next = 11;
|
|
112
131
|
break;
|
|
113
|
-
case
|
|
114
|
-
_context.prev =
|
|
115
|
-
_t2 = _context["catch"](
|
|
132
|
+
case 10:
|
|
133
|
+
_context.prev = 10;
|
|
134
|
+
_t2 = _context["catch"](8);
|
|
116
135
|
console.error("[worker] bulkPut ".concat(logscopy.length, " failed."), _t2);
|
|
117
|
-
case
|
|
136
|
+
case 11:
|
|
118
137
|
case "end":
|
|
119
138
|
return _context.stop();
|
|
120
139
|
}
|
|
121
|
-
}, _callee, null, [[1,
|
|
140
|
+
}, _callee, null, [[1, 7], [8, 10]]);
|
|
122
141
|
}))(), MAX_WAIT_TIME);
|
|
123
142
|
})["catch"](function (e) {
|
|
124
143
|
console.log('[worker] an error during dispatching writeLog', e);
|
|
@@ -128,14 +147,14 @@ var debouncedWriting = (0, _debounce["default"])(function () {
|
|
|
128
147
|
});
|
|
129
148
|
var collectLogs = exports.collectLogs = /*#__PURE__*/function () {
|
|
130
149
|
var _ref2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(self, callId, labels) {
|
|
131
|
-
var
|
|
150
|
+
var buffer, lastId, _createMultiEntryZip, addFile, finish, _iterator, _step, _loop, _t3, _t4;
|
|
132
151
|
return _regenerator["default"].wrap(function (_context3) {
|
|
133
152
|
while (1) switch (_context3.prev = _context3.next) {
|
|
134
153
|
case 0:
|
|
135
|
-
|
|
136
|
-
blob = new Blob();
|
|
154
|
+
buffer = new ArrayBuffer();
|
|
137
155
|
lastId = 0;
|
|
138
156
|
_context3.prev = 1;
|
|
157
|
+
_createMultiEntryZip = (0, _zip.createMultiEntryZip)(), addFile = _createMultiEntryZip.addFile, finish = _createMultiEntryZip.finish;
|
|
139
158
|
_iterator = _createForOfIteratorHelper(labels);
|
|
140
159
|
_context3.prev = 2;
|
|
141
160
|
_loop = /*#__PURE__*/_regenerator["default"].mark(function _loop() {
|
|
@@ -153,7 +172,7 @@ var collectLogs = exports.collectLogs = /*#__PURE__*/function () {
|
|
|
153
172
|
if (e.id > lastId) lastId = e.id;
|
|
154
173
|
});
|
|
155
174
|
case 1:
|
|
156
|
-
|
|
175
|
+
addFile("".concat(label, "-logs.txt"), logsStr);
|
|
157
176
|
console.log("[worker] collected ".concat(count, " logs by labels [").concat(label, "]."));
|
|
158
177
|
case 2:
|
|
159
178
|
case "end":
|
|
@@ -184,11 +203,9 @@ var collectLogs = exports.collectLogs = /*#__PURE__*/function () {
|
|
|
184
203
|
return _context3.finish(7);
|
|
185
204
|
case 8:
|
|
186
205
|
_context3.next = 9;
|
|
187
|
-
return
|
|
188
|
-
type: 'blob'
|
|
189
|
-
});
|
|
206
|
+
return finish();
|
|
190
207
|
case 9:
|
|
191
|
-
|
|
208
|
+
buffer = _context3.sent;
|
|
192
209
|
_context3.next = 11;
|
|
193
210
|
break;
|
|
194
211
|
case 10:
|
|
@@ -199,17 +216,13 @@ var collectLogs = exports.collectLogs = /*#__PURE__*/function () {
|
|
|
199
216
|
isSuccess: false
|
|
200
217
|
});
|
|
201
218
|
case 11:
|
|
202
|
-
console.log("[worker] completed collecting logs, compressed size: ".concat(
|
|
203
|
-
_context3.next = 12;
|
|
204
|
-
return blob.arrayBuffer();
|
|
205
|
-
case 12:
|
|
206
|
-
buffer = _context3.sent;
|
|
219
|
+
console.log("[worker] completed collecting logs, compressed size: ".concat(buffer.byteLength, " bytes."));
|
|
207
220
|
(0, _reply.reply)(self, callId, _constants.WorkerDirectives.COLLECT_LOGS, {
|
|
208
221
|
isSuccess: true,
|
|
209
222
|
buffer: buffer,
|
|
210
223
|
lastId: lastId
|
|
211
224
|
}, [buffer]);
|
|
212
|
-
case
|
|
225
|
+
case 12:
|
|
213
226
|
case "end":
|
|
214
227
|
return _context3.stop();
|
|
215
228
|
}
|