aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-04-12 00:15:37 +0300
committerMohamedBassem <me@mbassem.com>2024-04-12 00:15:37 +0300
commitcf0df0e6d84a76649d8cbf8adcbf83efb6e883ab (patch)
tree1c492f77ae90de7ec96e32054cc229160331e31a
parent95cf8f47300d6eb6efe36d44bcab0f44a8e27585 (diff)
downloadkarakeep-cf0df0e6d84a76649d8cbf8adcbf83efb6e883ab.tar.zst
fix: Differentiate between pending in db and in redis in admin job stats
-rw-r--r--apps/web/app/dashboard/admin/page.tsx18
-rw-r--r--apps/workers/searchWorker.ts2
-rw-r--r--packages/trpc/routers/admin.ts70
3 files changed, 64 insertions, 26 deletions
diff --git a/apps/web/app/dashboard/admin/page.tsx b/apps/web/app/dashboard/admin/page.tsx
index c1fa4dee..65ac44e1 100644
--- a/apps/web/app/dashboard/admin/page.tsx
+++ b/apps/web/app/dashboard/admin/page.tsx
@@ -163,24 +163,28 @@ function ServerStatsSection() {
<Table className="lg:w-1/2">
<TableHeader>
<TableHead>Job</TableHead>
+ <TableHead>Queued</TableHead>
<TableHead>Pending</TableHead>
<TableHead>Failed</TableHead>
</TableHeader>
<TableBody>
<TableRow>
<TableCell className="lg:w-2/3">Crawling Jobs</TableCell>
- <TableCell>{serverStats.pendingCrawls}</TableCell>
- <TableCell>{serverStats.failedCrawls}</TableCell>
+ <TableCell>{serverStats.crawlStats.queuedInRedis}</TableCell>
+ <TableCell>{serverStats.crawlStats.pending}</TableCell>
+ <TableCell>{serverStats.crawlStats.failed}</TableCell>
</TableRow>
<TableRow>
<TableCell>Indexing Jobs</TableCell>
- <TableCell>{serverStats.pendingIndexing}</TableCell>
- <TableCell>{serverStats.failedIndexing}</TableCell>
+ <TableCell>{serverStats.indexingStats.queuedInRedis}</TableCell>
+ <TableCell>-</TableCell>
+ <TableCell>-</TableCell>
</TableRow>
<TableRow>
- <TableCell>OpenAI Jobs</TableCell>
- <TableCell>{serverStats.pendingOpenai}</TableCell>
- <TableCell>{serverStats.failedOpenai}</TableCell>
+ <TableCell>Inference Jobs</TableCell>
+ <TableCell>{serverStats.inferenceStats.queuedInRedis}</TableCell>
+ <TableCell>{serverStats.inferenceStats.pending}</TableCell>
+ <TableCell>{serverStats.inferenceStats.failed}</TableCell>
</TableRow>
</TableBody>
</Table>
diff --git a/apps/workers/searchWorker.ts b/apps/workers/searchWorker.ts
index fcef7a1b..42a28bc1 100644
--- a/apps/workers/searchWorker.ts
+++ b/apps/workers/searchWorker.ts
@@ -32,7 +32,7 @@ export class SearchIndexingWorker {
worker.on("failed", (job, error) => {
const jobId = job?.id ?? "unknown";
- logger.error(`[search][${jobId}] openai job failed: ${error}`);
+ logger.error(`[search][${jobId}] search job failed: ${error}`);
});
return worker;
diff --git a/packages/trpc/routers/admin.ts b/packages/trpc/routers/admin.ts
index c88a9b00..8792f7ed 100644
--- a/packages/trpc/routers/admin.ts
+++ b/packages/trpc/routers/admin.ts
@@ -16,27 +16,44 @@ export const adminAppRouter = router({
z.object({
numUsers: z.number(),
numBookmarks: z.number(),
- pendingCrawls: z.number(),
- failedCrawls: z.number(),
- pendingIndexing: z.number(),
- failedIndexing: z.number(),
- pendingOpenai: z.number(),
- failedOpenai: z.number(),
+ crawlStats: z.object({
+ queuedInRedis: z.number(),
+ pending: z.number(),
+ failed: z.number(),
+ }),
+ inferenceStats: z.object({
+ queuedInRedis: z.number(),
+ pending: z.number(),
+ failed: z.number(),
+ }),
+ indexingStats: z.object({
+ queuedInRedis: z.number(),
+ }),
}),
)
.query(async ({ ctx }) => {
const [
[{ value: numUsers }],
[{ value: numBookmarks }],
+
+ // Crawls
+ pendingCrawlsInRedis,
[{ value: pendingCrawls }],
[{ value: failedCrawls }],
- pendingIndexing,
- failedIndexing,
- pendingOpenai,
- failedOpenai,
+
+ // Indexing
+ pendingIndexingInRedis,
+
+ // Inference
+ pendingInferenceInRedis,
+ [{ value: pendingInference }],
+ [{ value: failedInference }],
] = await Promise.all([
ctx.db.select({ value: count() }).from(users),
ctx.db.select({ value: count() }).from(bookmarks),
+
+ // Crawls
+ LinkCrawlerQueue.getWaitingCount(),
ctx.db
.select({ value: count() })
.from(bookmarkLinks)
@@ -45,21 +62,38 @@ export const adminAppRouter = router({
.select({ value: count() })
.from(bookmarkLinks)
.where(eq(bookmarkLinks.crawlStatus, "failure")),
+
+ // Indexing
SearchIndexingQueue.getWaitingCount(),
- SearchIndexingQueue.getFailedCount(),
+
+ // Inference
OpenAIQueue.getWaitingCount(),
- OpenAIQueue.getFailedCount(),
+ ctx.db
+ .select({ value: count() })
+ .from(bookmarks)
+ .where(eq(bookmarks.taggingStatus, "pending")),
+ ctx.db
+ .select({ value: count() })
+ .from(bookmarks)
+ .where(eq(bookmarks.taggingStatus, "failure")),
]);
return {
numUsers,
numBookmarks,
- pendingCrawls,
- failedCrawls,
- pendingIndexing,
- failedIndexing,
- pendingOpenai,
- failedOpenai,
+ crawlStats: {
+ queuedInRedis: pendingCrawlsInRedis,
+ pending: pendingCrawls,
+ failed: failedCrawls,
+ },
+ inferenceStats: {
+ queuedInRedis: pendingInferenceInRedis,
+ pending: pendingInference,
+ failed: failedInference,
+ },
+ indexingStats: {
+ queuedInRedis: pendingIndexingInRedis,
+ },
};
}),
recrawlLinks: adminProcedure