@yuants/vendor-okx 0.23.19 → 0.23.20
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/package.json +14 -15
- package/temp/package-deps.json +17 -19
- package/dist/cluster.js +0 -80
- package/dist/cluster.js.map +0 -1
- package/lib/cluster.d.ts +0 -2
- package/lib/cluster.d.ts.map +0 -1
- package/lib/cluster.js +0 -108
- package/lib/cluster.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuants/vendor-okx",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.20",
|
|
4
4
|
"bin": "lib/cli.js",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"files": [
|
|
@@ -9,19 +9,18 @@
|
|
|
9
9
|
"temp"
|
|
10
10
|
],
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@yuants/protocol": "0.49.
|
|
13
|
-
"@yuants/transfer": "0.2.
|
|
14
|
-
"@yuants/data-account": "0.6.
|
|
15
|
-
"@yuants/data-order": "0.3.
|
|
16
|
-
"@yuants/utils": "0.
|
|
17
|
-
"@yuants/sql": "0.9.
|
|
18
|
-
"@yuants/data-series": "0.3.
|
|
19
|
-
"@yuants/data-product": "0.4.
|
|
20
|
-
"@yuants/data-ohlc": "0.4.
|
|
21
|
-
"@yuants/data-interest-rate": "0.1.
|
|
22
|
-
"@yuants/data-quote": "0.2.
|
|
23
|
-
"@yuants/data-trade": "0.1.
|
|
24
|
-
"@yuants/secret": "0.2.22",
|
|
12
|
+
"@yuants/protocol": "0.49.1",
|
|
13
|
+
"@yuants/transfer": "0.2.28",
|
|
14
|
+
"@yuants/data-account": "0.6.9",
|
|
15
|
+
"@yuants/data-order": "0.3.7",
|
|
16
|
+
"@yuants/utils": "0.10.0",
|
|
17
|
+
"@yuants/sql": "0.9.19",
|
|
18
|
+
"@yuants/data-series": "0.3.40",
|
|
19
|
+
"@yuants/data-product": "0.4.10",
|
|
20
|
+
"@yuants/data-ohlc": "0.4.11",
|
|
21
|
+
"@yuants/data-interest-rate": "0.1.37",
|
|
22
|
+
"@yuants/data-quote": "0.2.32",
|
|
23
|
+
"@yuants/data-trade": "0.1.10",
|
|
25
24
|
"rxjs": "~7.5.6",
|
|
26
25
|
"crypto-js": "^4.2.0",
|
|
27
26
|
"ws": "~8.8.1"
|
|
@@ -33,7 +32,7 @@
|
|
|
33
32
|
"@rushstack/heft-node-rig": "~1.10.7",
|
|
34
33
|
"@types/heft-jest": "1.0.3",
|
|
35
34
|
"@types/node": "22",
|
|
36
|
-
"@yuants/extension": "0.2.
|
|
35
|
+
"@yuants/extension": "0.2.26",
|
|
37
36
|
"@yuants/tool-kit": "0.2.0",
|
|
38
37
|
"typescript": "~4.7.4",
|
|
39
38
|
"ts-node": "~10.9.2",
|
package/temp/package-deps.json
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
{
|
|
2
|
-
"apps/vendor-okx/CHANGELOG.json": "
|
|
3
|
-
"apps/vendor-okx/CHANGELOG.md": "
|
|
2
|
+
"apps/vendor-okx/CHANGELOG.json": "8d85c89adfc3edf9d42fa543c58b8ef2a4ce9149",
|
|
3
|
+
"apps/vendor-okx/CHANGELOG.md": "baa03221efa58c6b09441bde5ed2377009234538",
|
|
4
4
|
"apps/vendor-okx/README.md": "ac3d1f6c4c8d73066664699b0bb1b01db02e67a2",
|
|
5
5
|
"apps/vendor-okx/api-extractor.json": "62f4fd324425b9a235f0c117975967aab09ced0c",
|
|
6
6
|
"apps/vendor-okx/config/jest.config.json": "4bb17bde3ee911163a3edb36a6eb71491d80b1bd",
|
|
7
7
|
"apps/vendor-okx/config/rig.json": "f6c7b5537dc77a3170ba9f008bae3b6c3ee11956",
|
|
8
8
|
"apps/vendor-okx/config/typescript.json": "854907e8a821f2050f6533368db160c649c25348",
|
|
9
9
|
"apps/vendor-okx/etc/vendor-okx.api.md": "92c54ccd547d2ad81ca6088158ca193e85c208df",
|
|
10
|
-
"apps/vendor-okx/package.json": "
|
|
10
|
+
"apps/vendor-okx/package.json": "0404705b48ecc71f9eb9b4e7c4b5d2e8a80c421a",
|
|
11
11
|
"apps/vendor-okx/src/account.ts": "dc7dcb268cda38869c8ba4af5dbdb608aa1cbe77",
|
|
12
12
|
"apps/vendor-okx/src/api.ts": "1ed5d9e4a758523e5f97183a1e6377bed0d75493",
|
|
13
13
|
"apps/vendor-okx/src/cli.ts": "9bf6b5559a6c6f33da20e74cc6c5d702c60ec891",
|
|
14
|
-
"apps/vendor-okx/src/cluster.ts": "9971d8d5e6af16e09d2d1fe5e9f05ccee87281e8",
|
|
15
14
|
"apps/vendor-okx/src/index.ts": "21c3f194a9572692a949bb307005baf87141fbfb",
|
|
16
15
|
"apps/vendor-okx/src/interest_rate.ts": "cf3a12813e8703add74de929d5ddda0bf3e7b45f",
|
|
17
16
|
"apps/vendor-okx/src/legacy_index.ts": "e46abcfaa52f957ce5e8c42ca26cd0fc2c576965",
|
|
@@ -30,20 +29,19 @@
|
|
|
30
29
|
"apps/vendor-okx/src/websocket.ts": "6c0199bbb9db714ec96b59d90b35b3c801975194",
|
|
31
30
|
"apps/vendor-okx/src/ws.ts": "7aa1561c8c524dee838817eaeda5031d389ec877",
|
|
32
31
|
"apps/vendor-okx/tsconfig.json": "81da8f78196974b5d15da0edb6b2d9f48641063c",
|
|
33
|
-
"apps/vendor-okx/.rush/temp/shrinkwrap-deps.json": "
|
|
34
|
-
"libraries/protocol/temp/package-deps.json": "
|
|
35
|
-
"libraries/transfer/temp/package-deps.json": "
|
|
36
|
-
"libraries/data-account/temp/package-deps.json": "
|
|
37
|
-
"libraries/data-order/temp/package-deps.json": "
|
|
38
|
-
"libraries/utils/temp/package-deps.json": "
|
|
39
|
-
"libraries/sql/temp/package-deps.json": "
|
|
40
|
-
"libraries/data-series/temp/package-deps.json": "
|
|
41
|
-
"libraries/data-product/temp/package-deps.json": "
|
|
42
|
-
"libraries/data-ohlc/temp/package-deps.json": "
|
|
43
|
-
"libraries/data-interest-rate/temp/package-deps.json": "
|
|
44
|
-
"libraries/data-quote/temp/package-deps.json": "
|
|
45
|
-
"libraries/data-trade/temp/package-deps.json": "
|
|
46
|
-
"libraries/
|
|
47
|
-
"libraries/extension/temp/package-deps.json": "89316671ad698642d396774cf743dbe240cdbddc",
|
|
32
|
+
"apps/vendor-okx/.rush/temp/shrinkwrap-deps.json": "eec75f84f913f6d956cbd3436df448790c76a85d",
|
|
33
|
+
"libraries/protocol/temp/package-deps.json": "0a3f80906e99efffe686a474d0f15c9410ee8874",
|
|
34
|
+
"libraries/transfer/temp/package-deps.json": "d73a9ba8f08848ccf0aa1ae8f1debc0d6862325b",
|
|
35
|
+
"libraries/data-account/temp/package-deps.json": "bfa01200dc996e34f59d2768caf5077467df5573",
|
|
36
|
+
"libraries/data-order/temp/package-deps.json": "3a98bb6bed777858bc9b6a6ab4067fd86cddd6cf",
|
|
37
|
+
"libraries/utils/temp/package-deps.json": "00132af02f003a95edfc2b9e1e9ec298a59fb89c",
|
|
38
|
+
"libraries/sql/temp/package-deps.json": "1d1d91dcd9a6cc28f3309fe7fd45de952aacb4fb",
|
|
39
|
+
"libraries/data-series/temp/package-deps.json": "678eae040552d81b455284857d187123decd832d",
|
|
40
|
+
"libraries/data-product/temp/package-deps.json": "722dbd45b5a7433c9fa26e450c39a2b5f9d7045f",
|
|
41
|
+
"libraries/data-ohlc/temp/package-deps.json": "3403664dcd950637b25c293f2699453bcff384d0",
|
|
42
|
+
"libraries/data-interest-rate/temp/package-deps.json": "2ecad524c89f84f7b8528305ac396080d2ab1b07",
|
|
43
|
+
"libraries/data-quote/temp/package-deps.json": "54b24d1649fab8db58f9b19c1b43a7c63c62533c",
|
|
44
|
+
"libraries/data-trade/temp/package-deps.json": "030f3a49a374665203bbbd08885eaf148c6fca4f",
|
|
45
|
+
"libraries/extension/temp/package-deps.json": "baf08ab93278543b640b68f31261ffd3705bd9e7",
|
|
48
46
|
"tools/toolkit/temp/package-deps.json": "3bef053db16659f0cdaceea64c8a8580c0131633"
|
|
49
47
|
}
|
package/dist/cluster.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { Terminal } from '@yuants/protocol';
|
|
2
|
-
import { loadSecrets } from '@yuants/secret';
|
|
3
|
-
import { formatTime, listWatch } from '@yuants/utils';
|
|
4
|
-
import cluster from 'cluster';
|
|
5
|
-
import { bufferTime, defer, filter, map, Observable, repeat, retry, Subject, tap } from 'rxjs';
|
|
6
|
-
import { overrideConsole } from './logger';
|
|
7
|
-
overrideConsole();
|
|
8
|
-
if (cluster.isPrimary) {
|
|
9
|
-
console.info(`[Primary] ${formatTime(Date.now())} This is the primary process`);
|
|
10
|
-
const logBuffer = new Subject();
|
|
11
|
-
logBuffer
|
|
12
|
-
.pipe(
|
|
13
|
-
//
|
|
14
|
-
bufferTime(100), map((v) => v.join('\n')), filter((v) => v.trim() !== ''))
|
|
15
|
-
.subscribe((message) => {
|
|
16
|
-
console.info(message);
|
|
17
|
-
});
|
|
18
|
-
defer(() => loadSecrets({
|
|
19
|
-
terminal: Terminal.fromNodeEnv(),
|
|
20
|
-
encryption_key_base58: process.env.ENCRYPTION_KEY_BASE58,
|
|
21
|
-
}))
|
|
22
|
-
.pipe(
|
|
23
|
-
//
|
|
24
|
-
tap({
|
|
25
|
-
error: (e) => {
|
|
26
|
-
console.error(`[Primary] ${formatTime(Date.now())} Failed to load secrets`, e);
|
|
27
|
-
},
|
|
28
|
-
}), retry({ delay: 5000 }), repeat({ delay: 5000 }))
|
|
29
|
-
.pipe(listWatch((x) => x.secret.id, (account) => defer(() => new Observable((subscriber) => {
|
|
30
|
-
console.info(formatTime(Date.now()), `[Primary] ${formatTime(Date.now())} Starting worker for account ${account.secret.public_data.name} (${account.secret.id})`);
|
|
31
|
-
if (account.secret.public_data.type !== 'api_key_okx')
|
|
32
|
-
return;
|
|
33
|
-
if (!account.secret.public_data.name)
|
|
34
|
-
return;
|
|
35
|
-
if (!account.decrypted_data)
|
|
36
|
-
return;
|
|
37
|
-
if (!account.decrypted_data.access_key)
|
|
38
|
-
return;
|
|
39
|
-
if (!account.decrypted_data.secret_key)
|
|
40
|
-
return;
|
|
41
|
-
if (!account.decrypted_data.passphrase)
|
|
42
|
-
return;
|
|
43
|
-
const worker = cluster.fork({
|
|
44
|
-
ENCRYPTION_KEY_BASE58: '',
|
|
45
|
-
ACCESS_KEY: account.decrypted_data.access_key,
|
|
46
|
-
SECRET_KEY: account.decrypted_data.secret_key,
|
|
47
|
-
PASSPHRASE: account.decrypted_data.passphrase,
|
|
48
|
-
WRITE_QUOTE_TO_SQL: account.secret.public_data.write_quote_to_sql ? 'true' : 'false',
|
|
49
|
-
TERMINAL_ID: `@yuants/vendor-okx/worker/${account.secret.public_data.name}`,
|
|
50
|
-
WORKER_LABEL: account.secret.public_data.name,
|
|
51
|
-
});
|
|
52
|
-
worker.on('message', (message) => {
|
|
53
|
-
if (message.type === 'log') {
|
|
54
|
-
logBuffer.next(`[Worker ${worker.process.pid} ${message.label}] ${message.level}: ${message.message}`);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
worker.on('exit', (code, signal) => {
|
|
58
|
-
if (code === 0) {
|
|
59
|
-
console.info(`[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} exited gracefully`);
|
|
60
|
-
subscriber.complete();
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
console.error(`[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} exited with code ${code} and signal ${signal}`);
|
|
64
|
-
subscriber.error(new Error(`Worker ${worker.process.pid} exited with code ${code} and signal ${signal}`));
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
return () => {
|
|
68
|
-
worker.kill();
|
|
69
|
-
console.info(`[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} killed`);
|
|
70
|
-
};
|
|
71
|
-
})).pipe(
|
|
72
|
-
//
|
|
73
|
-
retry({ delay: 1000 }), repeat({ delay: 1000 })), (a, b) => a.secret.updated_at === b.secret.updated_at))
|
|
74
|
-
.subscribe();
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
console.info(`${formatTime(Date.now())} This is the worker process`, process.pid, process.env);
|
|
78
|
-
import('./index');
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=cluster.js.map
|
package/dist/cluster.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../src/cluster.ts"],"names":[],"mappings":"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","sourcesContent":["import { Terminal } from '@yuants/protocol';\nimport { loadSecrets } from '@yuants/secret';\nimport { formatTime, listWatch } from '@yuants/utils';\nimport cluster from 'cluster';\nimport { bufferTime, defer, filter, map, Observable, repeat, retry, Subject, tap } from 'rxjs';\nimport { overrideConsole } from './logger';\n\noverrideConsole();\n\nif (cluster.isPrimary) {\n console.info(`[Primary] ${formatTime(Date.now())} This is the primary process`);\n\n const logBuffer = new Subject<string>();\n\n logBuffer\n .pipe(\n //\n bufferTime(100),\n map((v) => v.join('\\n')),\n filter((v) => v.trim() !== ''),\n )\n .subscribe((message) => {\n console.info(message);\n });\n\n defer(() =>\n loadSecrets<{ access_key: string; secret_key: string; passphrase: string }>({\n terminal: Terminal.fromNodeEnv(),\n encryption_key_base58: process.env.ENCRYPTION_KEY_BASE58!,\n }),\n )\n .pipe(\n //\n tap({\n error: (e) => {\n console.error(`[Primary] ${formatTime(Date.now())} Failed to load secrets`, e);\n },\n }),\n retry({ delay: 5000 }),\n repeat({ delay: 5000 }),\n )\n .pipe(\n listWatch(\n (x) => x.secret.id,\n (account) =>\n defer(\n () =>\n new Observable((subscriber) => {\n console.info(\n formatTime(Date.now()),\n `[Primary] ${formatTime(Date.now())} Starting worker for account ${\n account.secret.public_data.name\n } (${account.secret.id})`,\n );\n if (account.secret.public_data.type !== 'api_key_okx') return;\n if (!account.secret.public_data.name) return;\n if (!account.decrypted_data) return;\n if (!account.decrypted_data.access_key) return;\n if (!account.decrypted_data.secret_key) return;\n if (!account.decrypted_data.passphrase) return;\n\n const worker = cluster.fork({\n ENCRYPTION_KEY_BASE58: '',\n ACCESS_KEY: account.decrypted_data.access_key,\n SECRET_KEY: account.decrypted_data.secret_key,\n PASSPHRASE: account.decrypted_data.passphrase,\n WRITE_QUOTE_TO_SQL: account.secret.public_data.write_quote_to_sql ? 'true' : 'false',\n TERMINAL_ID: `@yuants/vendor-okx/worker/${account.secret.public_data.name}`,\n WORKER_LABEL: account.secret.public_data.name,\n });\n\n worker.on('message', (message: any) => {\n if (message.type === 'log') {\n logBuffer.next(\n `[Worker ${worker.process.pid} ${message.label}] ${message.level}: ${message.message}`,\n );\n }\n });\n\n worker.on('exit', (code, signal) => {\n if (code === 0) {\n console.info(\n `[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} exited gracefully`,\n );\n subscriber.complete();\n } else {\n console.error(\n `[Primary] ${formatTime(Date.now())} Worker ${\n worker.process.pid\n } exited with code ${code} and signal ${signal}`,\n );\n subscriber.error(\n new Error(`Worker ${worker.process.pid} exited with code ${code} and signal ${signal}`),\n );\n }\n });\n return () => {\n worker.kill();\n console.info(`[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} killed`);\n };\n }),\n ).pipe(\n //\n retry({ delay: 1000 }),\n repeat({ delay: 1000 }), // 重试间隔为 1 秒\n ),\n (a, b) => a.secret.updated_at === b.secret.updated_at,\n ),\n )\n .subscribe();\n} else {\n console.info(`${formatTime(Date.now())} This is the worker process`, process.pid, process.env);\n import('./index');\n}\n"]}
|
package/lib/cluster.d.ts
DELETED
package/lib/cluster.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../src/cluster.ts"],"names":[],"mappings":""}
|
package/lib/cluster.js
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
const protocol_1 = require("@yuants/protocol");
|
|
30
|
-
const secret_1 = require("@yuants/secret");
|
|
31
|
-
const utils_1 = require("@yuants/utils");
|
|
32
|
-
const cluster_1 = __importDefault(require("cluster"));
|
|
33
|
-
const rxjs_1 = require("rxjs");
|
|
34
|
-
const logger_1 = require("./logger");
|
|
35
|
-
(0, logger_1.overrideConsole)();
|
|
36
|
-
if (cluster_1.default.isPrimary) {
|
|
37
|
-
console.info(`[Primary] ${(0, utils_1.formatTime)(Date.now())} This is the primary process`);
|
|
38
|
-
const logBuffer = new rxjs_1.Subject();
|
|
39
|
-
logBuffer
|
|
40
|
-
.pipe(
|
|
41
|
-
//
|
|
42
|
-
(0, rxjs_1.bufferTime)(100), (0, rxjs_1.map)((v) => v.join('\n')), (0, rxjs_1.filter)((v) => v.trim() !== ''))
|
|
43
|
-
.subscribe((message) => {
|
|
44
|
-
console.info(message);
|
|
45
|
-
});
|
|
46
|
-
(0, rxjs_1.defer)(() => (0, secret_1.loadSecrets)({
|
|
47
|
-
terminal: protocol_1.Terminal.fromNodeEnv(),
|
|
48
|
-
encryption_key_base58: process.env.ENCRYPTION_KEY_BASE58,
|
|
49
|
-
}))
|
|
50
|
-
.pipe(
|
|
51
|
-
//
|
|
52
|
-
(0, rxjs_1.tap)({
|
|
53
|
-
error: (e) => {
|
|
54
|
-
console.error(`[Primary] ${(0, utils_1.formatTime)(Date.now())} Failed to load secrets`, e);
|
|
55
|
-
},
|
|
56
|
-
}), (0, rxjs_1.retry)({ delay: 5000 }), (0, rxjs_1.repeat)({ delay: 5000 }))
|
|
57
|
-
.pipe((0, utils_1.listWatch)((x) => x.secret.id, (account) => (0, rxjs_1.defer)(() => new rxjs_1.Observable((subscriber) => {
|
|
58
|
-
console.info((0, utils_1.formatTime)(Date.now()), `[Primary] ${(0, utils_1.formatTime)(Date.now())} Starting worker for account ${account.secret.public_data.name} (${account.secret.id})`);
|
|
59
|
-
if (account.secret.public_data.type !== 'api_key_okx')
|
|
60
|
-
return;
|
|
61
|
-
if (!account.secret.public_data.name)
|
|
62
|
-
return;
|
|
63
|
-
if (!account.decrypted_data)
|
|
64
|
-
return;
|
|
65
|
-
if (!account.decrypted_data.access_key)
|
|
66
|
-
return;
|
|
67
|
-
if (!account.decrypted_data.secret_key)
|
|
68
|
-
return;
|
|
69
|
-
if (!account.decrypted_data.passphrase)
|
|
70
|
-
return;
|
|
71
|
-
const worker = cluster_1.default.fork({
|
|
72
|
-
ENCRYPTION_KEY_BASE58: '',
|
|
73
|
-
ACCESS_KEY: account.decrypted_data.access_key,
|
|
74
|
-
SECRET_KEY: account.decrypted_data.secret_key,
|
|
75
|
-
PASSPHRASE: account.decrypted_data.passphrase,
|
|
76
|
-
WRITE_QUOTE_TO_SQL: account.secret.public_data.write_quote_to_sql ? 'true' : 'false',
|
|
77
|
-
TERMINAL_ID: `@yuants/vendor-okx/worker/${account.secret.public_data.name}`,
|
|
78
|
-
WORKER_LABEL: account.secret.public_data.name,
|
|
79
|
-
});
|
|
80
|
-
worker.on('message', (message) => {
|
|
81
|
-
if (message.type === 'log') {
|
|
82
|
-
logBuffer.next(`[Worker ${worker.process.pid} ${message.label}] ${message.level}: ${message.message}`);
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
worker.on('exit', (code, signal) => {
|
|
86
|
-
if (code === 0) {
|
|
87
|
-
console.info(`[Primary] ${(0, utils_1.formatTime)(Date.now())} Worker ${worker.process.pid} exited gracefully`);
|
|
88
|
-
subscriber.complete();
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
console.error(`[Primary] ${(0, utils_1.formatTime)(Date.now())} Worker ${worker.process.pid} exited with code ${code} and signal ${signal}`);
|
|
92
|
-
subscriber.error(new Error(`Worker ${worker.process.pid} exited with code ${code} and signal ${signal}`));
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
return () => {
|
|
96
|
-
worker.kill();
|
|
97
|
-
console.info(`[Primary] ${(0, utils_1.formatTime)(Date.now())} Worker ${worker.process.pid} killed`);
|
|
98
|
-
};
|
|
99
|
-
})).pipe(
|
|
100
|
-
//
|
|
101
|
-
(0, rxjs_1.retry)({ delay: 1000 }), (0, rxjs_1.repeat)({ delay: 1000 })), (a, b) => a.secret.updated_at === b.secret.updated_at))
|
|
102
|
-
.subscribe();
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
console.info(`${(0, utils_1.formatTime)(Date.now())} This is the worker process`, process.pid, process.env);
|
|
106
|
-
Promise.resolve().then(() => __importStar(require('./index')));
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=cluster.js.map
|
package/lib/cluster.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../src/cluster.ts"],"names":[],"mappings":"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","sourcesContent":["import { Terminal } from '@yuants/protocol';\nimport { loadSecrets } from '@yuants/secret';\nimport { formatTime, listWatch } from '@yuants/utils';\nimport cluster from 'cluster';\nimport { bufferTime, defer, filter, map, Observable, repeat, retry, Subject, tap } from 'rxjs';\nimport { overrideConsole } from './logger';\n\noverrideConsole();\n\nif (cluster.isPrimary) {\n console.info(`[Primary] ${formatTime(Date.now())} This is the primary process`);\n\n const logBuffer = new Subject<string>();\n\n logBuffer\n .pipe(\n //\n bufferTime(100),\n map((v) => v.join('\\n')),\n filter((v) => v.trim() !== ''),\n )\n .subscribe((message) => {\n console.info(message);\n });\n\n defer(() =>\n loadSecrets<{ access_key: string; secret_key: string; passphrase: string }>({\n terminal: Terminal.fromNodeEnv(),\n encryption_key_base58: process.env.ENCRYPTION_KEY_BASE58!,\n }),\n )\n .pipe(\n //\n tap({\n error: (e) => {\n console.error(`[Primary] ${formatTime(Date.now())} Failed to load secrets`, e);\n },\n }),\n retry({ delay: 5000 }),\n repeat({ delay: 5000 }),\n )\n .pipe(\n listWatch(\n (x) => x.secret.id,\n (account) =>\n defer(\n () =>\n new Observable((subscriber) => {\n console.info(\n formatTime(Date.now()),\n `[Primary] ${formatTime(Date.now())} Starting worker for account ${\n account.secret.public_data.name\n } (${account.secret.id})`,\n );\n if (account.secret.public_data.type !== 'api_key_okx') return;\n if (!account.secret.public_data.name) return;\n if (!account.decrypted_data) return;\n if (!account.decrypted_data.access_key) return;\n if (!account.decrypted_data.secret_key) return;\n if (!account.decrypted_data.passphrase) return;\n\n const worker = cluster.fork({\n ENCRYPTION_KEY_BASE58: '',\n ACCESS_KEY: account.decrypted_data.access_key,\n SECRET_KEY: account.decrypted_data.secret_key,\n PASSPHRASE: account.decrypted_data.passphrase,\n WRITE_QUOTE_TO_SQL: account.secret.public_data.write_quote_to_sql ? 'true' : 'false',\n TERMINAL_ID: `@yuants/vendor-okx/worker/${account.secret.public_data.name}`,\n WORKER_LABEL: account.secret.public_data.name,\n });\n\n worker.on('message', (message: any) => {\n if (message.type === 'log') {\n logBuffer.next(\n `[Worker ${worker.process.pid} ${message.label}] ${message.level}: ${message.message}`,\n );\n }\n });\n\n worker.on('exit', (code, signal) => {\n if (code === 0) {\n console.info(\n `[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} exited gracefully`,\n );\n subscriber.complete();\n } else {\n console.error(\n `[Primary] ${formatTime(Date.now())} Worker ${\n worker.process.pid\n } exited with code ${code} and signal ${signal}`,\n );\n subscriber.error(\n new Error(`Worker ${worker.process.pid} exited with code ${code} and signal ${signal}`),\n );\n }\n });\n return () => {\n worker.kill();\n console.info(`[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} killed`);\n };\n }),\n ).pipe(\n //\n retry({ delay: 1000 }),\n repeat({ delay: 1000 }), // 重试间隔为 1 秒\n ),\n (a, b) => a.secret.updated_at === b.secret.updated_at,\n ),\n )\n .subscribe();\n} else {\n console.info(`${formatTime(Date.now())} This is the worker process`, process.pid, process.env);\n import('./index');\n}\n"]}
|