agora-foundation 1.0.0
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/decorator/bound/index.d.ts +5 -0
- package/lib/decorator/bound/index.js +19 -0
- package/lib/decorator/index.d.ts +3 -0
- package/lib/decorator/index.js +33 -0
- package/lib/decorator/lodash/index.d.ts +16 -0
- package/lib/decorator/lodash/index.js +42 -0
- package/lib/decorator/log/handler.d.ts +4 -0
- package/lib/decorator/log/handler.js +63 -0
- package/lib/decorator/log/index.d.ts +4 -0
- package/lib/decorator/log/index.js +38 -0
- package/lib/decorator/log/log-serializer.d.ts +8 -0
- package/lib/decorator/log/log-serializer.js +67 -0
- package/lib/decorator/proxy.d.ts +9 -0
- package/lib/decorator/proxy.js +154 -0
- package/lib/decorator/type.d.ts +16 -0
- package/lib/decorator/type.js +12 -0
- package/lib/logger/constants.d.ts +11 -0
- package/lib/logger/constants.js +11 -0
- package/lib/logger/hijack.d.ts +4 -0
- package/lib/logger/hijack.js +65 -0
- package/lib/logger/index.d.ts +8 -0
- package/lib/logger/index.js +70 -0
- package/lib/logger/logger-impl.d.ts +19 -0
- package/lib/logger/logger-impl.js +111 -0
- package/lib/logger/manager-impl.d.ts +8 -0
- package/lib/logger/manager-impl.js +67 -0
- package/lib/logger/type.d.ts +25 -0
- package/lib/logger/type.js +14 -0
- package/lib/schedule/index.d.ts +3 -0
- package/lib/schedule/index.js +25 -0
- package/lib/schedule/scheduler.d.ts +21 -0
- package/lib/schedule/scheduler.js +108 -0
- package/lib/schedule/task.d.ts +36 -0
- package/lib/schedule/task.js +167 -0
- package/lib/upload/index.d.ts +2 -0
- package/lib/upload/index.js +13 -0
- package/lib/upload/scheduler.d.ts +15 -0
- package/lib/upload/scheduler.js +114 -0
- package/lib/upload/type.d.ts +11 -0
- package/lib/upload/type.js +6 -0
- package/lib/utilities/async-retry.d.ts +63 -0
- package/lib/utilities/async-retry.js +180 -0
- package/lib/utilities/env.d.ts +12 -0
- package/lib/utilities/env.js +56 -0
- package/lib/utilities/events.d.ts +13 -0
- package/lib/utilities/events.js +114 -0
- package/lib/utilities/file-reader.d.ts +1 -0
- package/lib/utilities/file-reader.js +22 -0
- package/lib/utilities/interceptor.d.ts +6 -0
- package/lib/utilities/interceptor.js +28 -0
- package/lib/utilities/misc.d.ts +5 -0
- package/lib/utilities/misc.js +52 -0
- package/lib/utilities/observable.d.ts +11 -0
- package/lib/utilities/observable.js +73 -0
- package/lib/utilities/race-condition.d.ts +1 -0
- package/lib/utilities/race-condition.js +24 -0
- package/lib/utilities/value-check.d.ts +1 -0
- package/lib/utilities/value-check.js +10 -0
- package/lib/utilities/zip.d.ts +1 -0
- package/lib/utilities/zip.js +107 -0
- package/lib/worker/constants.d.ts +11 -0
- package/lib/worker/constants.js +19 -0
- package/lib/worker/handler/binary.d.ts +5 -0
- package/lib/worker/handler/binary.js +161 -0
- package/lib/worker/handler/db.d.ts +21 -0
- package/lib/worker/handler/db.js +42 -0
- package/lib/worker/handler/fs-log.d.ts +3 -0
- package/lib/worker/handler/fs-log.js +156 -0
- package/lib/worker/handler/log.d.ts +12 -0
- package/lib/worker/handler/log.js +246 -0
- package/lib/worker/handler/reply.d.ts +3 -0
- package/lib/worker/handler/reply.js +22 -0
- package/lib/worker/index.d.ts +2 -0
- package/lib/worker/index.js +15 -0
- package/lib/worker/interactor.d.ts +25 -0
- package/lib/worker/interactor.js +378 -0
- package/lib/worker/mutex.d.ts +5 -0
- package/lib/worker/mutex.js +65 -0
- package/lib/worker/type.d.ts +1 -0
- package/lib/worker/type.js +6 -0
- package/lib/worker/worker-entry.d.ts +1 -0
- package/lib/worker/worker-entry.js +5 -0
- package/lib/worker/worker-factory.d.ts +1 -0
- package/lib/worker/worker-factory.js +14 -0
- package/lib/worker/worker-installer.d.ts +2 -0
- package/lib/worker/worker-installer.js +72 -0
- package/package.json +29 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.WorkerInteractor = void 0;
|
|
9
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
require("core-js/modules/es.error.cause.js");
|
|
12
|
+
require("core-js/modules/es.error.to-string.js");
|
|
13
|
+
require("core-js/modules/es.date.now.js");
|
|
14
|
+
require("core-js/modules/es.function.bind.js");
|
|
15
|
+
require("core-js/modules/es.object.to-string.js");
|
|
16
|
+
require("core-js/modules/es.promise.js");
|
|
17
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
18
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
19
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
20
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
21
|
+
var _isNumber = _interopRequireDefault(require("lodash/isNumber"));
|
|
22
|
+
var _workerFactory = require("./worker-factory");
|
|
23
|
+
var _constants = require("./constants");
|
|
24
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
25
|
+
var _events = require("../utilities/events");
|
|
26
|
+
var _raceCondition = require("../utilities/race-condition");
|
|
27
|
+
var _excluded = ["isSuccess"];
|
|
28
|
+
var MAX_WAIT_TIME = 10000;
|
|
29
|
+
var WorkerInteractor = exports.WorkerInteractor = /*#__PURE__*/function () {
|
|
30
|
+
function WorkerInteractor() {
|
|
31
|
+
(0, _classCallCheck2["default"])(this, WorkerInteractor);
|
|
32
|
+
(0, _defineProperty2["default"])(this, "_eventEmitter", new _events.AgoraEventEmitter());
|
|
33
|
+
this._handleMessageCallback = this._handleMessageCallback.bind(this);
|
|
34
|
+
this._handleErrorCallback = this._handleErrorCallback.bind(this);
|
|
35
|
+
this._handleMessageErrorCallback = this._handleMessageErrorCallback.bind(this);
|
|
36
|
+
this._logWorker = this._spawnNewWorker();
|
|
37
|
+
this._attachEventHandlers();
|
|
38
|
+
}
|
|
39
|
+
return (0, _createClass2["default"])(WorkerInteractor, [{
|
|
40
|
+
key: "clearTempLogs",
|
|
41
|
+
value: function clearTempLogs() {
|
|
42
|
+
try {
|
|
43
|
+
return this._promisify({
|
|
44
|
+
type: _constants.WorkerDirectives.CLEAR_TEMP_LOGS,
|
|
45
|
+
data: {}
|
|
46
|
+
});
|
|
47
|
+
} catch (err) {
|
|
48
|
+
if (err.cause === 'timeout') {
|
|
49
|
+
throw new Error('[WorkerInteractor] failed to clear temp logs due to timeout error in worker', {
|
|
50
|
+
cause: err
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}, {
|
|
57
|
+
key: "setMaxRecords",
|
|
58
|
+
value: function () {
|
|
59
|
+
var _setMaxRecords = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(maxRecords) {
|
|
60
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
61
|
+
while (1) switch (_context.prev = _context.next) {
|
|
62
|
+
case 0:
|
|
63
|
+
_context.prev = 0;
|
|
64
|
+
if (!(0, _isNumber["default"])(maxRecords)) {
|
|
65
|
+
_context.next = 7;
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
console.info("[WorkerInteractor] set maxRecords to ".concat(maxRecords));
|
|
69
|
+
_context.next = 5;
|
|
70
|
+
return this._promisify({
|
|
71
|
+
type: _constants.WorkerDirectives.SET_MAX_RECORDS,
|
|
72
|
+
data: {
|
|
73
|
+
maxRecords: maxRecords
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
case 5:
|
|
77
|
+
_context.next = 8;
|
|
78
|
+
break;
|
|
79
|
+
case 7:
|
|
80
|
+
console.warn("[WorkerInteractor] cannot set maxRecords to an invalid number :".concat(maxRecords));
|
|
81
|
+
case 8:
|
|
82
|
+
_context.next = 15;
|
|
83
|
+
break;
|
|
84
|
+
case 10:
|
|
85
|
+
_context.prev = 10;
|
|
86
|
+
_context.t0 = _context["catch"](0);
|
|
87
|
+
if (!(_context.t0.cause === 'timeout')) {
|
|
88
|
+
_context.next = 14;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
throw new Error('[WorkerInteractor] failed to set maxRecords due to timeout error in worker', {
|
|
92
|
+
cause: _context.t0
|
|
93
|
+
});
|
|
94
|
+
case 14:
|
|
95
|
+
throw _context.t0;
|
|
96
|
+
case 15:
|
|
97
|
+
case "end":
|
|
98
|
+
return _context.stop();
|
|
99
|
+
}
|
|
100
|
+
}, _callee, this, [[0, 10]]);
|
|
101
|
+
}));
|
|
102
|
+
function setMaxRecords(_x) {
|
|
103
|
+
return _setMaxRecords.apply(this, arguments);
|
|
104
|
+
}
|
|
105
|
+
return setMaxRecords;
|
|
106
|
+
}()
|
|
107
|
+
}, {
|
|
108
|
+
key: "sendLog",
|
|
109
|
+
value: function sendLog(message, label) {
|
|
110
|
+
this._logWorker.postMessage({
|
|
111
|
+
type: _constants.WorkerDirectives.WRITE_LOG,
|
|
112
|
+
data: {
|
|
113
|
+
label: label,
|
|
114
|
+
message: message
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}, {
|
|
119
|
+
key: "collectLogs",
|
|
120
|
+
value: function () {
|
|
121
|
+
var _collectLogs = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(labels) {
|
|
122
|
+
var _yield$this$_promisif, buffer, lastId, datefmt, file;
|
|
123
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
124
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
125
|
+
case 0:
|
|
126
|
+
_context2.prev = 0;
|
|
127
|
+
_context2.next = 3;
|
|
128
|
+
return this._promisify({
|
|
129
|
+
type: _constants.WorkerDirectives.COLLECT_LOGS,
|
|
130
|
+
data: {
|
|
131
|
+
labels: labels
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
case 3:
|
|
135
|
+
_yield$this$_promisif = _context2.sent;
|
|
136
|
+
buffer = _yield$this$_promisif.buffer;
|
|
137
|
+
lastId = _yield$this$_promisif.lastId;
|
|
138
|
+
datefmt = (0, _dayjs["default"])().format('YYYY-MM-DDTHH:mm:ssZ[Z]');
|
|
139
|
+
file = new File([buffer], "logs-".concat(datefmt, ".zip"), {
|
|
140
|
+
type: 'application/zip'
|
|
141
|
+
});
|
|
142
|
+
return _context2.abrupt("return", {
|
|
143
|
+
file: file,
|
|
144
|
+
lastId: lastId
|
|
145
|
+
});
|
|
146
|
+
case 11:
|
|
147
|
+
_context2.prev = 11;
|
|
148
|
+
_context2.t0 = _context2["catch"](0);
|
|
149
|
+
if (!(_context2.t0.cause === 'timeout')) {
|
|
150
|
+
_context2.next = 15;
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
throw new Error('[WorkerInteractor] failed to collect logs due to timeout error in worker', {
|
|
154
|
+
cause: _context2.t0
|
|
155
|
+
});
|
|
156
|
+
case 15:
|
|
157
|
+
throw _context2.t0;
|
|
158
|
+
case 16:
|
|
159
|
+
case "end":
|
|
160
|
+
return _context2.stop();
|
|
161
|
+
}
|
|
162
|
+
}, _callee2, this, [[0, 11]]);
|
|
163
|
+
}));
|
|
164
|
+
function collectLogs(_x2) {
|
|
165
|
+
return _collectLogs.apply(this, arguments);
|
|
166
|
+
}
|
|
167
|
+
return collectLogs;
|
|
168
|
+
}()
|
|
169
|
+
}, {
|
|
170
|
+
key: "deleteLogs",
|
|
171
|
+
value: function deleteLogs(labels, lastId) {
|
|
172
|
+
try {
|
|
173
|
+
return this._promisify({
|
|
174
|
+
type: _constants.WorkerDirectives.DELETE_LOGS,
|
|
175
|
+
data: {
|
|
176
|
+
labels: labels,
|
|
177
|
+
lastId: lastId
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
} catch (err) {
|
|
181
|
+
if (err.cause === 'timeout') {
|
|
182
|
+
throw new Error('[WorkerInteractor] failed to delete logs due to timeout error in worker', {
|
|
183
|
+
cause: err
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
throw err;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}, {
|
|
190
|
+
key: "persistBinary",
|
|
191
|
+
value: function persistBinary(id, buffer) {
|
|
192
|
+
try {
|
|
193
|
+
return this._promisify({
|
|
194
|
+
type: _constants.WorkerDirectives.PERSIST_BUFFER,
|
|
195
|
+
data: {
|
|
196
|
+
id: id,
|
|
197
|
+
buffer: buffer
|
|
198
|
+
}
|
|
199
|
+
}, [buffer]);
|
|
200
|
+
} catch (err) {
|
|
201
|
+
if (err.cause === 'timeout') {
|
|
202
|
+
throw new Error('[WorkerInteractor] failed to persist binary due to timeout error in worker', {
|
|
203
|
+
cause: err
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
throw err;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}, {
|
|
210
|
+
key: "unpersistBinary",
|
|
211
|
+
value: function unpersistBinary(id) {
|
|
212
|
+
try {
|
|
213
|
+
return this._promisify({
|
|
214
|
+
type: _constants.WorkerDirectives.UNPERSIST_BUFFER,
|
|
215
|
+
data: {
|
|
216
|
+
id: id
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
} catch (err) {
|
|
220
|
+
if (err.cause === 'timeout') {
|
|
221
|
+
throw new Error('[WorkerInteractor] failed to unpersist binary due to timeout error in worker', {
|
|
222
|
+
cause: err
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
throw err;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}, {
|
|
229
|
+
key: "getBinary",
|
|
230
|
+
value: function () {
|
|
231
|
+
var _getBinary = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(id) {
|
|
232
|
+
var _yield$this$_promisif2, buffer;
|
|
233
|
+
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
234
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
235
|
+
case 0:
|
|
236
|
+
_context3.prev = 0;
|
|
237
|
+
_context3.next = 3;
|
|
238
|
+
return this._promisify({
|
|
239
|
+
type: _constants.WorkerDirectives.GET_BUFFER,
|
|
240
|
+
data: {
|
|
241
|
+
id: id
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
case 3:
|
|
245
|
+
_yield$this$_promisif2 = _context3.sent;
|
|
246
|
+
buffer = _yield$this$_promisif2.buffer;
|
|
247
|
+
return _context3.abrupt("return", buffer);
|
|
248
|
+
case 8:
|
|
249
|
+
_context3.prev = 8;
|
|
250
|
+
_context3.t0 = _context3["catch"](0);
|
|
251
|
+
if (!(_context3.t0.cause === 'timeout')) {
|
|
252
|
+
_context3.next = 12;
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
throw new Error('[WorkerInteractor] failed to get binary due to timeout error in worker', {
|
|
256
|
+
cause: _context3.t0
|
|
257
|
+
});
|
|
258
|
+
case 12:
|
|
259
|
+
throw _context3.t0;
|
|
260
|
+
case 13:
|
|
261
|
+
case "end":
|
|
262
|
+
return _context3.stop();
|
|
263
|
+
}
|
|
264
|
+
}, _callee3, this, [[0, 8]]);
|
|
265
|
+
}));
|
|
266
|
+
function getBinary(_x3) {
|
|
267
|
+
return _getBinary.apply(this, arguments);
|
|
268
|
+
}
|
|
269
|
+
return getBinary;
|
|
270
|
+
}()
|
|
271
|
+
}, {
|
|
272
|
+
key: "collectLogsOnFs",
|
|
273
|
+
value: function () {
|
|
274
|
+
var _collectLogsOnFs = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(logDirPath) {
|
|
275
|
+
var _yield$this$_promisif3, buffer, datefmt, file;
|
|
276
|
+
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
277
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
278
|
+
case 0:
|
|
279
|
+
_context4.next = 2;
|
|
280
|
+
return this._promisify({
|
|
281
|
+
type: _constants.WorkerDirectives.COLLECT_LOGS_ON_FS,
|
|
282
|
+
data: {
|
|
283
|
+
logDirPath: logDirPath
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
case 2:
|
|
287
|
+
_yield$this$_promisif3 = _context4.sent;
|
|
288
|
+
buffer = _yield$this$_promisif3.buffer;
|
|
289
|
+
datefmt = (0, _dayjs["default"])().format('YYYY-MM-DDTHH:mm:ssZ[Z]');
|
|
290
|
+
file = new File([buffer], "logs-".concat(datefmt, ".zip"), {
|
|
291
|
+
type: 'application/zip'
|
|
292
|
+
});
|
|
293
|
+
return _context4.abrupt("return", file);
|
|
294
|
+
case 7:
|
|
295
|
+
case "end":
|
|
296
|
+
return _context4.stop();
|
|
297
|
+
}
|
|
298
|
+
}, _callee4, this);
|
|
299
|
+
}));
|
|
300
|
+
function collectLogsOnFs(_x4) {
|
|
301
|
+
return _collectLogsOnFs.apply(this, arguments);
|
|
302
|
+
}
|
|
303
|
+
return collectLogsOnFs;
|
|
304
|
+
}()
|
|
305
|
+
}, {
|
|
306
|
+
key: "_handleMessageCallback",
|
|
307
|
+
value: function _handleMessageCallback(message) {
|
|
308
|
+
var _message$data = message.data,
|
|
309
|
+
type = _message$data.type,
|
|
310
|
+
callId = _message$data.callId,
|
|
311
|
+
data = _message$data.data;
|
|
312
|
+
var isSuccess = data.isSuccess,
|
|
313
|
+
payload = (0, _objectWithoutProperties2["default"])(data, _excluded);
|
|
314
|
+
this._eventEmitter.emit(type, isSuccess, callId, payload);
|
|
315
|
+
}
|
|
316
|
+
}, {
|
|
317
|
+
key: "_handleErrorCallback",
|
|
318
|
+
value: function _handleErrorCallback(e) {
|
|
319
|
+
console.error('[WorkerInteractor] error occurred in worker:', e);
|
|
320
|
+
}
|
|
321
|
+
}, {
|
|
322
|
+
key: "_handleMessageErrorCallback",
|
|
323
|
+
value: function _handleMessageErrorCallback() {
|
|
324
|
+
console.error('[WorkerInteractor] worker message cannot be deserialized.');
|
|
325
|
+
}
|
|
326
|
+
}, {
|
|
327
|
+
key: "_attachEventHandlers",
|
|
328
|
+
value: function _attachEventHandlers() {
|
|
329
|
+
this._logWorker.addEventListener('message', this._handleMessageCallback);
|
|
330
|
+
this._logWorker.addEventListener('error', this._handleErrorCallback);
|
|
331
|
+
this._logWorker.addEventListener('messageerror', this._handleMessageErrorCallback);
|
|
332
|
+
}
|
|
333
|
+
}, {
|
|
334
|
+
key: "_spawnNewWorker",
|
|
335
|
+
value: function _spawnNewWorker() {
|
|
336
|
+
console.info('[WorkerInteractor] spawned a new log worker');
|
|
337
|
+
var logWorker = (0, _workerFactory.createWorkerInstance)();
|
|
338
|
+
return logWorker;
|
|
339
|
+
}
|
|
340
|
+
}, {
|
|
341
|
+
key: "_promisify",
|
|
342
|
+
value: function _promisify(payload, transfer) {
|
|
343
|
+
var _this = this;
|
|
344
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
345
|
+
var _callback = function callback(_, __, ___) {};
|
|
346
|
+
var type = payload.type,
|
|
347
|
+
data = payload.data;
|
|
348
|
+
return (0, _raceCondition.timeout)(new Promise(function (resolve, reject) {
|
|
349
|
+
var callId = Date.now();
|
|
350
|
+
_callback = function callback(isSuccess, replyId, result) {
|
|
351
|
+
if (callId !== replyId) {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
_this._eventEmitter.off(type, _callback);
|
|
355
|
+
if (isSuccess) {
|
|
356
|
+
resolve(result);
|
|
357
|
+
} else {
|
|
358
|
+
reject("failed to ".concat(payload.type));
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
_this._eventEmitter.on(type, _callback);
|
|
362
|
+
if (transfer) {
|
|
363
|
+
_this._logWorker.postMessage({
|
|
364
|
+
type: type,
|
|
365
|
+
callId: callId,
|
|
366
|
+
data: data
|
|
367
|
+
}, transfer);
|
|
368
|
+
} else {
|
|
369
|
+
_this._logWorker.postMessage({
|
|
370
|
+
type: type,
|
|
371
|
+
callId: callId,
|
|
372
|
+
data: data
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
}), MAX_WAIT_TIME);
|
|
376
|
+
}
|
|
377
|
+
}]);
|
|
378
|
+
}();
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.Mutex = void 0;
|
|
9
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
|
+
require("core-js/modules/es.object.to-string.js");
|
|
11
|
+
require("core-js/modules/es.promise.js");
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
14
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
var Mutex = exports.Mutex = /*#__PURE__*/function () {
|
|
17
|
+
function Mutex() {
|
|
18
|
+
(0, _classCallCheck2["default"])(this, Mutex);
|
|
19
|
+
(0, _defineProperty2["default"])(this, "mutex", Promise.resolve());
|
|
20
|
+
}
|
|
21
|
+
return (0, _createClass2["default"])(Mutex, [{
|
|
22
|
+
key: "_lock",
|
|
23
|
+
value: function _lock() {
|
|
24
|
+
var begin = function begin() {};
|
|
25
|
+
this.mutex = this.mutex.then(function () {
|
|
26
|
+
return new Promise(begin);
|
|
27
|
+
});
|
|
28
|
+
return new Promise(function (res) {
|
|
29
|
+
begin = res;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}, {
|
|
33
|
+
key: "dispatch",
|
|
34
|
+
value: function () {
|
|
35
|
+
var _dispatch = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(fn) {
|
|
36
|
+
var unlock;
|
|
37
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
38
|
+
while (1) switch (_context.prev = _context.next) {
|
|
39
|
+
case 0:
|
|
40
|
+
_context.next = 2;
|
|
41
|
+
return this._lock();
|
|
42
|
+
case 2:
|
|
43
|
+
unlock = _context.sent;
|
|
44
|
+
_context.prev = 3;
|
|
45
|
+
_context.next = 6;
|
|
46
|
+
return Promise.resolve(fn());
|
|
47
|
+
case 6:
|
|
48
|
+
return _context.abrupt("return", _context.sent);
|
|
49
|
+
case 7:
|
|
50
|
+
_context.prev = 7;
|
|
51
|
+
unlock();
|
|
52
|
+
return _context.finish(7);
|
|
53
|
+
case 10:
|
|
54
|
+
case "end":
|
|
55
|
+
return _context.stop();
|
|
56
|
+
}
|
|
57
|
+
}, _callee, this, [[3,, 7, 10]]);
|
|
58
|
+
}));
|
|
59
|
+
function dispatch(_x) {
|
|
60
|
+
return _dispatch.apply(this, arguments);
|
|
61
|
+
}
|
|
62
|
+
return dispatch;
|
|
63
|
+
}()
|
|
64
|
+
}]);
|
|
65
|
+
}();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type WorkerContext = Pick<typeof globalThis, 'postMessage' | 'addEventListener' | 'removeEventListener'>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createWorkerInstance: () => Worker;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.createWorkerInstance = void 0;
|
|
9
|
+
var _workerEntry = _interopRequireDefault(require("./worker-entry"));
|
|
10
|
+
//@ts-ignore
|
|
11
|
+
|
|
12
|
+
var createWorkerInstance = exports.createWorkerInstance = function createWorkerInstance() {
|
|
13
|
+
return new _workerEntry["default"]();
|
|
14
|
+
};
|
|
@@ -0,0 +1,72 @@
|
|
|
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.installHandler = void 0;
|
|
8
|
+
require("core-js/modules/es.date.now.js");
|
|
9
|
+
require("core-js/modules/es.date.to-string.js");
|
|
10
|
+
var _log = require("./handler/log");
|
|
11
|
+
var _binary = require("./handler/binary");
|
|
12
|
+
var _fsLog = require("./handler/fs-log");
|
|
13
|
+
var _constants = require("./constants");
|
|
14
|
+
var _reply = require("./handler/reply");
|
|
15
|
+
var installHandler = exports.installHandler = function installHandler(self) {
|
|
16
|
+
console.log("[worker] worker initialzied.");
|
|
17
|
+
self.addEventListener("message", function (evt) {
|
|
18
|
+
if (evt.data) {
|
|
19
|
+
var _evt$data = evt.data,
|
|
20
|
+
type = _evt$data.type,
|
|
21
|
+
callId = _evt$data.callId;
|
|
22
|
+
if (type === _constants.WorkerDirectives.WRITE_LOG) {
|
|
23
|
+
var now = new Date();
|
|
24
|
+
var _evt$data$data = evt.data.data,
|
|
25
|
+
label = _evt$data$data.label,
|
|
26
|
+
message = _evt$data$data.message;
|
|
27
|
+
(0, _log.writeLog)(self, callId, {
|
|
28
|
+
label: label,
|
|
29
|
+
content: message,
|
|
30
|
+
created_at: +Date.now(),
|
|
31
|
+
timestamp: "".concat(now)
|
|
32
|
+
});
|
|
33
|
+
} else if (type === _constants.WorkerDirectives.SET_MAX_RECORDS) {
|
|
34
|
+
(0, _log.setMaxRecords)(self, callId, evt.data.data.maxRecords || 50000);
|
|
35
|
+
} else if (type === _constants.WorkerDirectives.COLLECT_LOGS) {
|
|
36
|
+
var _evt$data$data$labels = evt.data.data.labels,
|
|
37
|
+
labels = _evt$data$data$labels === void 0 ? [] : _evt$data$data$labels;
|
|
38
|
+
(0, _log.collectLogs)(self, callId, labels);
|
|
39
|
+
} else if (type === _constants.WorkerDirectives.DELETE_LOGS) {
|
|
40
|
+
var _evt$data$data2 = evt.data.data,
|
|
41
|
+
_evt$data$data2$label = _evt$data$data2.labels,
|
|
42
|
+
_labels = _evt$data$data2$label === void 0 ? [] : _evt$data$data2$label,
|
|
43
|
+
lastId = _evt$data$data2.lastId;
|
|
44
|
+
(0, _log.deleteLogs)(self, callId, _labels, lastId);
|
|
45
|
+
} else if (type === _constants.WorkerDirectives.PERSIST_BUFFER) {
|
|
46
|
+
var _evt$data$data3 = evt.data.data,
|
|
47
|
+
id = _evt$data$data3.id,
|
|
48
|
+
buffer = _evt$data$data3.buffer;
|
|
49
|
+
(0, _binary.persistBinary)(self, callId, id, new Blob([buffer]));
|
|
50
|
+
} else if (type === _constants.WorkerDirectives.UNPERSIST_BUFFER) {
|
|
51
|
+
var _id = evt.data.data.id;
|
|
52
|
+
(0, _binary.unpersistBinary)(self, callId, _id);
|
|
53
|
+
} else if (type === _constants.WorkerDirectives.GET_BUFFER) {
|
|
54
|
+
var _id2 = evt.data.data.id;
|
|
55
|
+
(0, _binary.getBuffer)(self, callId, _id2);
|
|
56
|
+
} else if (type === _constants.WorkerDirectives.CLEAR_TEMP_LOGS) {
|
|
57
|
+
(0, _binary.clearTempLogs)(self, callId);
|
|
58
|
+
} else if (type === _constants.WorkerDirectives.COLLECT_LOGS_ON_FS) {
|
|
59
|
+
var logDirPath = evt.data.data.logDirPath;
|
|
60
|
+
(0, _fsLog.collectLogsOnFs)(self, callId, logDirPath);
|
|
61
|
+
} else {
|
|
62
|
+
unsupported(self, callId, type);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
var unsupported = function unsupported(self, callId, directive) {
|
|
68
|
+
(0, _reply.reply)(self, callId, directive, {
|
|
69
|
+
isSuccess: false,
|
|
70
|
+
message: "unsupported directive: ".concat(directive)
|
|
71
|
+
});
|
|
72
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "agora-foundation",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"build": "agora-tc-transpile",
|
|
7
|
+
"test-browser": "agora-tc-test-karma-browser"
|
|
8
|
+
},
|
|
9
|
+
"devDependencies": {
|
|
10
|
+
"@babel/core": "^7.23.5",
|
|
11
|
+
"@babel/plugin-proposal-decorators": "^7.23.5",
|
|
12
|
+
"@babel/plugin-transform-runtime": "^7.13.15",
|
|
13
|
+
"@babel/preset-env": "^7.23.5",
|
|
14
|
+
"@babel/preset-react": "^7.24.1",
|
|
15
|
+
"@babel/preset-typescript": "^7.23.3",
|
|
16
|
+
"core-js": "^3.33.3",
|
|
17
|
+
"@types/jasmine": "^5.1.4",
|
|
18
|
+
"@types/lodash": "^4.14.168",
|
|
19
|
+
"@types/node": "^20.11.30",
|
|
20
|
+
"tslib": "^2.6.2"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"async-await-retry": "^2.0.1",
|
|
24
|
+
"dayjs": "^1.10.4",
|
|
25
|
+
"dexie": "^3.0.3",
|
|
26
|
+
"jszip": "^3.10.1",
|
|
27
|
+
"lodash": "^4.17.21"
|
|
28
|
+
}
|
|
29
|
+
}
|