@rudderjs/horizon 4.1.0 → 6.0.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EACnD,cAAc,EAAE,SAAS,EAC1B,MAAM,YAAY,CAAA;AAInB,qBAAa,aAAc,YAAW,cAAc;IAMtC,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwC;IACvE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsC;IACpE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;gBAElC,OAAO,GAAE,MAAa;IAEnD,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAOhC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAKzD,UAAU,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,EAAE;IAIlD,UAAU,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,EAAE;IAIlD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAItC,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAQvC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,WAAW,EAAE;IASlD,cAAc,IAAI,WAAW,EAAE;IAI/B,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAItC,OAAO,IAAI,UAAU,EAAE;IAIvB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK3B,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAShC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM;IAKpC,OAAO,CAAC,UAAU;CAwBnB;AAID,qBAAa,aAAc,YAAW,cAAc;IAGtC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,EAAE,CAAiD;gBAE9B,MAAM,EAAE,MAAM;IAE3C,OAAO,CAAC,KAAK;IAYb,OAAO,CAAC,OAAO;IA6Cf,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAehC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAgBzD,UAAU,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,EAAE;IAIlD,UAAU,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,EAAE;IAIlD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAKtC,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAWvC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,WAAW,EAAE;IAOlD,cAAc,IAAI,WAAW,EAAE;IAS/B,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAQtC,OAAO,IAAI,UAAU,EAAE;IAavB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI3B,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAOhC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM;IASpC,OAAO,CAAC,SAAS;IAqBjB,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,aAAa;CAYtB"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
package/dist/storage.js CHANGED
@@ -15,8 +15,8 @@ export class MemoryStorage {
15
15
  this.jobs.length = this.maxJobs;
16
16
  }
17
17
  }
