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
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snapshot Helper Collectors
|
|
3
|
+
* Heavy and analytics data collectors used by snapshotCollector.
|
|
4
|
+
*/
|
|
5
|
+
import type { QueueManager } from '../../application/queueManager';
|
|
6
|
+
import type { CloudSnapshot } from './types';
|
|
7
|
+
/** Collect recent jobs — only from active queues */
|
|
8
|
+
export declare function collectRecentJobs(queueManager: QueueManager, activeQueueNames: string[]): CloudSnapshot['recentJobs'];
|
|
9
|
+
/** Collect DLQ entries — only from queues with DLQ > 0 */
|
|
10
|
+
export declare function collectDlqEntries(queueManager: QueueManager, dlqQueueNames: string[]): CloudSnapshot['dlqEntries'];
|
|
11
|
+
/** Collect per-queue config */
|
|
12
|
+
export declare function collectQueueConfigs(queueManager: QueueManager, queueNames: Set<string>): CloudSnapshot['queueConfigs'];
|
|
13
|
+
/** Collect webhook delivery stats */
|
|
14
|
+
export declare function collectWebhooks(queueManager: QueueManager): CloudSnapshot['webhooks'];
|
|
15
|
+
/** Collect top errors — only from queues with DLQ entries */
|
|
16
|
+
export declare function collectTopErrors(queueManager: QueueManager, dlqQueueNames: string[]): CloudSnapshot['topErrors'];
|
|
17
|
+
/** Compute per-queue throughput from delta of totalCompleted/totalFailed */
|
|
18
|
+
export declare function collectQueueThroughput(queues: Array<{
|
|
19
|
+
name: string;
|
|
20
|
+
totalCompleted: number;
|
|
21
|
+
totalFailed: number;
|
|
22
|
+
}>): CloudSnapshot['queueThroughput'];
|
|
23
|
+
/** Compute per-worker utilization */
|
|
24
|
+
export declare function collectWorkerUtilization(queueManager: QueueManager): CloudSnapshot['workerUtilization'];
|
|
25
|
+
/** Compute duration histogram from recent jobs */
|
|
26
|
+
export declare function collectDurationHistogram(recentJobs: CloudSnapshot['recentJobs']): CloudSnapshot['durationHistogram'];
|
|
27
|
+
/** Compute per-queue wait time (createdAt → startedAt) from recent jobs */
|
|
28
|
+
export declare function collectQueueWaitTime(recentJobs: CloudSnapshot['recentJobs']): CloudSnapshot['queueWaitTime'];
|
|
29
|
+
/** Compute per-queue retry rate from recent jobs */
|
|
30
|
+
export declare function collectQueueRetryRate(recentJobs: CloudSnapshot['recentJobs']): CloudSnapshot['queueRetryRate'];
|
|
31
|
+
/** Compute queue backlog velocity (delta waiting between snapshots) */
|
|
32
|
+
export declare function collectBacklogVelocity(queues: Array<{
|
|
33
|
+
name: string;
|
|
34
|
+
waiting: number;
|
|
35
|
+
}>): CloudSnapshot['queueBacklogVelocity'];
|
|
36
|
+
/** Collect stall details from processing shards */
|
|
37
|
+
export declare function collectStallDetails(queueManager: QueueManager): Promise<CloudSnapshot['stallDetails']>;
|
|
38
|
+
/** Compute per-queue priority distribution from recent jobs */
|
|
39
|
+
export declare function collectPriorityDistribution(recentJobs: CloudSnapshot['recentJobs']): CloudSnapshot['queuePriorityDistribution'];
|
|
40
|
+
//# sourceMappingURL=snapshotHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshotHelpers.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/snapshotHelpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAa7C,oDAAoD;AACpD,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,MAAM,EAAE,GACzB,aAAa,CAAC,YAAY,CAAC,CAiD7B;AAED,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,MAAM,EAAE,GACtB,aAAa,CAAC,YAAY,CAAC,CAyB7B;AAED,+BAA+B;AAC/B,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACtB,aAAa,CAAC,cAAc,CAAC,CAuB/B;AAED,qCAAqC;AACrC,wBAAgB,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,aAAa,CAAC,UAAU,CAAC,CAerF;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,MAAM,EAAE,GACtB,aAAa,CAAC,WAAW,CAAC,CA+B5B;AAID,4EAA4E;AAC5E,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAC3E,aAAa,CAAC,iBAAiB,CAAC,CA+BlC;AAED,qCAAqC;AACrC,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,YAAY,GACzB,aAAa,CAAC,mBAAmB,CAAC,CAMpC;AAED,kDAAkD;AAClD,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,GACtC,aAAa,CAAC,mBAAmB,CAAC,CAWpC;AAED,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,GACtC,aAAa,CAAC,eAAe,CAAC,CAwBhC;AAED,oDAAoD;AACpD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,GACtC,aAAa,CAAC,gBAAgB,CAAC,CAqBjC;AAED,uEAAuE;AACvE,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/C,aAAa,CAAC,sBAAsB,CAAC,CAsBvC;AAED,mDAAmD;AACnD,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CA+BxC;AAED,+DAA+D;AAC/D,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,GACtC,aAAa,CAAC,2BAA2B,CAAC,CAO5C"}
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snapshot Helper Collectors
|
|
3
|
+
* Heavy and analytics data collectors used by snapshotCollector.
|
|
4
|
+
*/
|
|
5
|
+
import { jobId as toJobId } from '../../domain/types/job';
|
|
6
|
+
/** Per-queue previous totals for delta-based throughput calculation */
|
|
7
|
+
const prevQueueTotals = new Map();
|
|
8
|
+
/** Per-queue previous waiting count for backlog velocity */
|
|
9
|
+
const prevQueueWaiting = new Map();
|
|
10
|
+
// ─── Heavy data collectors (called every ~90s) ───
|
|
11
|
+
/** Collect recent jobs — only from active queues */
|
|
12
|
+
export function collectRecentJobs(queueManager, activeQueueNames) {
|
|
13
|
+
if (activeQueueNames.length === 0)
|
|
14
|
+
return [];
|
|
15
|
+
const jobs = [];
|
|
16
|
+
const perQueue = Math.max(1, Math.floor(50 / activeQueueNames.length));
|
|
17
|
+
for (const name of activeQueueNames) {
|
|
18
|
+
try {
|
|
19
|
+
const queueJobs = queueManager.getJobs(name, {
|
|
20
|
+
state: ['waiting', 'active', 'delayed', 'completed', 'failed'],
|
|
21
|
+
start: 0,
|
|
22
|
+
end: perQueue - 1,
|
|
23
|
+
});
|
|
24
|
+
for (const j of queueJobs) {
|
|
25
|
+
const data = j.data;
|
|
26
|
+
const state = j.completedAt
|
|
27
|
+
? 'completed'
|
|
28
|
+
: j.startedAt
|
|
29
|
+
? 'active'
|
|
30
|
+
: j.runAt > Date.now()
|
|
31
|
+
? 'delayed'
|
|
32
|
+
: 'waiting';
|
|
33
|
+
jobs.push({
|
|
34
|
+
id: String(j.id),
|
|
35
|
+
name: data?.name ?? 'default',
|
|
36
|
+
queue: j.queue,
|
|
37
|
+
state,
|
|
38
|
+
data,
|
|
39
|
+
priority: j.priority,
|
|
40
|
+
createdAt: j.createdAt,
|
|
41
|
+
startedAt: j.startedAt ?? undefined,
|
|
42
|
+
completedAt: j.completedAt ?? undefined,
|
|
43
|
+
failedReason: state === 'active' && j.attempts > 0
|
|
44
|
+
? `Retry ${j.attempts}/${j.maxAttempts}`
|
|
45
|
+
: undefined,
|
|
46
|
+
attempts: j.attempts,
|
|
47
|
+
maxAttempts: j.maxAttempts,
|
|
48
|
+
duration: j.completedAt && j.startedAt ? j.completedAt - j.startedAt : undefined,
|
|
49
|
+
progress: j.progress > 0 ? j.progress : undefined,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Skip queue on error
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return jobs.sort((a, b) => b.createdAt - a.createdAt).slice(0, 50);
|
|
58
|
+
}
|
|
59
|
+
/** Collect DLQ entries — only from queues with DLQ > 0 */
|
|
60
|
+
export function collectDlqEntries(queueManager, dlqQueueNames) {
|
|
61
|
+
if (dlqQueueNames.length === 0)
|
|
62
|
+
return [];
|
|
63
|
+
const entries = [];
|
|
64
|
+
for (const name of dlqQueueNames) {
|
|
65
|
+
try {
|
|
66
|
+
const dlq = queueManager.getDlqEntries(name);
|
|
67
|
+
for (const e of dlq.slice(0, 20)) {
|
|
68
|
+
entries.push({
|
|
69
|
+
jobId: String(e.job.id),
|
|
70
|
+
queue: e.job.queue,
|
|
71
|
+
reason: e.reason,
|
|
72
|
+
error: e.error,
|
|
73
|
+
enteredAt: e.enteredAt,
|
|
74
|
+
retryCount: e.retryCount,
|
|
75
|
+
attempts: e.job.attempts,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Skip
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return entries.sort((a, b) => b.enteredAt - a.enteredAt).slice(0, 50);
|
|
84
|
+
}
|
|
85
|
+
/** Collect per-queue config */
|
|
86
|
+
export function collectQueueConfigs(queueManager, queueNames) {
|
|
87
|
+
const configs = {};
|
|
88
|
+
const perQueue = queueManager.getPerQueueStats();
|
|
89
|
+
for (const name of queueNames) {
|
|
90
|
+
try {
|
|
91
|
+
const stall = queueManager.getStallConfig(name);
|
|
92
|
+
const dlq = queueManager.getDlqConfig(name);
|
|
93
|
+
const pq = perQueue.get(name);
|
|
94
|
+
configs[name] = {
|
|
95
|
+
paused: queueManager.isPaused(name),
|
|
96
|
+
rateLimit: null,
|
|
97
|
+
concurrencyLimit: null,
|
|
98
|
+
concurrencyActive: pq?.active ?? 0,
|
|
99
|
+
stallConfig: { stallInterval: stall.stallInterval, maxStalls: stall.maxStalls },
|
|
100
|
+
dlqConfig: { maxRetries: dlq.maxAutoRetries, maxAge: dlq.maxAge ?? 0 },
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// Skip
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return configs;
|
|
108
|
+
}
|
|
109
|
+
/** Collect webhook delivery stats */
|
|
110
|
+
export function collectWebhooks(queueManager) {
|
|
111
|
+
try {
|
|
112
|
+
return queueManager.webhookManager.list().map((w) => ({
|
|
113
|
+
id: w.id,
|
|
114
|
+
url: w.url,
|
|
115
|
+
events: w.events,
|
|
116
|
+
queue: w.queue,
|
|
117
|
+
enabled: w.enabled,
|
|
118
|
+
successCount: w.successCount,
|
|
119
|
+
failureCount: w.failureCount,
|
|
120
|
+
lastTriggered: w.lastTriggered,
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/** Collect top errors — only from queues with DLQ entries */
|
|
128
|
+
export function collectTopErrors(queueManager, dlqQueueNames) {
|
|
129
|
+
if (dlqQueueNames.length === 0)
|
|
130
|
+
return [];
|
|
131
|
+
const errorMap = new Map();
|
|
132
|
+
const allEntries = dlqQueueNames.flatMap((name) => {
|
|
133
|
+
try {
|
|
134
|
+
return queueManager.getDlqEntries(name);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return [];
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
for (const e of allEntries) {
|
|
141
|
+
const msg = e.error ?? e.reason;
|
|
142
|
+
const existing = errorMap.get(msg);
|
|
143
|
+
if (existing) {
|
|
144
|
+
existing.count++;
|
|
145
|
+
if (e.enteredAt > existing.lastSeen) {
|
|
146
|
+
existing.lastSeen = e.enteredAt;
|
|
147
|
+
existing.queue = e.job.queue;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
errorMap.set(msg, { count: 1, queue: e.job.queue, lastSeen: e.enteredAt });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return [...errorMap.entries()]
|
|
155
|
+
.map(([message, data]) => ({ message, ...data }))
|
|
156
|
+
.sort((a, b) => b.count - a.count)
|
|
157
|
+
.slice(0, 20);
|
|
158
|
+
}
|
|
159
|
+
// ─── Analytics collectors (derived from recent jobs + queue state) ───
|
|
160
|
+
/** Compute per-queue throughput from delta of totalCompleted/totalFailed */
|
|
161
|
+
export function collectQueueThroughput(queues) {
|
|
162
|
+
const now = Date.now();
|
|
163
|
+
const result = {};
|
|
164
|
+
for (const q of queues) {
|
|
165
|
+
const prev = prevQueueTotals.get(q.name);
|
|
166
|
+
const total = q.totalCompleted + q.totalFailed;
|
|
167
|
+
if (prev) {
|
|
168
|
+
const elapsedSec = (now - prev.timestamp) / 1000;
|
|
169
|
+
if (elapsedSec > 0.5) {
|
|
170
|
+
const completeDelta = q.totalCompleted - prev.completed;
|
|
171
|
+
const failDelta = q.totalFailed - prev.failed;
|
|
172
|
+
result[q.name] = {
|
|
173
|
+
pushPerSec: Math.round(((completeDelta + failDelta) / elapsedSec) * 100) / 100,
|
|
174
|
+
completePerSec: Math.round((completeDelta / elapsedSec) * 100) / 100,
|
|
175
|
+
failPerSec: Math.round((failDelta / elapsedSec) * 100) / 100,
|
|
176
|
+
errorRate: total > 0 ? Math.round((q.totalFailed / total) * 10000) / 10000 : 0,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
prevQueueTotals.set(q.name, {
|
|
181
|
+
completed: q.totalCompleted,
|
|
182
|
+
failed: q.totalFailed,
|
|
183
|
+
pushed: q.totalCompleted + q.totalFailed,
|
|
184
|
+
timestamp: now,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
/** Compute per-worker utilization */
|
|
190
|
+
export function collectWorkerUtilization(queueManager) {
|
|
191
|
+
return queueManager.workerManager.list().map((w) => ({
|
|
192
|
+
id: w.id,
|
|
193
|
+
name: w.name,
|
|
194
|
+
utilization: w.concurrency > 0 ? Math.round((w.activeJobs / w.concurrency) * 100) / 100 : 0,
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
/** Compute duration histogram from recent jobs */
|
|
198
|
+
export function collectDurationHistogram(recentJobs) {
|
|
199
|
+
const h = { lt100ms: 0, lt1s: 0, lt10s: 0, lt60s: 0, gt60s: 0 };
|
|
200
|
+
for (const j of recentJobs) {
|
|
201
|
+
if (!j.duration)
|
|
202
|
+
continue;
|
|
203
|
+
if (j.duration < 100)
|
|
204
|
+
h.lt100ms++;
|
|
205
|
+
else if (j.duration < 1000)
|
|
206
|
+
h.lt1s++;
|
|
207
|
+
else if (j.duration < 10000)
|
|
208
|
+
h.lt10s++;
|
|
209
|
+
else if (j.duration < 60000)
|
|
210
|
+
h.lt60s++;
|
|
211
|
+
else
|
|
212
|
+
h.gt60s++;
|
|
213
|
+
}
|
|
214
|
+
return h;
|
|
215
|
+
}
|
|
216
|
+
/** Compute per-queue wait time (createdAt → startedAt) from recent jobs */
|
|
217
|
+
export function collectQueueWaitTime(recentJobs) {
|
|
218
|
+
const byQueue = new Map();
|
|
219
|
+
for (const j of recentJobs) {
|
|
220
|
+
if (!j.startedAt || !j.createdAt)
|
|
221
|
+
continue;
|
|
222
|
+
const wait = j.startedAt - j.createdAt;
|
|
223
|
+
if (wait < 0)
|
|
224
|
+
continue;
|
|
225
|
+
let arr = byQueue.get(j.queue);
|
|
226
|
+
if (!arr) {
|
|
227
|
+
arr = [];
|
|
228
|
+
byQueue.set(j.queue, arr);
|
|
229
|
+
}
|
|
230
|
+
arr.push(wait);
|
|
231
|
+
}
|
|
232
|
+
const result = {};
|
|
233
|
+
for (const [queue, waits] of byQueue) {
|
|
234
|
+
const sum = waits.reduce((a, b) => a + b, 0);
|
|
235
|
+
result[queue] = {
|
|
236
|
+
avgMs: Math.round(sum / waits.length),
|
|
237
|
+
maxMs: Math.max(...waits),
|
|
238
|
+
minMs: Math.min(...waits),
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
return result;
|
|
242
|
+
}
|
|
243
|
+
/** Compute per-queue retry rate from recent jobs */
|
|
244
|
+
export function collectQueueRetryRate(recentJobs) {
|
|
245
|
+
const byQueue = new Map();
|
|
246
|
+
for (const j of recentJobs) {
|
|
247
|
+
let entry = byQueue.get(j.queue);
|
|
248
|
+
if (!entry) {
|
|
249
|
+
entry = { retrying: 0, total: 0 };
|
|
250
|
+
byQueue.set(j.queue, entry);
|
|
251
|
+
}
|
|
252
|
+
entry.total++;
|
|
253
|
+
if (j.attempts > 0)
|
|
254
|
+
entry.retrying++;
|
|
255
|
+
}
|
|
256
|
+
const result = {};
|
|
257
|
+
for (const [queue, data] of byQueue) {
|
|
258
|
+
result[queue] = {
|
|
259
|
+
retryRate: data.total > 0 ? Math.round((data.retrying / data.total) * 10000) / 10000 : 0,
|
|
260
|
+
retrying: data.retrying,
|
|
261
|
+
total: data.total,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
return result;
|
|
265
|
+
}
|
|
266
|
+
/** Compute queue backlog velocity (delta waiting between snapshots) */
|
|
267
|
+
export function collectBacklogVelocity(queues) {
|
|
268
|
+
const now = Date.now();
|
|
269
|
+
const result = {};
|
|
270
|
+
for (const q of queues) {
|
|
271
|
+
const prev = prevQueueWaiting.get(q.name);
|
|
272
|
+
if (prev) {
|
|
273
|
+
const elapsedMin = (now - prev.timestamp) / 60000;
|
|
274
|
+
if (elapsedMin > 0.1) {
|
|
275
|
+
const delta = q.waiting - prev.waiting;
|
|
276
|
+
const deltaPerMin = Math.round((delta / elapsedMin) * 100) / 100;
|
|
277
|
+
result[q.name] = {
|
|
278
|
+
deltaWaiting: delta,
|
|
279
|
+
deltaPerMin,
|
|
280
|
+
trend: deltaPerMin > 5 ? 'growing' : deltaPerMin < -5 ? 'shrinking' : 'stable',
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
prevQueueWaiting.set(q.name, { waiting: q.waiting, timestamp: now });
|
|
285
|
+
}
|
|
286
|
+
return result;
|
|
287
|
+
}
|
|
288
|
+
/** Collect stall details from processing shards */
|
|
289
|
+
export async function collectStallDetails(queueManager) {
|
|
290
|
+
try {
|
|
291
|
+
const memStats = queueManager.getMemoryStats();
|
|
292
|
+
if (memStats.stalledCandidates === 0)
|
|
293
|
+
return [];
|
|
294
|
+
const stalledIds = queueManager
|
|
295
|
+
.stalledCandidates;
|
|
296
|
+
if (stalledIds.size === 0)
|
|
297
|
+
return [];
|
|
298
|
+
const now = Date.now();
|
|
299
|
+
const details = [];
|
|
300
|
+
const ids = [...stalledIds].slice(0, 20);
|
|
301
|
+
for (const id of ids) {
|
|
302
|
+
try {
|
|
303
|
+
const job = await queueManager.getJob(toJobId(id));
|
|
304
|
+
if (!job)
|
|
305
|
+
continue;
|
|
306
|
+
details.push({
|
|
307
|
+
jobId: id,
|
|
308
|
+
queue: job.queue,
|
|
309
|
+
workerId: null,
|
|
310
|
+
stalledAt: job.startedAt ?? now,
|
|
311
|
+
stalledForMs: now - (job.startedAt ?? now),
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
// Skip
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return details;
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
return [];
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/** Compute per-queue priority distribution from recent jobs */
|
|
325
|
+
export function collectPriorityDistribution(recentJobs) {
|
|
326
|
+
const result = {};
|
|
327
|
+
for (const j of recentJobs) {
|
|
328
|
+
result[j.queue] ??= {};
|
|
329
|
+
result[j.queue][j.priority] = (result[j.queue][j.priority] ?? 0) + 1;
|
|
330
|
+
}
|
|
331
|
+
return result;
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=snapshotHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshotHelpers.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/snapshotHelpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -134,6 +134,7 @@ export interface CloudSnapshot {
|
|
|
134
134
|
nextRun: number;
|
|
135
135
|
executions: number;
|
|
136
136
|
maxLimit: number | null;
|
|
137
|
+
lastRun: number | null;
|
|
137
138
|
}>;
|
|
138
139
|
storage: {
|
|
139
140
|
diskFull: boolean;
|
|
@@ -224,7 +225,68 @@ export interface CloudSnapshot {
|
|
|
224
225
|
queue: string;
|
|
225
226
|
lastSeen: number;
|
|
226
227
|
}>;
|
|
227
|
-
/**
|
|
228
|
+
/** Per-queue throughput (push/complete/fail per second) */
|
|
229
|
+
queueThroughput: Record<string, {
|
|
230
|
+
pushPerSec: number;
|
|
231
|
+
completePerSec: number;
|
|
232
|
+
failPerSec: number;
|
|
233
|
+
errorRate: number;
|
|
234
|
+
}>;
|
|
235
|
+
/** Job duration histogram buckets (ms thresholds) */
|
|
236
|
+
durationHistogram: {
|
|
237
|
+
lt100ms: number;
|
|
238
|
+
lt1s: number;
|
|
239
|
+
lt10s: number;
|
|
240
|
+
lt60s: number;
|
|
241
|
+
gt60s: number;
|
|
242
|
+
};
|
|
243
|
+
/** Per-worker utilization (activeJobs / concurrency) */
|
|
244
|
+
workerUtilization: Array<{
|
|
245
|
+
id: string;
|
|
246
|
+
name: string;
|
|
247
|
+
utilization: number;
|
|
248
|
+
}>;
|
|
249
|
+
/** SQLite storage stats (null if in-memory mode) */
|
|
250
|
+
sqliteStats: {
|
|
251
|
+
dbSizeBytes: number;
|
|
252
|
+
writeBufferPending: number;
|
|
253
|
+
} | null;
|
|
254
|
+
/** Runtime environment */
|
|
255
|
+
runtime: {
|
|
256
|
+
bunVersion: string;
|
|
257
|
+
os: string;
|
|
258
|
+
arch: string;
|
|
259
|
+
cpus: number;
|
|
260
|
+
};
|
|
261
|
+
/** Per-queue priority distribution */
|
|
262
|
+
queuePriorityDistribution: Record<string, Record<number, number>>;
|
|
263
|
+
/** Per-queue job wait time stats (time in queue before processing) */
|
|
264
|
+
queueWaitTime: Record<string, {
|
|
265
|
+
avgMs: number;
|
|
266
|
+
maxMs: number;
|
|
267
|
+
minMs: number;
|
|
268
|
+
}>;
|
|
269
|
+
/** Per-queue retry rate (% jobs with attempts > 0) */
|
|
270
|
+
queueRetryRate: Record<string, {
|
|
271
|
+
retryRate: number;
|
|
272
|
+
retrying: number;
|
|
273
|
+
total: number;
|
|
274
|
+
}>;
|
|
275
|
+
/** Queue backlog velocity — delta of waiting jobs between snapshots */
|
|
276
|
+
queueBacklogVelocity: Record<string, {
|
|
277
|
+
deltaWaiting: number;
|
|
278
|
+
deltaPerMin: number;
|
|
279
|
+
trend: 'growing' | 'shrinking' | 'stable';
|
|
280
|
+
}>;
|
|
281
|
+
/** Stall details — currently stalled jobs */
|
|
282
|
+
stallDetails: Array<{
|
|
283
|
+
jobId: string;
|
|
284
|
+
queue: string;
|
|
285
|
+
workerId: string | null;
|
|
286
|
+
stalledAt: number;
|
|
287
|
+
stalledForMs: number;
|
|
288
|
+
}>;
|
|
289
|
+
/** Buffered events embedded in snapshot */
|
|
228
290
|
events?: CloudEvent[];
|
|
229
291
|
/** S3 backup status (null if not configured) */
|
|
230
292
|
s3Backup: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* WebSocket
|
|
3
|
-
*
|
|
2
|
+
* WebSocket Command Channel
|
|
3
|
+
* Persistent WebSocket connection for receiving commands from the dashboard.
|
|
4
4
|
*
|
|
5
5
|
* Features:
|
|
6
6
|
* - Auth via HTTP upgrade headers (Bun-specific) — no handshake message needed
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
9
|
-
* - Local socket ref: pong always replies on the correct socket after reconnect
|
|
7
|
+
* - MessagePack + zstd: binary frames with ~95% compression
|
|
8
|
+
* - Commands only: all data goes via HTTP, WS is for remote commands
|
|
10
9
|
* - Keepalive: server sends ping every 25s, bunqueue responds pong
|
|
11
10
|
*/
|
|
12
|
-
import type { CloudConfig
|
|
11
|
+
import type { CloudConfig } from './types';
|
|
13
12
|
import type { CloudCommand } from './commandHandler';
|
|
14
13
|
export declare class WsSender {
|
|
15
14
|
private readonly config;
|
|
@@ -20,30 +19,25 @@ export declare class WsSender {
|
|
|
20
19
|
private stopped;
|
|
21
20
|
private connected;
|
|
22
21
|
private reconnectTimer;
|
|
23
|
-
/** Ring buffer for events while disconnected */
|
|
24
|
-
private readonly eventBuffer;
|
|
25
22
|
private onCommand;
|
|
26
23
|
constructor(config: CloudConfig, instanceId: string);
|
|
27
24
|
/** Set handler for incoming commands from dashboard */
|
|
28
25
|
setCommandHandler(handler: (cmd: CloudCommand) => void): void;
|
|
29
26
|
/** Open the WebSocket connection */
|
|
30
27
|
connect(): void;
|
|
31
|
-
/** Send
|
|
32
|
-
send(event: CloudEvent): void;
|
|
33
|
-
/** Send any JSON payload on the WebSocket */
|
|
28
|
+
/** Send a command result back to dashboard */
|
|
34
29
|
sendRaw(data: unknown): void;
|
|
35
|
-
/**
|
|
36
|
-
* Drain buffered events for HTTP fallback (dual-channel).
|
|
37
|
-
* Returns and clears all buffered events.
|
|
38
|
-
*/
|
|
39
|
-
drainBufferedEvents(): CloudEvent[];
|
|
40
|
-
/** Number of buffered events */
|
|
41
|
-
getBufferSize(): number;
|
|
42
30
|
/** Graceful shutdown */
|
|
43
31
|
stop(): void;
|
|
44
32
|
isConnected(): boolean;
|
|
45
|
-
/**
|
|
46
|
-
private
|
|
33
|
+
/** Handle incoming WS message (async for zstd decompression) */
|
|
34
|
+
private handleMessage;
|
|
35
|
+
/** Encode and send as zstd(msgpack) binary frame */
|
|
36
|
+
private sendBinary;
|
|
37
|
+
/** Decode incoming message — supports zstd+msgpack, plain msgpack, and JSON (text) */
|
|
38
|
+
private decodeMessage;
|
|
39
|
+
/** Decode binary buffer — auto-detect zstd (magic bytes 28 b5 2f fd) vs plain msgpack */
|
|
40
|
+
private decodeBinary;
|
|
47
41
|
/** Clean up socket handlers and close */
|
|
48
42
|
private cleanup;
|
|
49
43
|
private scheduleReconnect;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsSender.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/wsSender.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wsSender.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/wsSender.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD,qBAAa,QAAQ;IAUjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAV7B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,SAAS,CAA8C;gBAG5C,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM;IAGrC,uDAAuD;IACvD,iBAAiB,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAI7D,oCAAoC;IACpC,OAAO,IAAI,IAAI;IAuDf,8CAA8C;IAC9C,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAO5B,wBAAwB;IACxB,IAAI,IAAI,IAAI;IAUZ,WAAW,IAAI,OAAO;IAItB,gEAAgE;YAClD,aAAa;IAwB3B,oDAAoD;YACtC,UAAU;IAIxB,sFAAsF;IACtF,OAAO,CAAC,aAAa;IAarB,yFAAyF;YAC3E,YAAY;IAa1B,yCAAyC;IACzC,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,iBAAiB;CAc1B"}
|