aboutsummaryrefslogtreecommitdiffstats
path: root/packages/trpc/routers
diff options
context:
space:
mode:
authorAhmad Mujahid <55625580+AhmadMuj@users.noreply.github.com>2024-04-12 00:52:53 +0400
committerGitHub <noreply@github.com>2024-04-11 23:52:53 +0300
commit95cf8f47300d6eb6efe36d44bcab0f44a8e27585 (patch)
treedcc64d69e11c80d4b84e977e5b27d135a8d28918 /packages/trpc/routers
parent238c2967b269ca0f66d8e759c6a0234107e1fd1e (diff)
downloadkarakeep-95cf8f47300d6eb6efe36d44bcab0f44a8e27585.tar.zst
feature: Recrawl failed links from admin UI (#95)
* feature: Retry failed crawling URLs * fix: Enhancing visuals and some minor changes.
Diffstat (limited to 'packages/trpc/routers')
-rw-r--r--packages/trpc/routers/admin.ts64
1 files changed, 45 insertions, 19 deletions
diff --git a/packages/trpc/routers/admin.ts b/packages/trpc/routers/admin.ts
index 4a7c6a80..c88a9b00 100644
--- a/packages/trpc/routers/admin.ts
+++ b/packages/trpc/routers/admin.ts
@@ -1,7 +1,7 @@
-import { count } from "drizzle-orm";
+import { count, eq } from "drizzle-orm";
import { z } from "zod";
-import { bookmarks, users } from "@hoarder/db/schema";
+import { bookmarkLinks, bookmarks, users } from "@hoarder/db/schema";
import {
LinkCrawlerQueue,
OpenAIQueue,
@@ -17,49 +17,75 @@ export const adminAppRouter = router({
numUsers: z.number(),
numBookmarks: z.number(),
pendingCrawls: z.number(),
+ failedCrawls: z.number(),
pendingIndexing: z.number(),
+ failedIndexing: z.number(),
pendingOpenai: z.number(),
+ failedOpenai: z.number(),
}),
)
.query(async ({ ctx }) => {
const [
[{ value: numUsers }],
[{ value: numBookmarks }],
- pendingCrawls,
+ [{ value: pendingCrawls }],
+ [{ value: failedCrawls }],
pendingIndexing,
+ failedIndexing,
pendingOpenai,
+ failedOpenai,
] = await Promise.all([
ctx.db.select({ value: count() }).from(users),
ctx.db.select({ value: count() }).from(bookmarks),
- LinkCrawlerQueue.getWaitingCount(),
+ ctx.db
+ .select({ value: count() })
+ .from(bookmarkLinks)
+ .where(eq(bookmarkLinks.crawlStatus, "pending")),
+ ctx.db
+ .select({ value: count() })
+ .from(bookmarkLinks)
+ .where(eq(bookmarkLinks.crawlStatus, "failure")),
SearchIndexingQueue.getWaitingCount(),
+ SearchIndexingQueue.getFailedCount(),
OpenAIQueue.getWaitingCount(),
+ OpenAIQueue.getFailedCount(),
]);
return {
numUsers,
numBookmarks,
pendingCrawls,
+ failedCrawls,
pendingIndexing,
+ failedIndexing,
pendingOpenai,
+ failedOpenai,
};
}),
- recrawlAllLinks: adminProcedure.mutation(async ({ ctx }) => {
- const bookmarkIds = await ctx.db.query.bookmarkLinks.findMany({
- columns: {
- id: true,
- },
- });
-
- await Promise.all(
- bookmarkIds.map((b) =>
- LinkCrawlerQueue.add("crawl", {
- bookmarkId: b.id,
- }),
- ),
- );
- }),
+ recrawlLinks: adminProcedure
+ .input(
+ z.object({
+ crawlStatus: z.enum(["success", "failure", "all"]),
+ }),
+ )
+ .mutation(async ({ ctx, input }) => {
+ const bookmarkIds = await ctx.db.query.bookmarkLinks.findMany({
+ columns: {
+ id: true,
+ },
+ ...(input.crawlStatus === "all"
+ ? {}
+ : { where: eq(bookmarkLinks.crawlStatus, input.crawlStatus) }),
+ });
+ await Promise.all(
+ bookmarkIds.map((b) =>
+ LinkCrawlerQueue.add("crawl", {
+ bookmarkId: b.id,
+ }),
+ ),
+ );
+ }),
reindexAllBookmarks: adminProcedure.mutation(async ({ ctx }) => {
const bookmarkIds = await ctx.db.query.bookmarks.findMany({
columns: {