From a9141a41b81611c189a23439c6355a7f71844972 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerg=C5=91=20M=C3=B3ricz?= Date: Wed, 13 Aug 2025 19:17:39 +0200 Subject: [PATCH] fix(api/admin/metrics): store queues in a set --- apps/api/src/controllers/v0/admin/metrics.ts | 11 ++++++++--- apps/api/src/lib/concurrency-limit.ts | 8 +++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/apps/api/src/controllers/v0/admin/metrics.ts b/apps/api/src/controllers/v0/admin/metrics.ts index 9e167d708..43b6288d4 100644 --- a/apps/api/src/controllers/v0/admin/metrics.ts +++ b/apps/api/src/controllers/v0/admin/metrics.ts @@ -5,15 +5,20 @@ export async function metricsController(_: Request, res: Response) { let cursor: string = "0"; const metrics: Record = {}; do { - const res = await redisEvictConnection.scan(cursor, "MATCH", "concurrency-limit-queue:*"); + const res = await redisEvictConnection.sscan("concurrency-limit-queues", cursor); cursor = res[0]; const keys = res[1]; for (const key of keys) { - const teamId = key.split(":")[1]; const jobCount = await redisEvictConnection.zcard(key); - metrics[teamId] = jobCount; + + if (jobCount === 0) { + await redisEvictConnection.srem("concurrency-limit-queues", key); + } else { + const teamId = key.split(":")[1]; + metrics[teamId] = jobCount; + } } } while (cursor !== "0"); diff --git a/apps/api/src/lib/concurrency-limit.ts b/apps/api/src/lib/concurrency-limit.ts index 022f3523b..7fbb7837b 100644 --- a/apps/api/src/lib/concurrency-limit.ts +++ b/apps/api/src/lib/concurrency-limit.ts @@ -75,11 +75,9 @@ export async function pushConcurrencyLimitedJob( timeout: number, now: number = Date.now(), ) { - await redisEvictConnection.zadd( - constructQueueKey(team_id), - now + timeout, - JSON.stringify(job), - ); + const queueKey = constructQueueKey(team_id); + await redisEvictConnection.zadd(queueKey, now + timeout, JSON.stringify(job)); + await redisEvictConnection.sadd("concurrency-limit-queues", queueKey); } export async function getConcurrencyLimitedJobs(