bunqueue 2.6.54 → 2.6.56
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/dist/infrastructure/cloud/cloudAgent.d.ts +10 -5
- package/dist/infrastructure/cloud/cloudAgent.d.ts.map +1 -1
- package/dist/infrastructure/cloud/cloudAgent.js +39 -28
- package/dist/infrastructure/cloud/cloudAgent.js.map +1 -1
- package/dist/infrastructure/cloud/httpSender.d.ts +2 -1
- package/dist/infrastructure/cloud/httpSender.d.ts.map +1 -1
- package/dist/infrastructure/cloud/httpSender.js +9 -5
- package/dist/infrastructure/cloud/httpSender.js.map +1 -1
- package/dist/infrastructure/cloud/snapshotCollector.d.ts +7 -5
- package/dist/infrastructure/cloud/snapshotCollector.d.ts.map +1 -1
- package/dist/infrastructure/cloud/snapshotCollector.js +24 -161
- package/dist/infrastructure/cloud/snapshotCollector.js.map +1 -1
- package/dist/infrastructure/cloud/snapshotHelpers.d.ts +40 -0
- package/dist/infrastructure/cloud/snapshotHelpers.d.ts.map +1 -0
- package/dist/infrastructure/cloud/snapshotHelpers.js +333 -0
- package/dist/infrastructure/cloud/snapshotHelpers.js.map +1 -0
- package/dist/infrastructure/cloud/types.d.ts +63 -1
- package/dist/infrastructure/cloud/types.d.ts.map +1 -1
- package/dist/infrastructure/cloud/wsSender.d.ts +14 -20
- package/dist/infrastructure/cloud/wsSender.d.ts.map +1 -1
- package/dist/infrastructure/cloud/wsSender.js +64 -113
- package/dist/infrastructure/cloud/wsSender.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Main orchestrator that collects telemetry and sends it to bunqueue Cloud.
|
|
4
4
|
*
|
|
5
5
|
* Two channels:
|
|
6
|
-
* 1. HTTP POST (
|
|
7
|
-
* 2. WebSocket (
|
|
6
|
+
* 1. HTTP POST — all data (snapshots + events every N seconds)
|
|
7
|
+
* 2. WebSocket — commands only (dashboard → bunqueue, bunqueue → command results)
|
|
8
8
|
*
|
|
9
9
|
* Zero overhead when disabled (BUNQUEUE_CLOUD_URL not set).
|
|
10
10
|
*/
|
|
@@ -24,8 +24,10 @@ export declare class CloudAgent {
|
|
|
24
24
|
private snapshotCount;
|
|
25
25
|
private stopped;
|
|
26
26
|
private serverHandles?;
|
|
27
|
-
/** Heavy data collected every N snapshots (default: every 6th = every
|
|
27
|
+
/** Heavy data collected every N snapshots (default: every 6th = every 90s at 15s interval) */
|
|
28
28
|
private readonly heavyEveryN;
|
|
29
|
+
/** Event buffer — flushed into each HTTP snapshot */
|
|
30
|
+
private readonly eventBuffer;
|
|
29
31
|
constructor(queueManager: QueueManager, config: CloudConfig);
|
|
30
32
|
/** Set server handles for connection stats */
|
|
31
33
|
setServerHandles(handles: ServerHandles): void;
|
|
@@ -35,9 +37,12 @@ export declare class CloudAgent {
|
|
|
35
37
|
start(): void;
|
|
36
38
|
/** Graceful shutdown: send final snapshot, close connections */
|
|
37
39
|
stop(): Promise<void>;
|
|
38
|
-
/**
|
|
40
|
+
/** Send snapshot immediately after a command (debounced 100ms to batch rapid commands) */
|
|
41
|
+
private immediateSnapshotTimer;
|
|
42
|
+
private sendImmediateSnapshot;
|
|
43
|
+
/** Collect and send a snapshot via HTTP. Events are always embedded. */
|
|
39
44
|
private sendSnapshot;
|
|
40
|
-
/** Subscribe to job events for
|
|
45
|
+
/** Subscribe to job events — buffer for next HTTP snapshot */
|
|
41
46
|
private subscribeToEvents;
|
|
42
47
|
/** Redact sensitive fields from job data */
|
|
43
48
|
private redactData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudAgent.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/cloudAgent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,SAAS,CAAC;AAGvD,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"cloudAgent.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/cloudAgent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,SAAS,CAAC;AAGvD,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAQ1E,qBAAa,UAAU;IAkBnB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAjB/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,8FAA8F;IAC9F,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAK;IACjC,qDAAqD;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;gBAG7B,YAAY,EAAE,YAAY,EAC3C,MAAM,EAAE,WAAW;IAQrB,8CAA8C;IAC9C,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAI9C,8EAA8E;IAC9E,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAS/E,0BAA0B;IAC1B,KAAK,IAAI,IAAI;IA2Cb,gEAAgE;IAC1D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoC3B,0FAA0F;IAC1F,OAAO,CAAC,sBAAsB,CAA8C;IAC5E,OAAO,CAAC,qBAAqB;IAQ7B,wEAAwE;YAC1D,YAAY;IA2B1B,8DAA8D;IAC9D,OAAO,CAAC,iBAAiB;IAiCzB,4CAA4C;IAC5C,OAAO,CAAC,UAAU;IAclB,aAAa,IAAI,MAAM;CAGxB"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Main orchestrator that collects telemetry and sends it to bunqueue Cloud.
|
|
4
4
|
*
|
|
5
5
|
* Two channels:
|
|
6
|
-
* 1. HTTP POST (
|
|
7
|
-
* 2. WebSocket (
|
|
6
|
+
* 1. HTTP POST — all data (snapshots + events every N seconds)
|
|
7
|
+
* 2. WebSocket — commands only (dashboard → bunqueue, bunqueue → command results)
|
|
8
8
|
*
|
|
9
9
|
* Zero overhead when disabled (BUNQUEUE_CLOUD_URL not set).
|
|
10
10
|
*/
|
|
@@ -15,6 +15,7 @@ import { HttpSender } from './httpSender';
|
|
|
15
15
|
import { WsSender } from './wsSender';
|
|
16
16
|
import { handleCommand } from './commandHandler';
|
|
17
17
|
import { cloudLog } from './logger';
|
|
18
|
+
const EVENT_BUFFER_MAX = 1000;
|
|
18
19
|
export class CloudAgent {
|
|
19
20
|
queueManager;
|
|
20
21
|
config;
|
|
@@ -28,8 +29,10 @@ export class CloudAgent {
|
|
|
28
29
|
snapshotCount = 0;
|
|
29
30
|
stopped = false;
|
|
30
31
|
serverHandles;
|
|
31
|
-
/** Heavy data collected every N snapshots (default: every 6th = every
|
|
32
|
+
/** Heavy data collected every N snapshots (default: every 6th = every 90s at 15s interval) */
|
|
32
33
|
heavyEveryN = 6;
|
|
34
|
+
/** Event buffer — flushed into each HTTP snapshot */
|
|
35
|
+
eventBuffer = [];
|
|
33
36
|
constructor(queueManager, config) {
|
|
34
37
|
this.queueManager = queueManager;
|
|
35
38
|
this.config = config;
|
|
@@ -67,22 +70,27 @@ export class CloudAgent {
|
|
|
67
70
|
void this.sendSnapshot();
|
|
68
71
|
}, this.config.intervalMs);
|
|
69
72
|
}
|
|
70
|
-
// Channel 2: WebSocket
|
|
73
|
+
// Channel 2: WebSocket — commands only (dashboard → bunqueue)
|
|
71
74
|
if (this.wsSender) {
|
|
72
|
-
// Register command handler if remote commands enabled
|
|
73
75
|
if (this.config.remoteCommands) {
|
|
74
76
|
cloudLog.info('Remote commands enabled');
|
|
75
77
|
this.wsSender.setCommandHandler((cmd) => {
|
|
76
78
|
handleCommand(this.queueManager, cmd)
|
|
77
|
-
.then((result) =>
|
|
79
|
+
.then((result) => {
|
|
80
|
+
this.wsSender?.sendRaw(result);
|
|
81
|
+
if (result.success) {
|
|
82
|
+
this.sendImmediateSnapshot();
|
|
83
|
+
}
|
|
84
|
+
})
|
|
78
85
|
.catch((err) => {
|
|
79
86
|
cloudLog.debug('Command handler error', { error: String(err) });
|
|
80
87
|
});
|
|
81
88
|
});
|
|
82
89
|
}
|
|
83
90
|
this.wsSender.connect();
|
|
84
|
-
this.subscribeToEvents();
|
|
85
91
|
}
|
|
92
|
+
// Subscribe to events — buffer for next HTTP snapshot
|
|
93
|
+
this.subscribeToEvents();
|
|
86
94
|
}
|
|
87
95
|
/** Graceful shutdown: send final snapshot, close connections */
|
|
88
96
|
async stop() {
|
|
@@ -99,7 +107,7 @@ export class CloudAgent {
|
|
|
99
107
|
}
|
|
100
108
|
// Send final shutdown snapshot (best-effort, 2s timeout)
|
|
101
109
|
try {
|
|
102
|
-
const snapshot = collectSnapshot({
|
|
110
|
+
const snapshot = await collectSnapshot({
|
|
103
111
|
queueManager: this.queueManager,
|
|
104
112
|
instanceId: this.instanceId,
|
|
105
113
|
instanceName: this.config.instanceName,
|
|
@@ -117,12 +125,22 @@ export class CloudAgent {
|
|
|
117
125
|
this.wsSender?.stop();
|
|
118
126
|
cloudLog.info('Disconnected from dashboard');
|
|
119
127
|
}
|
|
120
|
-
/**
|
|
121
|
-
|
|
128
|
+
/** Send snapshot immediately after a command (debounced 100ms to batch rapid commands) */
|
|
129
|
+
immediateSnapshotTimer = null;
|
|
130
|
+
sendImmediateSnapshot() {
|
|
131
|
+
if (this.immediateSnapshotTimer)
|
|
132
|
+
return; // already scheduled
|
|
133
|
+
this.immediateSnapshotTimer = setTimeout(() => {
|
|
134
|
+
this.immediateSnapshotTimer = null;
|
|
135
|
+
void this.sendSnapshot(true);
|
|
136
|
+
}, 100);
|
|
137
|
+
}
|
|
138
|
+
/** Collect and send a snapshot via HTTP. Events are always embedded. */
|
|
139
|
+
async sendSnapshot(forceHeavy = false) {
|
|
122
140
|
try {
|
|
123
141
|
this.snapshotCount++;
|
|
124
|
-
const includeHeavy = this.snapshotCount % this.heavyEveryN === 1 || this.snapshotCount === 1;
|
|
125
|
-
const snapshot = collectSnapshot({
|
|
142
|
+
const includeHeavy = forceHeavy || this.snapshotCount % this.heavyEveryN === 1 || this.snapshotCount === 1;
|
|
143
|
+
const snapshot = await collectSnapshot({
|
|
126
144
|
queueManager: this.queueManager,
|
|
127
145
|
instanceId: this.instanceId,
|
|
128
146
|
instanceName: this.config.instanceName,
|
|
@@ -131,18 +149,9 @@ export class CloudAgent {
|
|
|
131
149
|
serverHandles: this.serverHandles,
|
|
132
150
|
includeHeavy,
|
|
133
151
|
});
|
|
134
|
-
//
|
|
135
|
-
if (this.
|
|
136
|
-
this.
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
// WS down → embed buffered events in HTTP snapshot and fall back
|
|
140
|
-
if (this.wsSender) {
|
|
141
|
-
const buffered = this.wsSender.drainBufferedEvents();
|
|
142
|
-
if (buffered.length > 0) {
|
|
143
|
-
snapshot.events = buffered;
|
|
144
|
-
cloudLog.debug('Embedded events in HTTP snapshot (WS down)', { count: buffered.length });
|
|
145
|
-
}
|
|
152
|
+
// Embed buffered events in snapshot
|
|
153
|
+
if (this.eventBuffer.length > 0) {
|
|
154
|
+
snapshot.events = this.eventBuffer.splice(0);
|
|
146
155
|
}
|
|
147
156
|
await this.httpSender.send(snapshot);
|
|
148
157
|
}
|
|
@@ -150,11 +159,9 @@ export class CloudAgent {
|
|
|
150
159
|
cloudLog.debug('Snapshot send failed', { error: String(err) });
|
|
151
160
|
}
|
|
152
161
|
}
|
|
153
|
-
/** Subscribe to job events for
|
|
162
|
+
/** Subscribe to job events — buffer for next HTTP snapshot */
|
|
154
163
|
subscribeToEvents() {
|
|
155
164
|
this.unsubscribeEvents = this.queueManager.subscribe((event) => {
|
|
156
|
-
if (!this.wsSender)
|
|
157
|
-
return;
|
|
158
165
|
// Apply event filter
|
|
159
166
|
if (this.config.eventFilter.length > 0 &&
|
|
160
167
|
!this.config.eventFilter.includes(event.eventType)) {
|
|
@@ -174,7 +181,11 @@ export class CloudAgent {
|
|
|
174
181
|
delay: event.delay,
|
|
175
182
|
},
|
|
176
183
|
};
|
|
177
|
-
|
|
184
|
+
// Ring buffer — drop oldest when full
|
|
185
|
+
if (this.eventBuffer.length >= EVENT_BUFFER_MAX) {
|
|
186
|
+
this.eventBuffer.shift();
|
|
187
|
+
}
|
|
188
|
+
this.eventBuffer.push(cloudEvent);
|
|
178
189
|
});
|
|
179
190
|
}
|
|
180
191
|
/** Redact sensitive fields from job data */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudAgent.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/cloudAgent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAsB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,MAAM,OAAO,UAAU;
|
|
1
|
+
{"version":3,"file":"cloudAgent.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/cloudAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HTTP Sender
|
|
3
3
|
* Posts snapshots to the remote dashboard via HTTP with retry and HMAC signing
|
|
4
|
+
* Uses msgpack + zstd encoding (same as WebSocket channel)
|
|
4
5
|
*/
|
|
5
6
|
import type { CloudConfig, CloudSnapshot } from './types';
|
|
6
7
|
export declare class HttpSender {
|
|
@@ -15,7 +16,7 @@ export declare class HttpSender {
|
|
|
15
16
|
send(snapshot: CloudSnapshot): Promise<void>;
|
|
16
17
|
/** Try to send buffered snapshots in batches */
|
|
17
18
|
private flushBuffer;
|
|
18
|
-
/** HTTP POST with auth headers and optional HMAC */
|
|
19
|
+
/** HTTP POST with auth headers and optional HMAC — sends zstd(msgpack) */
|
|
19
20
|
private post;
|
|
20
21
|
getBufferSize(): number;
|
|
21
22
|
getCircuitState(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpSender.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/httpSender.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"httpSender.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/httpSender.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK1D,qBAAa,UAAU;IAOT,OAAO,CAAC,QAAQ,CAAC,MAAM;IANnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,OAAO,CAA0B;gBAEZ,MAAM,EAAE,WAAW;IAUhD,2CAA2C;IACrC,IAAI,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBlD,gDAAgD;YAClC,WAAW;IAsBzB,0EAA0E;YAC5D,IAAI;IA6ClB,aAAa,IAAI,MAAM;IAIvB,eAAe,IAAI,MAAM;CAG1B"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HTTP Sender
|
|
3
3
|
* Posts snapshots to the remote dashboard via HTTP with retry and HMAC signing
|
|
4
|
+
* Uses msgpack + zstd encoding (same as WebSocket channel)
|
|
4
5
|
*/
|
|
6
|
+
import { pack } from 'msgpackr';
|
|
5
7
|
import { CircuitBreaker } from './circuitBreaker';
|
|
6
8
|
import { SnapshotBuffer } from './buffer';
|
|
7
9
|
import { cloudLog } from './logger';
|
|
@@ -66,23 +68,25 @@ export class HttpSender {
|
|
|
66
68
|
}
|
|
67
69
|
}
|
|
68
70
|
}
|
|
69
|
-
/** HTTP POST with auth headers and optional HMAC */
|
|
71
|
+
/** HTTP POST with auth headers and optional HMAC — sends zstd(msgpack) */
|
|
70
72
|
async post(url, body) {
|
|
71
|
-
const
|
|
73
|
+
const msgpackBuf = pack(body);
|
|
74
|
+
const compressed = new Uint8Array(await Bun.zstdCompress(msgpackBuf));
|
|
72
75
|
const headers = {
|
|
73
|
-
'Content-Type': 'application/
|
|
76
|
+
'Content-Type': 'application/x-msgpack',
|
|
77
|
+
'Content-Encoding': 'zstd',
|
|
74
78
|
Authorization: `Bearer ${this.config.apiKey}`,
|
|
75
79
|
'X-Timestamp': String(Date.now()),
|
|
76
80
|
};
|
|
77
81
|
if (this.config.signingSecret) {
|
|
78
82
|
this.hmacKey ??= await crypto.subtle.importKey('raw', new TextEncoder().encode(this.config.signingSecret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
|
|
79
|
-
const sig = await crypto.subtle.sign('HMAC', this.hmacKey,
|
|
83
|
+
const sig = await crypto.subtle.sign('HMAC', this.hmacKey, compressed);
|
|
80
84
|
headers['X-Signature'] = Buffer.from(sig).toString('hex');
|
|
81
85
|
}
|
|
82
86
|
const res = await fetch(url, {
|
|
83
87
|
method: 'POST',
|
|
84
88
|
headers,
|
|
85
|
-
body:
|
|
89
|
+
body: compressed,
|
|
86
90
|
signal: AbortSignal.timeout(10_000),
|
|
87
91
|
});
|
|
88
92
|
if (!res.ok) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpSender.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/httpSender.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"httpSender.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/httpSender.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Snapshot Collector
|
|
3
|
-
* Two-tier collection: light (every
|
|
3
|
+
* Two-tier collection: light (every 15s) + heavy (every 90s)
|
|
4
4
|
*
|
|
5
5
|
* Light: stats, throughput, latency, memory, connections — O(SHARD_COUNT)
|
|
6
6
|
* Heavy: recentJobs, dlqEntries, topErrors, workerDetails, queueConfigs, webhooks — O(queues × shards)
|
|
7
|
-
* Queues are always collected but use a single pass with cached counts.
|
|
8
7
|
*/
|
|
9
8
|
import type { QueueManager } from '../../application/queueManager';
|
|
10
9
|
import type { CloudSnapshot } from './types';
|
|
11
|
-
/** Optional server handles for connection stats + backup */
|
|
10
|
+
/** Optional server handles for connection stats + backup + storage */
|
|
12
11
|
export interface ServerHandles {
|
|
13
12
|
getConnectionCount: () => number;
|
|
14
13
|
getWsClientCount: () => number;
|
|
@@ -21,6 +20,10 @@ export interface ServerHandles {
|
|
|
21
20
|
retention: number;
|
|
22
21
|
isRunning: boolean;
|
|
23
22
|
} | null;
|
|
23
|
+
getSqliteStats?: () => {
|
|
24
|
+
dbSizeBytes: number;
|
|
25
|
+
writeBufferPending: number;
|
|
26
|
+
} | null;
|
|
24
27
|
}
|
|
25
28
|
/** Parameters for snapshot collection */
|
|
26
29
|
export interface CollectSnapshotParams {
|
|
@@ -30,9 +33,8 @@ export interface CollectSnapshotParams {
|
|
|
30
33
|
startedAt: number;
|
|
31
34
|
sequenceId: number;
|
|
32
35
|
serverHandles?: ServerHandles;
|
|
33
|
-
/** Include heavy data (recentJobs, dlqEntries, topErrors, workerDetails, queueConfigs, webhooks) */
|
|
34
36
|
includeHeavy: boolean;
|
|
35
37
|
}
|
|
36
38
|
/** Collect a snapshot. Light data always fresh, heavy data cached between refreshes. */
|
|
37
|
-
export declare function collectSnapshot(params: CollectSnapshotParams): CloudSnapshot
|
|
39
|
+
export declare function collectSnapshot(params: CollectSnapshotParams): Promise<CloudSnapshot>;
|
|
38
40
|
//# sourceMappingURL=snapshotCollector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshotCollector.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/snapshotCollector.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"snapshotCollector.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/snapshotCollector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAKnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA4B7C,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,kBAAkB,EAAE,MAAM,MAAM,CAAC;IACjC,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;KACpB,GAAG,IAAI,CAAC;IACT,cAAc,CAAC,EAAE,MAAM;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACnF;AAED,yCAAyC;AACzC,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,EAAE,OAAO,CAAC;CACvB;AAsBD,wFAAwF;AACxF,wBAAsB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAyJ3F"}
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Snapshot Collector
|
|
3
|
-
* Two-tier collection: light (every
|
|
3
|
+
* Two-tier collection: light (every 15s) + heavy (every 90s)
|
|
4
4
|
*
|
|
5
5
|
* Light: stats, throughput, latency, memory, connections — O(SHARD_COUNT)
|
|
6
6
|
* Heavy: recentJobs, dlqEntries, topErrors, workerDetails, queueConfigs, webhooks — O(queues × shards)
|
|
7
|
-
* Queues are always collected but use a single pass with cached counts.
|
|
8
7
|
*/
|
|
9
|
-
import { hostname } from 'os';
|
|
8
|
+
import { hostname, arch, platform, cpus } from 'os';
|
|
10
9
|
import { throughputTracker } from '../../application/throughputTracker';
|
|
11
10
|
import { latencyTracker } from '../../application/latencyTracker';
|
|
12
11
|
import { getTaskErrorStats } from '../../application/backgroundTasks';
|
|
13
12
|
import { VERSION } from '../../shared/version';
|
|
13
|
+
import { collectRecentJobs, collectDlqEntries, collectTopErrors, collectQueueConfigs, collectWebhooks, collectQueueThroughput, collectWorkerUtilization, collectDurationHistogram, collectQueueWaitTime, collectQueueRetryRate, collectBacklogVelocity, collectStallDetails, collectPriorityDistribution, } from './snapshotHelpers';
|
|
14
14
|
/** Cached hostname — computed once */
|
|
15
15
|
const HOST = hostname();
|
|
16
|
+
/** Cached runtime info — computed once */
|
|
17
|
+
const RUNTIME = {
|
|
18
|
+
bunVersion: typeof Bun !== 'undefined' ? Bun.version : 'unknown',
|
|
19
|
+
os: platform(),
|
|
20
|
+
arch: arch(),
|
|
21
|
+
cpus: cpus().length,
|
|
22
|
+
};
|
|
16
23
|
/** Cached heavy data — reused between snapshots until refreshed */
|
|
17
24
|
let cachedHeavy = {
|
|
18
25
|
recentJobs: [],
|
|
@@ -24,7 +31,7 @@ let cachedHeavy = {
|
|
|
24
31
|
s3Backup: null,
|
|
25
32
|
};
|
|
26
33
|
/** Collect a snapshot. Light data always fresh, heavy data cached between refreshes. */
|
|
27
|
-
export function collectSnapshot(params) {
|
|
34
|
+
export async function collectSnapshot(params) {
|
|
28
35
|
const { queueManager, instanceId, instanceName, startedAt, sequenceId, serverHandles } = params;
|
|
29
36
|
// ─── Light data (O(SHARD_COUNT), every snapshot) ───
|
|
30
37
|
const stats = queueManager.getStats();
|
|
@@ -35,8 +42,6 @@ export function collectSnapshot(params) {
|
|
|
35
42
|
const averages = latencyTracker.getAverages();
|
|
36
43
|
const storage = queueManager.getStorageStatus();
|
|
37
44
|
const mem = process.memoryUsage();
|
|
38
|
-
// Queues: single pass — listQueues + getQueueJobCounts + perQueueStats for DLQ
|
|
39
|
-
// Avoids getQueuesSummary() which internally calls getQueueJobCounts but drops totalCompleted/totalFailed
|
|
40
45
|
const queueNames = queueManager.listQueues();
|
|
41
46
|
const perQueue = queueManager.getPerQueueStats();
|
|
42
47
|
const queues = queueNames.map((name) => {
|
|
@@ -52,7 +57,6 @@ export function collectSnapshot(params) {
|
|
|
52
57
|
totalFailed: counts.totalFailed,
|
|
53
58
|
};
|
|
54
59
|
});
|
|
55
|
-
// Crons (cheap, in-memory list)
|
|
56
60
|
const crons = queueManager.listCrons().map((c) => ({
|
|
57
61
|
name: c.name,
|
|
58
62
|
queue: c.queue,
|
|
@@ -60,13 +64,11 @@ export function collectSnapshot(params) {
|
|
|
60
64
|
nextRun: c.nextRun,
|
|
61
65
|
executions: c.executions,
|
|
62
66
|
maxLimit: c.maxLimit,
|
|
67
|
+
lastRun: c.executions > 0 && c.repeatEvery ? c.nextRun - c.repeatEvery : null,
|
|
63
68
|
}));
|
|
64
69
|
// ─── Heavy data (only when requested) ───
|
|
65
70
|
if (params.includeHeavy) {
|
|
66
|
-
// recentJobs: only queues with current activity (not historical)
|
|
67
|
-
// completed/failed jobs are fetched from ALL queues since they're in-memory bounded sets
|
|
68
71
|
const activeQueues = queues.filter((q) => q.waiting > 0 || q.active > 0 || q.delayed > 0);
|
|
69
|
-
// Include all queues for completed/failed snapshot since getJobs handles the state filter
|
|
70
72
|
const allQueuesForJobs = queues.length <= 20 ? queues : activeQueues;
|
|
71
73
|
const dlqQueues = queues.filter((q) => q.dlq > 0);
|
|
72
74
|
cachedHeavy = {
|
|
@@ -86,7 +88,7 @@ export function collectSnapshot(params) {
|
|
|
86
88
|
failedJobs: w.failedJobs,
|
|
87
89
|
currentJob: w.currentJob,
|
|
88
90
|
})),
|
|
89
|
-
queueConfigs: collectQueueConfigs(queueManager, queueNames),
|
|
91
|
+
queueConfigs: collectQueueConfigs(queueManager, new Set(queueNames)),
|
|
90
92
|
webhooks: collectWebhooks(queueManager),
|
|
91
93
|
s3Backup: serverHandles?.getBackupStatus?.() ?? null,
|
|
92
94
|
};
|
|
@@ -146,157 +148,18 @@ export function collectSnapshot(params) {
|
|
|
146
148
|
ws: serverHandles?.getWsClientCount() ?? 0,
|
|
147
149
|
sse: serverHandles?.getSseClientCount() ?? 0,
|
|
148
150
|
},
|
|
149
|
-
//
|
|
151
|
+
// Analytics
|
|
152
|
+
queueThroughput: collectQueueThroughput(queues),
|
|
153
|
+
durationHistogram: collectDurationHistogram(cachedHeavy.recentJobs),
|
|
154
|
+
workerUtilization: collectWorkerUtilization(queueManager),
|
|
155
|
+
sqliteStats: serverHandles?.getSqliteStats?.() ?? null,
|
|
156
|
+
runtime: RUNTIME,
|
|
157
|
+
queueWaitTime: collectQueueWaitTime(cachedHeavy.recentJobs),
|
|
158
|
+
queueRetryRate: collectQueueRetryRate(cachedHeavy.recentJobs),
|
|
159
|
+
queueBacklogVelocity: collectBacklogVelocity(queues),
|
|
160
|
+
stallDetails: await collectStallDetails(queueManager),
|
|
161
|
+
queuePriorityDistribution: collectPriorityDistribution(cachedHeavy.recentJobs),
|
|
150
162
|
...cachedHeavy,
|
|
151
163
|
};
|
|
152
164
|
}
|
|
153
|
-
// ─── Heavy data collectors (only called every ~30s) ───
|
|
154
|
-
/** Collect recent jobs — only from active queues */
|
|
155
|
-
function collectRecentJobs(queueManager, activeQueueNames) {
|
|
156
|
-
if (activeQueueNames.length === 0)
|
|
157
|
-
return [];
|
|
158
|
-
const jobs = [];
|
|
159
|
-
const perQueue = Math.max(1, Math.floor(50 / activeQueueNames.length));
|
|
160
|
-
for (const name of activeQueueNames) {
|
|
161
|
-
try {
|
|
162
|
-
const queueJobs = queueManager.getJobs(name, {
|
|
163
|
-
state: ['waiting', 'active', 'delayed', 'completed', 'failed'],
|
|
164
|
-
start: 0,
|
|
165
|
-
end: perQueue - 1,
|
|
166
|
-
});
|
|
167
|
-
for (const j of queueJobs) {
|
|
168
|
-
const data = j.data;
|
|
169
|
-
const state = j.completedAt
|
|
170
|
-
? 'completed'
|
|
171
|
-
: j.startedAt
|
|
172
|
-
? 'active'
|
|
173
|
-
: j.runAt > Date.now()
|
|
174
|
-
? 'delayed'
|
|
175
|
-
: 'waiting';
|
|
176
|
-
jobs.push({
|
|
177
|
-
id: String(j.id),
|
|
178
|
-
name: data?.name ?? 'default',
|
|
179
|
-
queue: j.queue,
|
|
180
|
-
state,
|
|
181
|
-
data,
|
|
182
|
-
priority: j.priority,
|
|
183
|
-
createdAt: j.createdAt,
|
|
184
|
-
startedAt: j.startedAt ?? undefined,
|
|
185
|
-
completedAt: j.completedAt ?? undefined,
|
|
186
|
-
failedReason: state === 'active' && j.attempts > 0
|
|
187
|
-
? `Retry ${j.attempts}/${j.maxAttempts}`
|
|
188
|
-
: undefined,
|
|
189
|
-
attempts: j.attempts,
|
|
190
|
-
maxAttempts: j.maxAttempts,
|
|
191
|
-
duration: j.completedAt && j.startedAt ? j.completedAt - j.startedAt : undefined,
|
|
192
|
-
progress: j.progress > 0 ? j.progress : undefined,
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
catch {
|
|
197
|
-
// Skip queue on error
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
return jobs.sort((a, b) => b.createdAt - a.createdAt).slice(0, 50);
|
|
201
|
-
}
|
|
202
|
-
/** Collect DLQ entries — only from queues with DLQ > 0 */
|
|
203
|
-
function collectDlqEntries(queueManager, dlqQueueNames) {
|
|
204
|
-
if (dlqQueueNames.length === 0)
|
|
205
|
-
return [];
|
|
206
|
-
const entries = [];
|
|
207
|
-
for (const name of dlqQueueNames) {
|
|
208
|
-
try {
|
|
209
|
-
const dlq = queueManager.getDlqEntries(name);
|
|
210
|
-
for (const e of dlq.slice(0, 20)) {
|
|
211
|
-
entries.push({
|
|
212
|
-
jobId: String(e.job.id),
|
|
213
|
-
queue: e.job.queue,
|
|
214
|
-
reason: e.reason,
|
|
215
|
-
error: e.error,
|
|
216
|
-
enteredAt: e.enteredAt,
|
|
217
|
-
retryCount: e.retryCount,
|
|
218
|
-
attempts: e.job.attempts,
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
catch {
|
|
223
|
-
// Skip
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
return entries.sort((a, b) => b.enteredAt - a.enteredAt).slice(0, 50);
|
|
227
|
-
}
|
|
228
|
-
/** Collect per-queue config */
|
|
229
|
-
function collectQueueConfigs(queueManager, queueNames) {
|
|
230
|
-
const configs = {};
|
|
231
|
-
const perQueue = queueManager.getPerQueueStats();
|
|
232
|
-
for (const name of queueNames) {
|
|
233
|
-
try {
|
|
234
|
-
const stall = queueManager.getStallConfig(name);
|
|
235
|
-
const dlq = queueManager.getDlqConfig(name);
|
|
236
|
-
const pq = perQueue.get(name);
|
|
237
|
-
configs[name] = {
|
|
238
|
-
paused: queueManager.isPaused(name),
|
|
239
|
-
rateLimit: null,
|
|
240
|
-
concurrencyLimit: null,
|
|
241
|
-
concurrencyActive: pq?.active ?? 0,
|
|
242
|
-
stallConfig: { stallInterval: stall.stallInterval, maxStalls: stall.maxStalls },
|
|
243
|
-
dlqConfig: { maxRetries: dlq.maxAutoRetries, maxAge: dlq.maxAge ?? 0 },
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
catch {
|
|
247
|
-
// Skip
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
return configs;
|
|
251
|
-
}
|
|
252
|
-
/** Collect webhook delivery stats */
|
|
253
|
-
function collectWebhooks(queueManager) {
|
|
254
|
-
try {
|
|
255
|
-
return queueManager.webhookManager.list().map((w) => ({
|
|
256
|
-
id: w.id,
|
|
257
|
-
url: w.url,
|
|
258
|
-
events: w.events,
|
|
259
|
-
queue: w.queue,
|
|
260
|
-
enabled: w.enabled,
|
|
261
|
-
successCount: w.successCount,
|
|
262
|
-
failureCount: w.failureCount,
|
|
263
|
-
lastTriggered: w.lastTriggered,
|
|
264
|
-
}));
|
|
265
|
-
}
|
|
266
|
-
catch {
|
|
267
|
-
return [];
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
/** Collect top errors — only from queues with DLQ entries */
|
|
271
|
-
function collectTopErrors(queueManager, dlqQueueNames) {
|
|
272
|
-
if (dlqQueueNames.length === 0)
|
|
273
|
-
return [];
|
|
274
|
-
const errorMap = new Map();
|
|
275
|
-
const allEntries = dlqQueueNames.flatMap((name) => {
|
|
276
|
-
try {
|
|
277
|
-
return queueManager.getDlqEntries(name);
|
|
278
|
-
}
|
|
279
|
-
catch {
|
|
280
|
-
return [];
|
|
281
|
-
}
|
|
282
|
-
});
|
|
283
|
-
for (const e of allEntries) {
|
|
284
|
-
const msg = e.error ?? e.reason;
|
|
285
|
-
const existing = errorMap.get(msg);
|
|
286
|
-
if (existing) {
|
|
287
|
-
existing.count++;
|
|
288
|
-
if (e.enteredAt > existing.lastSeen) {
|
|
289
|
-
existing.lastSeen = e.enteredAt;
|
|
290
|
-
existing.queue = e.job.queue;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
else {
|
|
294
|
-
errorMap.set(msg, { count: 1, queue: e.job.queue, lastSeen: e.enteredAt });
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
return [...errorMap.entries()]
|
|
298
|
-
.map(([message, data]) => ({ message, ...data }))
|
|
299
|
-
.sort((a, b) => b.count - a.count)
|
|
300
|
-
.slice(0, 20);
|
|
301
|
-
}
|
|
302
165
|
//# sourceMappingURL=snapshotCollector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshotCollector.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/snapshotCollector.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"snapshotCollector.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/snapshotCollector.ts"],"names":[],"mappings":"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"}
|