diff options
| author | MohamedBassem <me@mbassem.com> | 2024-03-21 03:57:32 +0000 |
|---|---|---|
| committer | MohamedBassem <me@mbassem.com> | 2024-03-21 03:57:32 +0000 |
| commit | 5ea1f48e2359c70844c74708a85a2047fd2984b9 (patch) | |
| tree | 20ffd3de619c0d12b135ef2c42f942168f2e4009 /apps/workers | |
| parent | 13ed0720e8157897f3085ad7f7f721ff6e27017b (diff) | |
| download | karakeep-5ea1f48e2359c70844c74708a85a2047fd2984b9.tar.zst | |
fix(workers): Fix the leaky browser instances in workers during development
Diffstat (limited to 'apps/workers')
| -rw-r--r-- | apps/workers/crawlerWorker.ts | 58 | ||||
| -rw-r--r-- | apps/workers/exit.ts | 11 | ||||
| -rw-r--r-- | apps/workers/index.ts | 6 |
3 files changed, 46 insertions, 29 deletions
diff --git a/apps/workers/crawlerWorker.ts b/apps/workers/crawlerWorker.ts index ecd8d146..eb4a0697 100644 --- a/apps/workers/crawlerWorker.ts +++ b/apps/workers/crawlerWorker.ts @@ -1,40 +1,36 @@ -import logger from "@hoarder/shared/logger"; -import { - LinkCrawlerQueue, - OpenAIQueue, - SearchIndexingQueue, - ZCrawlLinkRequest, - queueConnectionDetails, - zCrawlLinkRequestSchema, -} from "@hoarder/shared/queues"; +import assert from "assert"; +import { Readability } from "@mozilla/readability"; +import { Mutex } from "async-mutex"; +import { Job, Worker } from "bullmq"; import DOMPurify from "dompurify"; +import { eq } from "drizzle-orm"; +import { isShuttingDown, shutdownPromise } from "exit"; import { JSDOM } from "jsdom"; - -import { Worker } from "bullmq"; -import { Job } from "bullmq"; - -import { db } from "@hoarder/db"; - -import { Browser } from "puppeteer"; -import puppeteer from "puppeteer-extra"; -import StealthPlugin from "puppeteer-extra-plugin-stealth"; -import AdblockerPlugin from "puppeteer-extra-plugin-adblocker"; - import metascraper from "metascraper"; - import metascraperDescription from "metascraper-description"; import metascraperImage from "metascraper-image"; import metascraperLogo from "metascraper-logo-favicon"; +import metascraperReadability from "metascraper-readability"; import metascraperTitle from "metascraper-title"; -import metascraperUrl from "metascraper-url"; import metascraperTwitter from "metascraper-twitter"; -import metascraperReadability from "metascraper-readability"; -import { Mutex } from "async-mutex"; -import assert from "assert"; -import serverConfig from "@hoarder/shared/config"; +import metascraperUrl from "metascraper-url"; +import { Browser } from "puppeteer"; +import puppeteer from "puppeteer-extra"; +import AdblockerPlugin from "puppeteer-extra-plugin-adblocker"; +import StealthPlugin from "puppeteer-extra-plugin-stealth"; + +import { db } from "@hoarder/db"; import { bookmarkLinks } from "@hoarder/db/schema"; -import { eq } from "drizzle-orm"; -import { Readability } from "@mozilla/readability"; +import serverConfig from "@hoarder/shared/config"; +import logger from "@hoarder/shared/logger"; +import { + LinkCrawlerQueue, + OpenAIQueue, + queueConnectionDetails, + SearchIndexingQueue, + ZCrawlLinkRequest, + zCrawlLinkRequestSchema, +} from "@hoarder/shared/queues"; const metascraperParser = metascraper([ metascraperReadability(), @@ -60,6 +56,12 @@ async function launchBrowser() { userDataDir: serverConfig.crawler.browserUserDataDir, }); browser.on("disconnected", async () => { + if (isShuttingDown) { + logger.info( + "The puppeteer browser got disconnected. But we're shutting down so won't restart it.", + ); + return; + } logger.info( "The puppeteer browser got disconnected. Will attempt to launch it again.", ); diff --git a/apps/workers/exit.ts b/apps/workers/exit.ts new file mode 100644 index 00000000..156cf2c6 --- /dev/null +++ b/apps/workers/exit.ts @@ -0,0 +1,11 @@ +import logger from "@hoarder/shared/logger"; + +export let isShuttingDown = false; + +export const shutdownPromise = new Promise((resolve) => { + process.on('SIGTERM', () => { + logger.info("Received SIGTERM, shutting down ..."); + isShuttingDown = true; + resolve(""); + }); +}); diff --git a/apps/workers/index.ts b/apps/workers/index.ts index 5b6b62d5..4db524ef 100644 --- a/apps/workers/index.ts +++ b/apps/workers/index.ts @@ -2,6 +2,7 @@ import "dotenv/config"; import { CrawlerWorker } from "./crawlerWorker"; import { OpenAiWorker } from "./openaiWorker"; import { SearchIndexingWorker } from "./searchWorker"; +import { shutdownPromise } from "./exit"; async function main() { const [crawler, openai, search] = [ @@ -10,7 +11,10 @@ async function main() { await SearchIndexingWorker.build(), ]; - await Promise.all([crawler.run(), openai.run(), search.run()]); + await Promise.any([ + Promise.all([crawler.run(), openai.run(), search.run()]), + shutdownPromise, + ]); } main(); |
