aboutsummaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/shared-server/src/queues.ts25
-rw-r--r--packages/trpc/routers/admin.ts30
-rw-r--r--packages/trpc/stats.ts4
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 },