diff options
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/shared-server/src/queues.ts | 25 | ||||
| -rw-r--r-- | packages/trpc/routers/admin.ts | 30 | ||||
| -rw-r--r-- | packages/trpc/stats.ts | 4 |
3 files changed, 37 insertions, 22 deletions
diff --git a/packages/shared-server/src/queues.ts b/packages/shared-server/src/queues.ts index a666446e..813b9c3b 100644 --- a/packages/shared-server/src/queues.ts +++ b/packages/shared-server/src/queues.ts @@ -67,21 +67,34 @@ export const SearchIndexingQueue = keepFailedJobs: false, }); -// Tidy Assets Worker +// Admin maintenance worker export const zTidyAssetsRequestSchema = z.object({ cleanDanglingAssets: z.boolean().optional().default(false), syncAssetMetadata: z.boolean().optional().default(false), }); export type ZTidyAssetsRequest = z.infer<typeof zTidyAssetsRequestSchema>; -export const TidyAssetsQueue = QUEUE_CLIENT.createQueue<ZTidyAssetsRequest>( - "tidy_assets_queue", - { + +export const zAdminMaintenanceTaskSchema = z.discriminatedUnion("type", [ + z.object({ + type: z.literal("tidy_assets"), + args: zTidyAssetsRequestSchema, + }), +]); + +export type ZAdminMaintenanceTask = z.infer<typeof zAdminMaintenanceTaskSchema>; +export type ZAdminMaintenanceTaskType = ZAdminMaintenanceTask["type"]; +export type ZAdminMaintenanceTidyAssetsTask = Extract< + ZAdminMaintenanceTask, + { type: "tidy_assets" } +>; + +export const AdminMaintenanceQueue = + QUEUE_CLIENT.createQueue<ZAdminMaintenanceTask>("admin_maintenance_queue", { defaultJobArgs: { numRetries: 1, }, keepFailedJobs: false, - }, -); + }); export async function triggerSearchReindex( bookmarkId: string, diff --git a/packages/trpc/routers/admin.ts b/packages/trpc/routers/admin.ts index a40dfa6f..881d947c 100644 --- a/packages/trpc/routers/admin.ts +++ b/packages/trpc/routers/admin.ts @@ -4,15 +4,16 @@ import { z } from "zod"; import { assets, bookmarkLinks, bookmarks, users } from "@karakeep/db/schema"; import { + AdminMaintenanceQueue, AssetPreprocessingQueue, FeedQueue, LinkCrawlerQueue, OpenAIQueue, SearchIndexingQueue, - TidyAssetsQueue, triggerSearchReindex, VideoWorkerQueue, WebhookQueue, + zAdminMaintenanceTaskSchema, } from "@karakeep/shared-server"; import serverConfig from "@karakeep/shared/config"; import { PluginManager, PluginType } from "@karakeep/shared/plugins"; @@ -63,7 +64,7 @@ export const adminAppRouter = router({ indexingStats: z.object({ queued: z.number(), }), - tidyAssetsStats: z.object({ + adminMaintenanceStats: z.object({ queued: z.number(), }), videoStats: z.object({ @@ -95,8 +96,8 @@ export const adminAppRouter = router({ [{ value: pendingInference }], [{ value: failedInference }], - // Tidy Assets - queuedTidyAssets, + // Admin maintenance + queuedAdminMaintenance, // Video queuedVideo, @@ -145,8 +146,8 @@ export const adminAppRouter = router({ ), ), - // Tidy Assets - TidyAssetsQueue.stats(), + // Admin maintenance + AdminMaintenanceQueue.stats(), // Video VideoWorkerQueue.stats(), @@ -175,8 +176,10 @@ export const adminAppRouter = router({ indexingStats: { queued: queuedIndexing.pending + queuedIndexing.pending_retry, }, - tidyAssetsStats: { - queued: queuedTidyAssets.pending + queuedTidyAssets.pending_retry, + adminMaintenanceStats: { + queued: + queuedAdminMaintenance.pending + + queuedAdminMaintenance.pending_retry, }, videoStats: { queued: queuedVideo.pending + queuedVideo.pending_retry, @@ -277,12 +280,11 @@ export const adminAppRouter = router({ ), ); }), - tidyAssets: adminProcedure.mutation(async () => { - await TidyAssetsQueue.enqueue({ - cleanDanglingAssets: true, - syncAssetMetadata: true, - }); - }), + runAdminMaintenanceTask: adminProcedure + .input(zAdminMaintenanceTaskSchema) + .mutation(async ({ input }) => { + await AdminMaintenanceQueue.enqueue(input); + }), userStats: adminProcedure .output( z.record( diff --git a/packages/trpc/stats.ts b/packages/trpc/stats.ts index c6d5c94c..60766069 100644 --- a/packages/trpc/stats.ts +++ b/packages/trpc/stats.ts @@ -4,13 +4,13 @@ import { Counter, Gauge, Histogram, register } from "prom-client"; import { db } from "@karakeep/db"; import { assets, bookmarks, users } from "@karakeep/db/schema"; import { + AdminMaintenanceQueue, AssetPreprocessingQueue, FeedQueue, LinkCrawlerQueue, OpenAIQueue, RuleEngineQueue, SearchIndexingQueue, - TidyAssetsQueue, VideoWorkerQueue, WebhookQueue, } from "@karakeep/shared-server"; @@ -25,7 +25,7 @@ const queuePendingJobsGauge = new Gauge({ { name: "link_crawler", queue: LinkCrawlerQueue }, { name: "openai", queue: OpenAIQueue }, { name: "search_indexing", queue: SearchIndexingQueue }, - { name: "tidy_assets", queue: TidyAssetsQueue }, + { name: "admin_maintenance", queue: AdminMaintenanceQueue }, { name: "video_worker", queue: VideoWorkerQueue }, { name: "feed", queue: FeedQueue }, { name: "asset_preprocessing", queue: AssetPreprocessingQueue }, |
