aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/workers/feedWorker.ts30
-rw-r--r--apps/workers/index.ts4
-rw-r--r--apps/workers/package.json6
3 files changed, 37 insertions, 3 deletions
diff --git a/apps/workers/feedWorker.ts b/apps/workers/feedWorker.ts
index 1bd24641..2f2c80f5 100644
--- a/apps/workers/feedWorker.ts
+++ b/apps/workers/feedWorker.ts
@@ -1,5 +1,6 @@
import { and, eq, inArray } from "drizzle-orm";
import { DequeuedJob, Runner } from "liteque";
+import cron from "node-cron";
import Parser from "rss-parser";
import { buildImpersonatingTRPCClient } from "trpc";
@@ -10,6 +11,35 @@ import logger from "@hoarder/shared/logger";
import { FeedQueue } from "@hoarder/shared/queues";
import { BookmarkTypes } from "@hoarder/shared/types/bookmarks";
+export const FeedRefreshingWorker = cron.schedule(
+ "0 * * * *",
+ () => {
+ logger.info("[feed] Scheduling feed refreshing jobs ...");
+ db.query.rssFeedsTable
+ .findMany({
+ columns: {
+ id: true,
+ },
+ })
+ .then((feeds) => {
+ for (const feed of feeds) {
+ FeedQueue.enqueue(
+ {
+ feedId: feed.id,
+ },
+ {
+ idempotencyKey: feed.id,
+ },
+ );
+ }
+ });
+ },
+ {
+ runOnInit: false,
+ scheduled: false,
+ },
+);
+
export class FeedWorker {
static build() {
logger.info("Starting feed worker ...");
diff --git a/apps/workers/index.ts b/apps/workers/index.ts
index c8978adc..e333ab0d 100644
--- a/apps/workers/index.ts
+++ b/apps/workers/index.ts
@@ -1,6 +1,6 @@
import "dotenv/config";
-import { FeedWorker } from "feedWorker";
+import { FeedRefreshingWorker, FeedWorker } from "feedWorker";
import { TidyAssetsWorker } from "tidyAssetsWorker";
import serverConfig from "@hoarder/shared/config";
@@ -25,6 +25,7 @@ async function main() {
VideoWorker.build(),
FeedWorker.build(),
];
+ FeedRefreshingWorker.start();
await Promise.any([
Promise.all([
@@ -41,6 +42,7 @@ async function main() {
"Shutting down crawler, openai, tidyAssets, video, feed and search workers ...",
);
+ FeedRefreshingWorker.stop();
crawler.stop();
openai.stop();
search.stop();
diff --git a/apps/workers/package.json b/apps/workers/package.json
index a7579319..597c5b14 100644
--- a/apps/workers/package.json
+++ b/apps/workers/package.json
@@ -16,7 +16,7 @@
"drizzle-orm": "^0.33.0",
"execa": "9.3.1",
"jsdom": "^24.0.0",
- "liteque": "^0.1.3",
+ "liteque": "^0.2.0",
"metascraper": "^5.45.24",
"metascraper-amazon": "^5.45.22",
"metascraper-description": "^5.45.22",
@@ -27,6 +27,7 @@
"metascraper-title": "^5.45.22",
"metascraper-twitter": "^5.45.6",
"metascraper-url": "^5.45.22",
+ "node-cron": "^3.0.3",
"pdf2json": "^3.0.5",
"pdfjs-dist": "^4.0.379",
"puppeteer": "^22.0.0",
@@ -44,7 +45,8 @@
"@hoarder/prettier-config": "workspace:^0.1.0",
"@types/dompurify": "^3.0.5",
"@types/jsdom": "^21.1.6",
- "@types/metascraper": "^5.14.3"
+ "@types/metascraper": "^5.14.3",
+ "@types/node-cron": "^3.0.11"
},
"scripts": {
"start": "tsx watch index.ts",