summaryrefslogtreecommitdiff
path: root/packages/backend/src/boot/entry.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-09-15 14:28:29 +0900
committerGitHub <noreply@github.com>2023-09-15 14:28:29 +0900
commit6cf466e5d1d423aec8ec06f65644c73c7e9a8ecd (patch)
treeb3623e27ae94471fa4d58dda9e9296b21afbd20e /packages/backend/src/boot/entry.ts
parentenhance nodeinfo by prpoagate the standart keys for homepage and repository (... (diff)
downloadsharkey-6cf466e5d1d423aec8ec06f65644c73c7e9a8ecd.tar.gz
sharkey-6cf466e5d1d423aec8ec06f65644c73c7e9a8ecd.tar.bz2
sharkey-6cf466e5d1d423aec8ec06f65644c73c7e9a8ecd.zip
update deps (#11820)
* update deps * fix * wip * wip * wip * Update docker-compose.yml.example * Delete reviewer-lottery.yml * Update RepositoryModule.ts * wip * wip * clean up * update deps * wip * wip
Diffstat (limited to 'packages/backend/src/boot/entry.ts')
-rw-r--r--packages/backend/src/boot/entry.ts86
1 files changed, 86 insertions, 0 deletions
diff --git a/packages/backend/src/boot/entry.ts b/packages/backend/src/boot/entry.ts
new file mode 100644
index 0000000000..fc8fc2ffb4
--- /dev/null
+++ b/packages/backend/src/boot/entry.ts
@@ -0,0 +1,86 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+/**
+ * Misskey Entry Point!
+ */
+
+import cluster from 'node:cluster';
+import { EventEmitter } from 'node:events';
+import chalk from 'chalk';
+import Xev from 'xev';
+import Logger from '@/logger.js';
+import { envOption } from '../env.js';
+import { masterMain } from './master.js';
+import { workerMain } from './worker.js';
+
+import 'reflect-metadata';
+
+process.title = `Misskey (${cluster.isPrimary ? 'master' : 'worker'})`;
+
+Error.stackTraceLimit = Infinity;
+EventEmitter.defaultMaxListeners = 128;
+
+const logger = new Logger('core', 'cyan');
+const clusterLogger = logger.createSubLogger('cluster', 'orange', false);
+const ev = new Xev();
+
+//#region Events
+
+// Listen new workers
+cluster.on('fork', worker => {
+ clusterLogger.debug(`Process forked: [${worker.id}]`);
+});
+
+// Listen online workers
+cluster.on('online', worker => {
+ clusterLogger.debug(`Process is now online: [${worker.id}]`);
+});
+
+// Listen for dying workers
+cluster.on('exit', worker => {
+ // Replace the dead worker,
+ // we're not sentimental
+ clusterLogger.error(chalk.red(`[${worker.id}] died :(`));
+ cluster.fork();
+});
+
+// Display detail of unhandled promise rejection
+if (!envOption.quiet) {
+ process.on('unhandledRejection', console.dir);
+}
+
+// Display detail of uncaught exception
+process.on('uncaughtException', err => {
+ try {
+ logger.error(err);
+ console.trace(err);
+ } catch { }
+});
+
+// Dying away...
+process.on('exit', code => {
+ logger.info(`The process is going to exit with code ${code}`);
+});
+
+//#endregion
+
+if (cluster.isPrimary || envOption.disableClustering) {
+ await masterMain();
+
+ if (cluster.isPrimary) {
+ ev.mount();
+ }
+}
+
+if (cluster.isWorker || envOption.disableClustering) {
+ await workerMain();
+}
+
+// ユニットテスト時にMisskeyが子プロセスで起動された時のため
+// それ以外のときは process.send は使えないので弾く
+if (process.send) {
+ process.send('ok');
+}