@abtnode/core 1.17.7-beta-20251225-073259-cb6ecf68 → 1.17.7-beta-20251229-085620-84f09930
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/blocklet/manager/disk.js +150 -36
- package/lib/blocklet/manager/ensure-blocklet-running.js +1 -1
- package/lib/blocklet/manager/helper/blue-green-start-blocklet.js +1 -1
- package/lib/blocklet/manager/helper/install-application-from-general.js +2 -3
- package/lib/blocklet/manager/helper/install-component-from-url.js +7 -4
- package/lib/blocklet/migration-dist/migration.cjs +5 -4
- package/lib/blocklet/passport/index.js +10 -3
- package/lib/blocklet/project/index.js +7 -2
- package/lib/blocklet/security/index.js +2 -2
- package/lib/cert.js +6 -3
- package/lib/event/index.js +98 -87
- package/lib/event/util.js +7 -13
- package/lib/index.js +18 -27
- package/lib/migrations/1.17.7-beta-2025122601-settings-authentication.js +19 -0
- package/lib/migrations/1.5.0-site.js +3 -7
- package/lib/migrations/1.5.15-site.js +3 -7
- package/lib/monitor/blocklet-runtime-monitor.js +37 -5
- package/lib/monitor/node-runtime-monitor.js +4 -4
- package/lib/router/helper.js +525 -452
- package/lib/router/index.js +280 -104
- package/lib/router/manager.js +14 -28
- package/lib/states/audit-log.js +6 -3
- package/lib/states/blocklet-child.js +93 -1
- package/lib/states/blocklet-extras.js +1 -1
- package/lib/states/blocklet.js +429 -197
- package/lib/states/node.js +0 -10
- package/lib/states/site.js +87 -4
- package/lib/team/manager.js +2 -21
- package/lib/util/blocklet.js +71 -37
- package/lib/util/get-accessible-external-node-ip.js +21 -6
- package/lib/util/index.js +3 -3
- package/lib/util/ip.js +15 -1
- package/lib/util/launcher.js +11 -11
- package/lib/util/ready.js +2 -9
- package/lib/util/reset-node.js +6 -5
- package/lib/validators/router.js +0 -3
- package/lib/webhook/sender/api/index.js +5 -0
- package/package.json +35 -37
- package/lib/migrations/1.0.36-snapshot.js +0 -10
- package/lib/migrations/1.1.9-snapshot.js +0 -7
- package/lib/states/routing-snapshot.js +0 -146
|
@@ -10,11 +10,17 @@ const { BlockletStatus } = require('@blocklet/constant');
|
|
|
10
10
|
const defaultLogger = require('@abtnode/logger')('blocklet-runtime-monitor');
|
|
11
11
|
|
|
12
12
|
const { Op } = require('sequelize');
|
|
13
|
-
const {
|
|
13
|
+
const { isWorkerInstance } = require('@abtnode/util/lib/pm2/is-instance-worker');
|
|
14
14
|
const { getRuntimeInfo } = require('../util/blocklet');
|
|
15
15
|
|
|
16
16
|
const insertThrottleMap = new Map();
|
|
17
17
|
|
|
18
|
+
const isRuntimeMonitorDisabled = () => {
|
|
19
|
+
const value = process.env.ABT_NODE_RUNTIME_MONITOR_DISABLED;
|
|
20
|
+
// Disabled when set to '1' or 'true', enabled when '0', 'false', or unset
|
|
21
|
+
return value === '1' || value === 'true';
|
|
22
|
+
};
|
|
23
|
+
|
|
18
24
|
class BlockletRuntimeMonitor extends EventEmitter {
|
|
19
25
|
constructor({ states, logger = defaultLogger } = {}) {
|
|
20
26
|
super();
|
|
@@ -29,6 +35,10 @@ class BlockletRuntimeMonitor extends EventEmitter {
|
|
|
29
35
|
}
|
|
30
36
|
|
|
31
37
|
async getHistory(blockletDid, hours = 1) {
|
|
38
|
+
if (isRuntimeMonitorDisabled()) {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
|
|
32
42
|
const result = await this.states.runtimeInsight.model.findAll({
|
|
33
43
|
where: {
|
|
34
44
|
did: {
|
|
@@ -53,6 +63,10 @@ class BlockletRuntimeMonitor extends EventEmitter {
|
|
|
53
63
|
* @memberof BlockletRuntimeMonitor
|
|
54
64
|
*/
|
|
55
65
|
getRuntimeInfo(blockletDid, componentId = 'app') {
|
|
66
|
+
if (isRuntimeMonitorDisabled()) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
|
|
56
70
|
if (!this.data[blockletDid]) {
|
|
57
71
|
return null;
|
|
58
72
|
}
|
|
@@ -65,11 +79,19 @@ class BlockletRuntimeMonitor extends EventEmitter {
|
|
|
65
79
|
}
|
|
66
80
|
|
|
67
81
|
async monit(did) {
|
|
82
|
+
if (isRuntimeMonitorDisabled()) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
68
86
|
const blocklet = await this.states.blocklet.getBlocklet(did);
|
|
69
87
|
await this._monit(blocklet);
|
|
70
88
|
}
|
|
71
89
|
|
|
72
90
|
async _monit(blocklet, { addToHistory } = {}) {
|
|
91
|
+
if (isRuntimeMonitorDisabled()) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
73
95
|
const {
|
|
74
96
|
meta: { did: blockletDid },
|
|
75
97
|
status,
|
|
@@ -160,6 +182,10 @@ class BlockletRuntimeMonitor extends EventEmitter {
|
|
|
160
182
|
}
|
|
161
183
|
|
|
162
184
|
async monitAll() {
|
|
185
|
+
if (isRuntimeMonitorDisabled()) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
|
|
163
189
|
if (this.inProgress) {
|
|
164
190
|
this.logger.debug('monitoring is in progress');
|
|
165
191
|
return;
|
|
@@ -198,11 +224,16 @@ class BlockletRuntimeMonitor extends EventEmitter {
|
|
|
198
224
|
}
|
|
199
225
|
|
|
200
226
|
async getBlockletRuntimeInfo(blockletDid) {
|
|
201
|
-
|
|
202
|
-
|
|
227
|
+
if (isRuntimeMonitorDisabled()) {
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
203
230
|
|
|
204
|
-
const
|
|
231
|
+
const blocklet = await this.states.blocklet.getBlocklet(blockletDid);
|
|
232
|
+
if (!blocklet) {
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
205
235
|
|
|
236
|
+
const info = this.getRuntimeInfo(blockletDid);
|
|
206
237
|
if (blocklet && !info) {
|
|
207
238
|
await this._monit(blocklet, { addToHistory: false }).catch((err) => {
|
|
208
239
|
this.logger.error('failed to get blocklet runtime info', { error: err });
|
|
@@ -217,7 +248,7 @@ class BlockletRuntimeMonitor extends EventEmitter {
|
|
|
217
248
|
}
|
|
218
249
|
|
|
219
250
|
_push(blockletDid, value) {
|
|
220
|
-
if (
|
|
251
|
+
if (isWorkerInstance()) {
|
|
221
252
|
return Promise.resolve();
|
|
222
253
|
}
|
|
223
254
|
|
|
@@ -246,3 +277,4 @@ class BlockletRuntimeMonitor extends EventEmitter {
|
|
|
246
277
|
}
|
|
247
278
|
|
|
248
279
|
module.exports.BlockletRuntimeMonitor = BlockletRuntimeMonitor;
|
|
280
|
+
module.exports.isRuntimeMonitorDisabled = isRuntimeMonitorDisabled;
|
|
@@ -169,14 +169,14 @@ class NodeRuntimeMonitor extends EventEmitter {
|
|
|
169
169
|
try {
|
|
170
170
|
const { cpu, mem, disks } = this.data.realtime;
|
|
171
171
|
// 计算每个 CPU 的占用率:load字段为百分比,除以 100 得到 0 到 1 的值
|
|
172
|
-
const cpuUtilizations = cpu.cpus
|
|
172
|
+
const cpuUtilizations = cpu.cpus?.filter((v) => v.load > 0).map((v) => v.load / 100) || [0];
|
|
173
|
+
|
|
174
|
+
// 计算每个硬盘占用率:used / total
|
|
175
|
+
const diskUtilizations = disks?.filter((v) => v.used > 0).map((v) => v.used / v.total) || [0];
|
|
173
176
|
|
|
174
177
|
// 计算内存占用率:used / total
|
|
175
178
|
const memoryUtilization = mem.total > 0 && mem.available > 0 ? (mem.total - mem.available) / mem.total : 0;
|
|
176
179
|
|
|
177
|
-
// 计算每个硬盘占用率:used / total
|
|
178
|
-
const diskUtilizations = disks.filter((v) => v.used > 0).map((v) => v.used / v.total);
|
|
179
|
-
|
|
180
180
|
// 返回包含所需值的对象
|
|
181
181
|
return {
|
|
182
182
|
cpus: cpuUtilizations,
|