mirror of
https://github.com/versia-pub/server.git
synced 2026-03-13 05:49:16 +01:00
feat: ✨ Split off queue workers into a separate worker process
This commit is contained in:
parent
0b3e74107e
commit
1b98381242
34 changed files with 987 additions and 676 deletions
29
entrypoints/worker/index.ts
Normal file
29
entrypoints/worker/index.ts
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
import { sentry } from "@/sentry";
|
||||
import { getLogger } from "@logtape/logtape";
|
||||
import chalk from "chalk";
|
||||
import { getDeliveryWorker } from "~/classes/workers/delivery";
|
||||
import { getFetchWorker } from "~/classes/workers/fetch";
|
||||
import { getInboxWorker } from "~/classes/workers/inbox";
|
||||
|
||||
process.on("SIGINT", () => {
|
||||
process.exit();
|
||||
});
|
||||
|
||||
await import("~/entrypoints/worker/setup.ts");
|
||||
sentry?.captureMessage("Server started", "info");
|
||||
|
||||
const serverLogger = getLogger("server");
|
||||
|
||||
serverLogger.info`Starting Fetch Worker...`;
|
||||
getFetchWorker();
|
||||
serverLogger.info`${chalk.green("✔")} Fetch Worker started`;
|
||||
|
||||
serverLogger.info`Starting Delivery Worker...`;
|
||||
getDeliveryWorker();
|
||||
serverLogger.info`${chalk.green("✔")} Delivery Worker started`;
|
||||
|
||||
serverLogger.info`Starting Inbox Worker...`;
|
||||
getInboxWorker();
|
||||
serverLogger.info`${chalk.green("✔")} Inbox Worker started`;
|
||||
|
||||
serverLogger.info`${chalk.green("✔✔✔")} All workers started`;
|
||||
55
entrypoints/worker/setup.ts
Normal file
55
entrypoints/worker/setup.ts
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
import { checkConfig } from "@/init";
|
||||
import { configureLoggers } from "@/loggers";
|
||||
import { getLogger } from "@logtape/logtape";
|
||||
import { Note } from "@versia/kit/db";
|
||||
import chalk from "chalk";
|
||||
import IORedis from "ioredis";
|
||||
import { setupDatabase } from "~/drizzle/db";
|
||||
import { config } from "~/packages/config-manager/index.ts";
|
||||
import { searchManager } from "../../classes/search/search-manager.ts";
|
||||
|
||||
const timeAtStart = performance.now();
|
||||
|
||||
await configureLoggers();
|
||||
|
||||
const serverLogger = getLogger("server");
|
||||
|
||||
console.info(`
|
||||
██╗ ██╗███████╗██████╗ ███████╗██╗ █████╗
|
||||
██║ ██║██╔════╝██╔══██╗██╔════╝██║██╔══██╗
|
||||
██║ ██║█████╗ ██████╔╝███████╗██║███████║
|
||||
╚██╗ ██╔╝██╔══╝ ██╔══██╗╚════██║██║██╔══██║
|
||||
╚████╔╝ ███████╗██║ ██║███████║██║██║ ██║
|
||||
╚═══╝ ╚══════╝╚═╝ ╚═╝╚══════╝╚═╝╚═╝ ╚═╝
|
||||
${chalk.redBright.bold("** WORKER MODE **")}
|
||||
`);
|
||||
|
||||
serverLogger.info`Starting Versia Server Worker...`;
|
||||
|
||||
await setupDatabase();
|
||||
|
||||
if (config.sonic.enabled) {
|
||||
await searchManager.connect();
|
||||
}
|
||||
|
||||
// Check if database is reachable
|
||||
const postCount = await Note.getCount();
|
||||
|
||||
await checkConfig(config);
|
||||
|
||||
serverLogger.info`Versia Server Worker started at ${config.http.bind}:${config.http.bind_port} in ${(performance.now() - timeAtStart).toFixed(0)}ms`;
|
||||
|
||||
serverLogger.info`Database is online, containing ${postCount} posts`;
|
||||
|
||||
// Check if Redis is reachable
|
||||
const connection = new IORedis({
|
||||
host: config.redis.queue.host,
|
||||
port: config.redis.queue.port,
|
||||
password: config.redis.queue.password,
|
||||
db: config.redis.queue.database,
|
||||
maxRetriesPerRequest: null,
|
||||
});
|
||||
|
||||
await connection.ping();
|
||||
|
||||
serverLogger.info`Redis is online`;
|
||||
Loading…
Add table
Add a link
Reference in a new issue