diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-09-15 14:28:29 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-15 14:28:29 +0900 |
| commit | 6cf466e5d1d423aec8ec06f65644c73c7e9a8ecd (patch) | |
| tree | b3623e27ae94471fa4d58dda9e9296b21afbd20e /packages/backend/src/boot/entry.ts | |
| parent | enhance nodeinfo by prpoagate the standart keys for homepage and repository (... (diff) | |
| download | sharkey-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.ts | 86 |
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'); +} |