bunqueue 2.6.55 → 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 +7 -5
- package/dist/infrastructure/cloud/cloudAgent.d.ts.map +1 -1
- package/dist/infrastructure/cloud/cloudAgent.js +21 -27
- 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;
|
|
@@ -38,9 +40,9 @@ export declare class CloudAgent {
|
|
|
38
40
|
/** Send snapshot immediately after a command (debounced 100ms to batch rapid commands) */
|
|
39
41
|
private immediateSnapshotTimer;
|
|
40
42
|
private sendImmediateSnapshot;
|
|
41
|
-
/** Collect and send a snapshot
|
|
43
|
+
/** Collect and send a snapshot via HTTP. Events are always embedded. */
|
|
42
44
|
private sendSnapshot;
|
|
43
|
-
/** Subscribe to job events for
|
|
45
|
+
/** Subscribe to job events — buffer for next HTTP snapshot */
|
|
44
46
|
private subscribeToEvents;
|
|
45
47
|
/** Redact sensitive fields from job data */
|
|
46
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,17 +70,14 @@ 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
79
|
.then((result) => {
|
|
78
80
|
this.wsSender?.sendRaw(result);
|
|
79
|
-
// Send immediate snapshot after state-changing commands
|
|
80
|
-
// so the dashboard reflects the change without waiting 15s
|
|
81
81
|
if (result.success) {
|
|
82
82
|
this.sendImmediateSnapshot();
|
|
83
83
|
}
|
|
@@ -88,8 +88,9 @@ export class CloudAgent {
|
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
90
|
this.wsSender.connect();
|
|
91
|
-
this.subscribeToEvents();
|
|
92
91
|
}
|
|
92
|
+
// Subscribe to events — buffer for next HTTP snapshot
|
|
93
|
+
this.subscribeToEvents();
|
|
93
94
|
}
|
|
94
95
|
/** Graceful shutdown: send final snapshot, close connections */
|
|
95
96
|
async stop() {
|
|
@@ -106,7 +107,7 @@ export class CloudAgent {
|
|
|
106
107
|
}
|
|
107
108
|
// Send final shutdown snapshot (best-effort, 2s timeout)
|
|
108
109
|
try {
|
|
109
|
-
const snapshot = collectSnapshot({
|
|
110
|
+
const snapshot = await collectSnapshot({
|
|
110
111
|
queueManager: this.queueManager,
|
|
111
112
|
instanceId: this.instanceId,
|
|
112
113
|
instanceName: this.config.instanceName,
|
|
@@ -134,12 +135,12 @@ export class CloudAgent {
|
|
|
134
135
|
void this.sendSnapshot(true);
|
|
135
136
|
}, 100);
|
|
136
137
|
}
|
|
137
|
-
/** Collect and send a snapshot
|
|
138
|
+
/** Collect and send a snapshot via HTTP. Events are always embedded. */
|
|
138
139
|
async sendSnapshot(forceHeavy = false) {
|
|
139
140
|
try {
|
|
140
141
|
this.snapshotCount++;
|
|
141
142
|
const includeHeavy = forceHeavy || this.snapshotCount % this.heavyEveryN === 1 || this.snapshotCount === 1;
|
|
142
|
-
const snapshot = collectSnapshot({
|
|
143
|
+
const snapshot = await collectSnapshot({
|
|
143
144
|
queueManager: this.queueManager,
|
|
144
145
|
instanceId: this.instanceId,
|
|
145
146
|
instanceName: this.config.instanceName,
|
|
@@ -148,18 +149,9 @@ export class CloudAgent {
|
|
|
148
149
|
serverHandles: this.serverHandles,
|
|
149
150
|
includeHeavy,
|
|
150
151
|
});
|
|
151
|
-
//
|
|
152
|
-
if (this.
|
|
153
|
-
this.
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
// WS down → embed buffered events in HTTP snapshot and fall back
|
|
157
|
-
if (this.wsSender) {
|
|
158
|
-
const buffered = this.wsSender.drainBufferedEvents();
|
|
159
|
-
if (buffered.length > 0) {
|
|
160
|
-
snapshot.events = buffered;
|
|
161
|
-
cloudLog.debug('Embedded events in HTTP snapshot (WS down)', { count: buffered.length });
|
|
162
|
-
}
|
|
152
|
+
// Embed buffered events in snapshot
|
|
153
|
+
if (this.eventBuffer.length > 0) {
|
|
154
|
+
snapshot.events = this.eventBuffer.splice(0);
|
|
163
155
|
}
|
|
164
156
|
await this.httpSender.send(snapshot);
|
|
165
157
|
}
|
|
@@ -167,11 +159,9 @@ export class CloudAgent {
|
|
|
167
159
|
cloudLog.debug('Snapshot send failed', { error: String(err) });
|
|
168
160
|
}
|
|
169
161
|
}
|
|
170
|
-
/** Subscribe to job events for
|
|
162
|
+
/** Subscribe to job events — buffer for next HTTP snapshot */
|
|
171
163
|
subscribeToEvents() {
|
|
172
164
|
this.unsubscribeEvents = this.queueManager.subscribe((event) => {
|
|
173
|
-
if (!this.wsSender)
|
|
174
|
-
return;
|
|
175
165
|
// Apply event filter
|
|
176
166
|
if (this.config.eventFilter.length > 0 &&
|
|
177
167
|
!this.config.eventFilter.includes(event.eventType)) {
|
|
@@ -191,7 +181,11 @@ export class CloudAgent {
|
|
|
191
181
|
delay: event.delay,
|
|
192
182
|
},
|
|
193
183
|
};
|
|
194
|
-
|
|
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);
|
|
195
189
|
});
|
|
196
190
|
}
|
|
197
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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"}
|