18
- updateJob(id, updates) {
19
- const job = this.jobs.find(j => j.id === id);
18
+ updateJob(queue, id, updates) {
19
+ const job = this.jobs.find(j => j.queue === queue && j.id === id);
20
20
  if (job)
21
21
  Object.assign(job, updates);
22
22
  }
@@ -26,8 +26,8 @@ export class MemoryStorage {
26
26
  failedJobs(options) {
27
27
  return this.filterJobs({ ...options, status: 'failed' });
28
28
  }
29
- findJob(id) {
30
- return this.jobs.find(j => j.id === id) ?? null;
29
+ findJob(queue, id) {
30
+ return this.jobs.find(j => j.queue === queue && j.id === id) ?? null;
31
31
  }
32
32
  recordMetric(metric) {
33
33
  this.latestMetrics.set(metric.queue, metric);
@@ -54,8 +54,8 @@ export class MemoryStorage {
54
54
  workers() {
55
55
  return [...this.workerMap.values()];
56
56
  }
57
- deleteJob(id) {
58
- const idx = this.jobs.findIndex(j => j.id === id);
57
+ deleteJob(queue, id) {
58
+ const idx = this.jobs.findIndex(j => j.queue === queue && j.id === id);
59
59
  if (idx !== -1)
60
60
  this.jobs.splice(idx, 1);
61
61
  }
@@ -112,11 +112,14 @@ export class SqliteStorage {
112
112
  return this.db;
113
113
  }
114
114
  migrate() {
115
+ // v2 table: composite PK so cross-queue id collisions (BullMQ assigns ids
116
+ // per-queue) don't clobber records. v1's `horizon_jobs` (single-column id
117
+ // PK) is left untouched on upgrade — pruneAfterHours ages it out.
115
118
  this.db.exec(`
116
- CREATE TABLE IF NOT EXISTS horizon_jobs (
117
- id TEXT PRIMARY KEY,
118
- name TEXT NOT NULL,
119
+ CREATE TABLE IF NOT EXISTS horizon_jobs_v2 (
119
120
  queue TEXT NOT NULL,
121
+ id TEXT NOT NULL,
122
+ name TEXT NOT NULL,
120
123
  status TEXT NOT NULL,
121
124
  payload TEXT NOT NULL DEFAULT '{}',
122
125
  attempts INTEGER NOT NULL DEFAULT 0,
@@ -125,10 +128,11 @@ export class SqliteStorage {
125
128
  started_at TEXT,
126
129
  completed_at TEXT,
127
130
  duration INTEGER,
128
- tags TEXT NOT NULL DEFAULT '[]'
131
+ tags TEXT NOT NULL DEFAULT '[]',
132
+ PRIMARY KEY (queue, id)
129
133
  );
130
- CREATE INDEX IF NOT EXISTS idx_horizon_status ON horizon_jobs(status, dispatched_at);
131
- CREATE INDEX IF NOT EXISTS idx_horizon_queue ON horizon_jobs(queue, dispatched_at);
134
+ CREATE INDEX IF NOT EXISTS idx_horizon_status ON horizon_jobs_v2(status, dispatched_at);
135
+ CREATE INDEX IF NOT EXISTS idx_horizon_queue ON horizon_jobs_v2(queue, dispatched_at);
132
136
 
133
137
  CREATE TABLE IF NOT EXISTS horizon_metrics (
134
138
  id TEXT PRIMARY KEY,
@@ -156,10 +160,10 @@ export class SqliteStorage {
156
160
  `);
157
161
  }
158
162
  recordJob(job) {
159
- this.getDb().prepare(`INSERT INTO horizon_jobs (id, name, queue, status, payload, attempts, exception, dispatched_at, started_at, completed_at, duration, tags)
160
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(job.id, job.name, job.queue, job.status, JSON.stringify(job.payload), job.attempts, job.exception, job.dispatchedAt.toISOString(), job.startedAt?.toISOString() ?? null, job.completedAt?.toISOString() ?? null, job.duration, JSON.stringify(job.tags));
163
+ this.getDb().prepare(`INSERT OR REPLACE INTO horizon_jobs_v2 (queue, id, name, status, payload, attempts, exception, dispatched_at, started_at, completed_at, duration, tags)
164
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(job.queue, job.id, job.name, job.status, JSON.stringify(job.payload), job.attempts, job.exception, job.dispatchedAt.toISOString(), job.startedAt?.toISOString() ?? null, job.completedAt?.toISOString() ?? null, job.duration, JSON.stringify(job.tags));
161
165
  }
162
- updateJob(id, updates) {
166
+ updateJob(queue, id, updates) {
163
167
  const sets = [];
164
168
  const params = [];
165
169
  if (updates.status !== undefined) {
@@ -188,8 +192,8 @@ export class SqliteStorage {
188
192
  }
189
193
  if (sets.length === 0)
190
194
  return;
191
- params.push(id);
192
- this.getDb().prepare(`UPDATE horizon_jobs SET ${sets.join(', ')} WHERE id = ?`).run(...params);
195
+ params.push(queue, id);
196
+ this.getDb().prepare(`UPDATE horizon_jobs_v2 SET ${sets.join(', ')} WHERE queue = ? AND id = ?`).run(...params);
193
197
  }
194
198
  recentJobs(options) {
195
199
  return this.queryJobs(options);
@@ -197,8 +201,8 @@ export class SqliteStorage {
197
201
  failedJobs(options) {
198
202
  return this.queryJobs({ ...options, status: 'failed' });
199
203
  }
200
- findJob(id) {
201
- const row = this.getDb().prepare('SELECT * FROM horizon_jobs WHERE id = ?').get(id);
204
+ findJob(queue, id) {
205
+ const row = this.getDb().prepare('SELECT * FROM horizon_jobs_v2 WHERE queue = ? AND id = ?').get(queue, id);
202
206
  return row ? this.jobFromRow(row) : null;
203
207
  }
204
208
  recordMetric(metric) {
@@ -231,21 +235,21 @@ export class SqliteStorage {
231
235
  lastJobAt: r['last_job_at'] ? new Date(r['last_job_at']) : null,
232
236
  }));
233
237
  }
234
- deleteJob(id) {
235
- this.getDb().prepare('DELETE FROM horizon_jobs WHERE id = ?').run(id);
238
+ deleteJob(queue, id) {
239
+ this.getDb().prepare('DELETE FROM horizon_jobs_v2 WHERE queue = ? AND id = ?').run(queue, id);
236
240
  }
237
241
  pruneOlderThan(date) {
238
242
  const iso = date.toISOString();
239
243
  const db = this.getDb();
240
- db.prepare('DELETE FROM horizon_jobs WHERE dispatched_at < ?').run(iso);
244
+ db.prepare('DELETE FROM horizon_jobs_v2 WHERE dispatched_at < ?').run(iso);
241
245
  db.prepare('DELETE FROM horizon_metrics WHERE created_at < ?').run(iso);
242
246
  }
243
247
  jobCount(status) {
244
248
  if (status) {
245
- const row = this.getDb().prepare('SELECT COUNT(*) as cnt FROM horizon_jobs WHERE status = ?').get(status);
249
+ const row = this.getDb().prepare('SELECT COUNT(*) as cnt FROM horizon_jobs_v2 WHERE status = ?').get(status);
246
250
  return row.cnt;
247
251
  }
248
- const row = this.getDb().prepare('SELECT COUNT(*) as cnt FROM horizon_jobs').get();
252
+ const row = this.getDb().prepare('SELECT COUNT(*) as cnt FROM horizon_jobs_v2').get();
249
253
  return row.cnt;
250
254
  }
251
255
  queryJobs(options) {
@@ -268,7 +272,7 @@ export class SqliteStorage {
268
272
  const perPage = options?.perPage ?? 50;
269
273
  const offset = (page - 1) * perPage;
270
274
  params.push(perPage, offset);
271
- const rows = this.getDb().prepare(`SELECT * FROM horizon_jobs ${where} ORDER BY dispatched_at DESC LIMIT ? OFFSET ?`).all(...params);
275
+ const rows = this.getDb().prepare(`SELECT * FROM horizon_jobs_v2 ${where} ORDER BY dispatched_at DESC LIMIT ? OFFSET ?`).all(...params);
272
276
  return rows.map(r => this.jobFromRow(r));
273
277
  }
274
278
  jobFromRow(r) {
@@ -300,4 +304,366 @@ export class SqliteStorage {
300
304
  };
301
305
  }
302
306
  }
307
+ /**
308
+ * Cross-process job/metric/worker store backed by Redis. Works alongside
309
+ * BullMQ's own Redis instance (separate connection by default) so the dev
310
+ * server and worker process share state.
311
+ *
312
+ * Falls back to memory if `ioredis` cannot be imported — the boot warning
313
+ * surfaces the misconfig.
314
+ */
315
+ export class RedisStorage {
316
+ config;
317
+ maxJobs;
318
+ client = null;
319
+ prefix;
320
+ constructor(config = {}, maxJobs = 1000) {
321
+ this.config = config;
322
+ this.maxJobs = maxJobs;
323
+ this.prefix = `${config.prefix ?? 'rudderjs'}:horizon`;
324
+ }
325
+ async getClient() {
326
+ if (this.client)
327
+ return this.client;
328
+ const mod = await import(/* @vite-ignore */ 'ioredis');
329
+ const Redis = mod.default;
330
+ this.client = new Redis(this.connectionOpts());
331
+ return this.client;
332
+ }
333
+ connectionOpts() {
334
+ const c = this.config;
335
+ if (c.url) {
336
+ try {
337
+ const u = new URL(c.url.replace(/^rediss?:\/\//, 'http://'));
338
+ return {
339
+ host: u.hostname || '127.0.0.1',
340
+ port: parseInt(u.port || '6379', 10),
341
+ ...(u.password ? { password: decodeURIComponent(u.password) } : {}),
342
+ ...(u.pathname.length > 1 ? { db: parseInt(u.pathname.slice(1), 10) } : {}),
343
+ lazyConnect: false,
344
+ };
345
+ }
346
+ catch { /* fall through */ }
347
+ }
348
+ return {
349
+ host: c.host ?? '127.0.0.1',
350
+ port: c.port ?? 6379,
351
+ ...(c.password ? { password: c.password } : {}),
352
+ lazyConnect: false,
353
+ };
354
+ }
355
+ // ─── Keys ────────────────────────────────────────────────
356
+ //
357
+ // Job records are stored at `jobs:{queue}:{id}`. BullMQ assigns ids
358
+ // per-queue (each queue starts at 1), so keying by id alone collides
359
+ // across queues. The `recent` and `failed` ZSets store members as
360
+ // `{queue}:{id}` so the listing path can split + lookup.
361
+ k = {
362
+ job: (queue, id) => `${this.prefix}:jobs:${queue}:${id}`,
363
+ recent: () => `${this.prefix}:jobs:recent`,
364
+ failed: () => `${this.prefix}:jobs:failed`,
365
+ byQueue: (q) => `${this.prefix}:jobs:by-queue:${q}`,
366
+ metricCurrent: (q) => `${this.prefix}:metrics:${q}:current`,
367
+ metricHistory: (q) => `${this.prefix}:metrics:${q}:history`,
368
+ worker: (id) => `${this.prefix}:workers:${id}`,
369
+ workersIndex: () => `${this.prefix}:workers`,
370
+ };
371
+ member(queue, id) {
372
+ return `${queue}:${id}`;
373
+ }
374
+ parseMember(member) {
375
+ const idx = member.indexOf(':');
376
+ if (idx === -1)
377
+ return null; // legacy v1 member; skip
378
+ return { queue: member.slice(0, idx), id: member.slice(idx + 1) };
379
+ }
380
+ // ─── Jobs ────────────────────────────────────────────────
381
+ async recordJob(job) {
382
+ const r = await this.getClient();
383
+ const m = this.member(job.queue, job.id);
384
+ const key = this.k.job(job.queue, job.id);
385
+ // Idempotent fields — same value across the lifecycle, safe to overwrite.
386
+ await r.hset(key, {
387
+ id: job.id,
388
+ name: job.name,
389
+ queue: job.queue,
390
+ payload: JSON.stringify(job.payload),
391
+ dispatchedAt: job.dispatchedAt.toISOString(),
392
+ tags: JSON.stringify(job.tags),
393
+ });
394
+ // Lifecycle fields — set only if not already written. The dashboard
395
+ // process emits `job.dispatched` and queues an async storage write via
396
+ // microtask; the worker process can update the record to `processing`
397
+ // / `completed` BEFORE that microtask flushes (the dispatcher races
398
+ // BullMQ's polling). Plain HSET would let a late dispatched-write
399
+ // clobber the worker's status. HSETNX makes recordJob idempotent for
400
+ // these fields so worker updates always win.
401
+ await Promise.all([
402
+ r.hsetnx(key, 'status', job.status),
403
+ r.hsetnx(key, 'attempts', job.attempts),
404
+ r.hsetnx(key, 'startedAt', job.startedAt ? job.startedAt.toISOString() : ''),
405
+ r.hsetnx(key, 'completedAt', job.completedAt ? job.completedAt.toISOString() : ''),
406
+ r.hsetnx(key, 'duration', job.duration ?? -1),
407
+ r.hsetnx(key, 'exception', job.exception ?? ''),
408
+ ]);
409
+ const score = job.dispatchedAt.getTime();
410
+ await r.zadd(this.k.recent(), score, m);
411
+ await r.zadd(this.k.byQueue(job.queue), score, job.id);
412
+ if (job.status === 'failed') {
413
+ await r.zadd(this.k.failed(), score, m);
414
+ }
415
+ // Cap recent index to maxJobs (drop oldest)
416
+ const count = await r.zcard(this.k.recent());
417
+ if (count > this.maxJobs) {
418
+ await r.zremrangebyrank(this.k.recent(), 0, count - this.maxJobs - 1);
419
+ }
420
+ }
421
+ async updateJob(queue, id, updates) {
422
+ const r = await this.getClient();
423
+ const fields = {};
424
+ if (updates.status !== undefined)
425
+ fields['status'] = updates.status;
426
+ if (updates.attempts !== undefined)
427
+ fields['attempts'] = updates.attempts;
428
+ if (updates.exception !== undefined)
429
+ fields['exception'] = updates.exception ?? '';
430
+ if (updates.startedAt !== undefined)
431
+ fields['startedAt'] = updates.startedAt ? updates.startedAt.toISOString() : '';
432
+ if (updates.completedAt !== undefined)
433
+ fields['completedAt'] = updates.completedAt ? updates.completedAt.toISOString() : '';
434
+ if (updates.duration !== undefined)
435
+ fields['duration'] = updates.duration ?? -1;
436
+ if (updates.payload !== undefined)
437
+ fields['payload'] = JSON.stringify(updates.payload);
438
+ if (updates.tags !== undefined)
439
+ fields['tags'] = JSON.stringify(updates.tags);
440
+ if (Object.keys(fields).length === 0)
441
+ return;
442
+ await r.hset(this.k.job(queue, id), fields);
443
+ const m = this.member(queue, id);
444
+ if (updates.status === 'failed') {
445
+ const job = await this.findJob(queue, id);
446
+ if (job)
447
+ await r.zadd(this.k.failed(), job.dispatchedAt.getTime(), m);
448
+ }
449
+ else if (updates.status === 'completed') {
450
+ await r.zrem(this.k.failed(), m);
451
+ }
452
+ }
453
+ async recentJobs(options) {
454
+ return this.listJobs(this.k.recent(), options);
455
+ }
456
+ async failedJobs(options) {
457
+ return this.listJobs(this.k.failed(), { ...options, status: 'failed' });
458
+ }
459
+ async findJob(queue, id) {
460
+ const r = await this.getClient();
461
+ const hash = await r.hgetall(this.k.job(queue, id));
462
+ if (!hash || Object.keys(hash).length === 0)
463
+ return null;
464
+ return this.jobFromHash(hash);
465
+ }
466
+ async deleteJob(queue, id) {
467
+ const r = await this.getClient();
468
+ const m = this.member(queue, id);
469
+ await r.del(this.k.job(queue, id));
470
+ await r.zrem(this.k.recent(), m);
471
+ await r.zrem(this.k.failed(), m);
472
+ }
473
+ async pruneOlderThan(date) {
474
+ const r = await this.getClient();
475
+ const cut = date.getTime();
476
+ const members = await r.zrangebyscore(this.k.recent(), '-inf', cut);
477
+ if (members.length === 0)
478
+ return;
479
+ await Promise.all(members.map(m => {
480
+ const parsed = this.parseMember(m);
481
+ return parsed ? r.del(this.k.job(parsed.queue, parsed.id)) : Promise.resolve(0);
482
+ }));
483
+ await r.zremrangebyscore(this.k.recent(), '-inf', cut);
484
+ await r.zremrangebyscore(this.k.failed(), '-inf', cut);
485
+ }
486
+ async jobCount(status) {
487
+ const r = await this.getClient();
488
+ if (!status)
489
+ return r.zcard(this.k.recent());
490
+ if (status === 'failed')
491
+ return r.zcard(this.k.failed());
492
+ // For other statuses we'd have to scan — keep the count approximate by
493
+ // listing then filtering. Cheap relative to the dashboard's polling rate.
494
+ const jobs = await this.listJobs(this.k.recent(), { perPage: this.maxJobs });
495
+ return jobs.filter(j => j.status === status).length;
496
+ }
497
+ // ─── Metrics ─────────────────────────────────────────────
498
+ async recordMetric(metric) {
499
+ const r = await this.getClient();
500
+ await r.hset(this.k.metricCurrent(metric.queue), this.metricToHash(metric));
501
+ const ts = Date.now();
502
+ await r.zadd(this.k.metricHistory(metric.queue), ts, JSON.stringify({ ts, ...metric }));
503
+ const count = await r.zcard(this.k.metricHistory(metric.queue));
504
+ if (count > 1440) {
505
+ await r.zremrangebyrank(this.k.metricHistory(metric.queue), 0, count - 1441);
506
+ }
507
+ }
508
+ async metrics(queue, since) {
509
+ const r = await this.getClient();
510
+ const members = await r.zrangebyscore(this.k.metricHistory(queue), since.getTime(), '+inf');
511
+ return members.map(m => {
512
+ const { ts: _ts, ...rest } = JSON.parse(m);
513
+ void _ts;
514
+ return rest;
515
+ });
516
+ }
517
+ async currentMetrics() {
518
+ const r = await this.getClient();
519
+ // Discover queue names directly from the recent-jobs zset members
520
+ // (now `{queue}:{id}`) — no per-record hgetall needed.
521
+ const members = await r.zrevrange(this.k.recent(), 0, Math.min(this.maxJobs, 500) - 1);
522
+ if (members.length === 0)
523
+ return [];
524
+ const queues = new Set();
525
+ for (const m of members) {
526
+ const parsed = this.parseMember(m);
527
+ if (parsed)
528
+ queues.add(parsed.queue);
529
+ }
530
+ const metrics = [];
531
+ for (const q of queues) {
532
+ const hash = await r.hgetall(this.k.metricCurrent(q));
533
+ if (hash && Object.keys(hash).length > 0)
534
+ metrics.push(this.metricFromHash(hash));
535
+ }
536
+ return metrics;
537
+ }
538
+ // ─── Workers ─────────────────────────────────────────────
539
+ async recordWorker(worker) {
540
+ const r = await this.getClient();
541
+ await r.hset(this.k.worker(worker.id), {
542
+ id: worker.id,
543
+ queue: worker.queue,
544
+ status: worker.status,
545
+ jobsRun: worker.jobsRun,
546
+ memoryMb: worker.memoryMb,
547
+ startedAt: worker.startedAt.toISOString(),
548
+ lastJobAt: worker.lastJobAt ? worker.lastJobAt.toISOString() : '',
549
+ });
550
+ await r.sadd(this.k.workersIndex(), worker.id);
551
+ }
552
+ async workers() {
553
+ const r = await this.getClient();
554
+ const ids = await r.smembers(this.k.workersIndex());
555
+ if (ids.length === 0)
556
+ return [];
557
+ const out = [];
558
+ for (const id of ids) {
559
+ const h = await r.hgetall(this.k.worker(id));
560
+ if (!h || Object.keys(h).length === 0)
561
+ continue;
562
+ out.push({
563
+ id: h['id'] ?? id,
564
+ queue: h['queue'] ?? 'default',
565
+ status: h['status'] ?? 'idle',
566
+ jobsRun: parseInt(h['jobsRun'] ?? '0', 10),
567
+ memoryMb: parseFloat(h['memoryMb'] ?? '0'),
568
+ startedAt: new Date(h['startedAt'] ?? Date.now()),
569
+ lastJobAt: h['lastJobAt'] ? new Date(h['lastJobAt']) : null,
570
+ });
571
+ }
572
+ return out;
573
+ }
574
+ /** @internal — close the Redis connection. Used in tests + shutdown. */
575
+ async disconnect() {
576
+ if (this.client) {
577
+ try {
578
+ await this.client.quit();
579
+ }
580
+ catch { /* already closed */ }
581
+ this.client = null;
582
+ }
583
+ }
584
+ // ─── Hash <-> object ─────────────────────────────────────
585
+ jobToHash(j) {
586
+ return {
587
+ id: j.id,
588
+ name: j.name,
589
+ queue: j.queue,
590
+ status: j.status,
591
+ payload: JSON.stringify(j.payload),
592
+ attempts: j.attempts,
593
+ exception: j.exception ?? '',
594
+ dispatchedAt: j.dispatchedAt.toISOString(),
595
+ startedAt: j.startedAt ? j.startedAt.toISOString() : '',
596
+ completedAt: j.completedAt ? j.completedAt.toISOString() : '',
597
+ duration: j.duration ?? -1,
598
+ tags: JSON.stringify(j.tags),
599
+ };
600
+ }
601
+ jobFromHash(h) {
602
+ const dur = parseInt(h['duration'] ?? '-1', 10);
603
+ return {
604
+ id: h['id'] ?? '',
605
+ name: h['name'] ?? '',
606
+ queue: h['queue'] ?? 'default',
607
+ status: h['status'] ?? 'pending',
608
+ payload: h['payload'] ? JSON.parse(h['payload']) : {},
609
+ attempts: parseInt(h['attempts'] ?? '0', 10),
610
+ exception: h['exception'] ? h['exception'] : null,
611
+ dispatchedAt: h['dispatchedAt'] ? new Date(h['dispatchedAt']) : new Date(0),
612
+ startedAt: h['startedAt'] ? new Date(h['startedAt']) : null,
613
+ completedAt: h['completedAt'] ? new Date(h['completedAt']) : null,
614
+ duration: dur < 0 ? null : dur,
615
+ tags: h['tags'] ? JSON.parse(h['tags']) : [],
616
+ };
617
+ }
618
+ metricToHash(m) {
619
+ return {
620
+ queue: m.queue, throughput: m.throughput, waitTime: m.waitTime, runtime: m.runtime,
621
+ pending: m.pending, active: m.active, completed: m.completed, failed: m.failed,
622
+ };
623
+ }
624
+ metricFromHash(h) {
625
+ return {
626
+ queue: h['queue'] ?? 'default',
627
+ throughput: parseFloat(h['throughput'] ?? '0'),
628
+ waitTime: parseFloat(h['waitTime'] ?? '0'),
629
+ runtime: parseFloat(h['runtime'] ?? '0'),
630
+ pending: parseInt(h['pending'] ?? '0', 10),
631
+ active: parseInt(h['active'] ?? '0', 10),
632
+ completed: parseInt(h['completed'] ?? '0', 10),
633
+ failed: parseInt(h['failed'] ?? '0', 10),
634
+ };
635
+ }
636
+ async listJobs(indexKey, options) {
637
+ const r = await this.getClient();
638
+ const page = options?.page ?? 1;
639
+ const perPage = options?.perPage ?? 50;
640
+ const start = (page - 1) * perPage;
641
+ const members = await r.zrevrange(indexKey, start, start + perPage * 4);
642
+ if (members.length === 0)
643
+ return [];
644
+ const pipe = r.pipeline();
645
+ for (const m of members) {
646
+ const parsed = this.parseMember(m);
647
+ if (parsed)
648
+ pipe.hgetall(this.k.job(parsed.queue, parsed.id));
649
+ }
650
+ const rows = await pipe.exec() ?? [];
651
+ let jobs = [];
652
+ for (const [, hash] of rows) {
653
+ const h = hash;
654
+ if (h && Object.keys(h).length > 0)
655
+ jobs.push(this.jobFromHash(h));
656
+ }
657
+ if (options?.status)
658
+ jobs = jobs.filter(j => j.status === options.status);
659
+ if (options?.queue)
660
+ jobs = jobs.filter(j => j.queue === options.queue);
661
+ if (options?.search) {
662
+ const s = options.search.toLowerCase();
663
+ jobs = jobs.filter(j => j.name.toLowerCase().includes(s) ||
664
+ JSON.stringify(j.payload).toLowerCase().includes(s));
665
+ }
666
+ return jobs.slice(0, perPage);
667
+ }
668
+ }
303
669
  //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}