diff --git a/server/src/external/mongo/db.ts b/server/src/external/mongo/db.ts index de5143787..5070ba45a 100644 --- a/server/src/external/mongo/db.ts +++ b/server/src/external/mongo/db.ts @@ -75,8 +75,9 @@ monkDB }); }) .catch((err) => { - logger.crit(err); - process.exit(1); + logger.crit(`Failed to connect to database: ${err}`, () => { + process.exit(1); + }); }); /** diff --git a/server/src/external/redis/redis.ts b/server/src/external/redis/redis.ts index 497e507b2..4a01f569b 100644 --- a/server/src/external/redis/redis.ts +++ b/server/src/external/redis/redis.ts @@ -18,9 +18,9 @@ logger.verbose("Instantiated Redis Client", { bootInfo: true }); function EmitCritical() { /* istanbul ignore next */ if (!RedisClient.connected) { - logger.crit(`Could not connect to redis in time. No more information is available.`); - - process.exit(1); + logger.crit(`Could not connect to redis in time. No more information is available.`, () => { + process.exit(1); + }); } } diff --git a/server/src/lib/jobs/backsync-bms-pms-data.ts b/server/src/lib/jobs/backsync-bms-pms-data.ts index d4a9c1809..13a8edcbf 100644 --- a/server/src/lib/jobs/backsync-bms-pms-data.ts +++ b/server/src/lib/jobs/backsync-bms-pms-data.ts @@ -45,8 +45,8 @@ if (require.main === module) { BacksyncBMSPMSSongsAndCharts() .then(() => process.exit(0)) .catch((err: unknown) => { - logger.error(`Failed to backsync bms/pms songs and charts.`, { err }); - - process.exit(1); + logger.error(`Failed to backsync bms/pms songs and charts.`, { err }, () => { + process.exit(1); + }); }); } diff --git a/server/src/lib/jobs/bms-table-sync.ts b/server/src/lib/jobs/bms-table-sync.ts index 079f109aa..8544f2e65 100644 --- a/server/src/lib/jobs/bms-table-sync.ts +++ b/server/src/lib/jobs/bms-table-sync.ts @@ -308,8 +308,8 @@ if (require.main === module) { process.exit(0); })().catch((err: unknown) => { - logger.error(`Failed to sync BMS Tables.`, { err }); - - process.exit(1); + logger.error(`Failed to sync BMS Tables.`, { err }, () => { + process.exit(1); + }); }); } diff --git a/server/src/lib/jobs/deorphan-scores.ts b/server/src/lib/jobs/deorphan-scores.ts index fdbb5ae0a..09f37ecd0 100644 --- a/server/src/lib/jobs/deorphan-scores.ts +++ b/server/src/lib/jobs/deorphan-scores.ts @@ -45,8 +45,8 @@ if (require.main === module) { DeoprhanScores() .then(() => process.exit(0)) .catch((err: unknown) => { - logger.error(`Failed to de-orphan scores.`, { err }); - - process.exit(1); + logger.error(`Failed to de-orphan scores.`, { err }, () => { + process.exit(1); + }); }); } diff --git a/server/src/lib/jobs/inline-job-runner/job-runner.ts b/server/src/lib/jobs/inline-job-runner/job-runner.ts index 60e2cf0e6..3e796e253 100644 --- a/server/src/lib/jobs/inline-job-runner/job-runner.ts +++ b/server/src/lib/jobs/inline-job-runner/job-runner.ts @@ -65,8 +65,9 @@ export function InitialiseJobRunner() { const names = jobs.map((e) => e.name); if (DedupeArr(names).length !== names.length) { - logger.crit(`Jobs has duplicate name fields, refusing to run.`); - process.exit(1); + logger.crit(`Jobs has duplicate name fields, refusing to run.`, () => { + process.exit(1); + }); } const JobQueue = new Queue("Job Runner"); diff --git a/server/src/lib/jobs/update-bpi-data.ts b/server/src/lib/jobs/update-bpi-data.ts index 3d5141a32..cc6dec107 100644 --- a/server/src/lib/jobs/update-bpi-data.ts +++ b/server/src/lib/jobs/update-bpi-data.ts @@ -180,7 +180,8 @@ if (require.main === module) { process.exit(0); }) .catch((err: unknown) => { - logger.error("Failed to update poyashi data.", { err }); - process.exit(1); + logger.error("Failed to update poyashi data.", { err }, () => { + process.exit(1); + }); }); } diff --git a/server/src/lib/jobs/update-dp-tiers.ts b/server/src/lib/jobs/update-dp-tiers.ts index 1aaa69ad1..7e11c4e52 100644 --- a/server/src/lib/jobs/update-dp-tiers.ts +++ b/server/src/lib/jobs/update-dp-tiers.ts @@ -133,8 +133,8 @@ if (require.main === module) { process.exit(0); }) .catch((err: unknown) => { - logger.error(`Failed to update DP Tiers.`, { err }); - - process.exit(1); + logger.error(`Failed to update DP Tiers.`, { err }, () => { + process.exit(1); + }); }); } diff --git a/server/src/lib/migration/migrations.ts b/server/src/lib/migration/migrations.ts index 9e6deb9d4..188d606cc 100644 --- a/server/src/lib/migration/migrations.ts +++ b/server/src/lib/migration/migrations.ts @@ -32,11 +32,12 @@ function CreateMigrationLookupMap(migrations: Array) { for (const mig of migrations) { if (map.get(mig.id)) { logger.crit( - `Multiple migrations are registered for ${mig.id}. Cannot safely apply migrations.` + `Multiple migrations are registered for ${mig.id}. Cannot safely apply migrations.`, + () => { + // note, we want to exit in testing here, this is fine. + process.exit(1); + } ); - - // note, we want to exit in testing here, this is fine. - process.exit(1); } map.set(mig.id, mig); @@ -199,6 +200,8 @@ export async function ApplyMigration(migration: Migration) { throw new Error("Was going to exit with statusCode 1, but we're in testing."); } - process.exit(1); + logger.crit(`Exiting.`, () => { + process.exit(1); + }); } } diff --git a/server/src/lib/score-import/worker/worker.ts b/server/src/lib/score-import/worker/worker.ts index f791201b8..439b6b705 100644 --- a/server/src/lib/score-import/worker/worker.ts +++ b/server/src/lib/score-import/worker/worker.ts @@ -32,9 +32,11 @@ const workerLogger = CreateLogCtx(`Import Worker`); // Exit if we're not called with node. Think of this like if __name__ != "__main__" in python. if (require.main !== module) { workerLogger.crit( - "The Score Import Worker was imported, instead of ran directly with node. This is a fatal error. Exiting." + "The Score Import Worker was imported, instead of ran directly with node. This is a fatal error. Exiting.", + () => { + process.exit(1); + } ); - process.exit(1); } /** diff --git a/server/src/lib/setup/config.ts b/server/src/lib/setup/config.ts index 0e3dcb227..99a571bd7 100644 --- a/server/src/lib/setup/config.ts +++ b/server/src/lib/setup/config.ts @@ -26,6 +26,7 @@ try { confFile = fs.readFileSync(confLocation, "utf-8"); } catch (err) { logger.error("Error while trying to open conf.json5. Is one present?", { err }); + process.exit(1); } diff --git a/server/src/main.ts b/server/src/main.ts index ec50baf33..dc8f34dda 100644 --- a/server/src/main.ts +++ b/server/src/main.ts @@ -51,9 +51,11 @@ async function RunOnInit() { } catch (err) { logger.crit( `Cannot send HTTPS request to https://example.com. This instance of tachi-server cannot access the internet?`, - err + err, + () => { + process.exit(1); + } ); - process.exit(1); } } @@ -109,8 +111,9 @@ if (process.env.INVOKE_JOB_RUNNER) { ); jobProcess.on("error", (err) => { - logger.crit(`Failed to spawn job runner. Terminating process.`, { err }); - process.exit(1); + logger.crit(`Failed to spawn job runner. Terminating process.`, { err }, () => { + process.exit(1); + }); }); process.on("beforeExit", () => { diff --git a/server/src/scripts/clone-and-anonymise-db.ts b/server/src/scripts/clone-and-anonymise-db.ts index 7eed590b5..fb48a7aa1 100644 --- a/server/src/scripts/clone-and-anonymise-db.ts +++ b/server/src/scripts/clone-and-anonymise-db.ts @@ -113,8 +113,9 @@ if (require.main === module) { process.exit(0); }) .catch((err: unknown) => { - logger.error(`Failed to anonymise database.`, { err }); - process.exit(1); + logger.error(`Failed to anonymise database.`, { err }, () => { + process.exit(1); + }); }); } } diff --git a/server/src/scripts/email/send-test-email.ts b/server/src/scripts/email/send-test-email.ts index 11876627f..387652410 100644 --- a/server/src/scripts/email/send-test-email.ts +++ b/server/src/scripts/email/send-test-email.ts @@ -29,8 +29,8 @@ if (require.main === module) { process.exit(0); })().catch((err: unknown) => { - logger.error(`Failed to send test email.`, { err }); - - process.exit(1); + logger.error(`Failed to send test email.`, { err }, () => { + process.exit(1); + }); }); } diff --git a/server/src/scripts/folders/folder-cache.ts b/server/src/scripts/folders/folder-cache.ts index 33e84f3cb..d700c0833 100644 --- a/server/src/scripts/folders/folder-cache.ts +++ b/server/src/scripts/folders/folder-cache.ts @@ -6,6 +6,7 @@ const logger = CreateLogCtx(__filename); InitaliseFolderChartLookup() .then(() => process.exit(0)) .catch((err: unknown) => { - logger.error(`Failed to initialise folder chart lookup.`, { err }); - process.exit(1); + logger.error(`Failed to initialise folder chart lookup.`, { err }, () => { + process.exit(1); + }); }); diff --git a/server/src/scripts/iidx-tierlist/get-sp12-data.ts b/server/src/scripts/iidx-tierlist/get-sp12-data.ts index 79874c43d..1e927b614 100644 --- a/server/src/scripts/iidx-tierlist/get-sp12-data.ts +++ b/server/src/scripts/iidx-tierlist/get-sp12-data.ts @@ -224,7 +224,8 @@ if (require.main === module) { FetchSP12Data() .then(process.exit(0)) .catch((err) => { - logger.error(err); - process.exit(1); + logger.error(`Failed to fetch sp12 data. ${err}`, err, () => { + process.exit(1); + }); }); } diff --git a/server/src/scripts/init-sequence-docs.ts b/server/src/scripts/init-sequence-docs.ts index c251a50af..399c5735d 100644 --- a/server/src/scripts/init-sequence-docs.ts +++ b/server/src/scripts/init-sequence-docs.ts @@ -7,7 +7,8 @@ if (require.main === module) { InitSequenceDocs() .then(() => process.exit(0)) .catch((err: unknown) => { - logger.error(`Failed to initialise sequence documents.`, { err }); - process.exit(1); + logger.error(`Failed to initialise sequence documents.`, { err }, () => { + process.exit(1); + }); }); } diff --git a/server/src/scripts/invites/create-invite-code.ts b/server/src/scripts/invites/create-invite-code.ts index 0ece90cbd..5f0380545 100644 --- a/server/src/scripts/invites/create-invite-code.ts +++ b/server/src/scripts/invites/create-invite-code.ts @@ -28,10 +28,12 @@ db.invites consumedAt: null, }) .then(() => { - logger.info(`Created invite ${code}.`); - process.exit(0); + logger.info(`Created invite ${code}.`, () => { + process.exit(0); + }); }) .catch((err: unknown) => { - logger.error(`Failed to create invite ${code}`, { err }); - process.exit(1); + logger.error(`Failed to create invite ${code}`, { err }, () => { + process.exit(1); + }); }); diff --git a/server/src/scripts/patches/patch-invalid-iidx-grades.ts b/server/src/scripts/patches/patch-invalid-iidx-grades.ts index 014b202ae..30287b26e 100644 --- a/server/src/scripts/patches/patch-invalid-iidx-grades.ts +++ b/server/src/scripts/patches/patch-invalid-iidx-grades.ts @@ -54,12 +54,12 @@ if (require.main === module) { } } - logger.info(`Done!`); - - process.exit(0); + logger.info(`Done!`, () => { + process.exit(0); + }); })().catch((err: unknown) => { - logger.error(`Failed to patch invalid IIDX grades.`, { err }); - - process.exit(1); + logger.error(`Failed to patch invalid IIDX grades.`, { err }, () => { + process.exit(1); + }); }); } diff --git a/server/src/scripts/patches/patch-stale-folder-references.ts b/server/src/scripts/patches/patch-stale-folder-references.ts index 2daeef21f..ae4a8f31a 100644 --- a/server/src/scripts/patches/patch-stale-folder-references.ts +++ b/server/src/scripts/patches/patch-stale-folder-references.ts @@ -48,8 +48,8 @@ if (require.main === module) { removedFolders, }); })().catch((err: unknown) => { - logger.error(`Failed to patch stale showcase-stat folder references.`, { err }); - - process.exit(1); + logger.error(`Failed to patch stale showcase-stat folder references.`, { err }, () => { + process.exit(1); + }); }); } diff --git a/server/src/scripts/set-indexes.ts b/server/src/scripts/set-indexes.ts index 1bc414d50..6dd2d7030 100644 --- a/server/src/scripts/set-indexes.ts +++ b/server/src/scripts/set-indexes.ts @@ -19,6 +19,7 @@ const options: { db: string; reset?: boolean } = program.opts(); SetIndexes(options.db, options.reset === true) .then(() => process.exit(0)) .catch((err: unknown) => { - logger.error(`Failed to set indexes.`, { err }); - process.exit(1); + logger.error(`Failed to set indexes.`, { err }, () => { + process.exit(1); + }); }); diff --git a/server/src/scripts/state-sync/dedupe-score-ids.ts b/server/src/scripts/state-sync/dedupe-score-ids.ts index 369a38600..750ece312 100644 --- a/server/src/scripts/state-sync/dedupe-score-ids.ts +++ b/server/src/scripts/state-sync/dedupe-score-ids.ts @@ -36,10 +36,12 @@ async function DedupeScoreIDs() { DedupeScoreIDs() .then(() => { - logger.info(`Finished deduping score IDs.`); - process.exit(0); + logger.info(`Finished deduping score IDs.`, () => { + process.exit(0); + }); }) .catch((err: unknown) => { - logger.error(`Failed to dedupe score IDs.`, { err }); - process.exit(1); + logger.error(`Failed to dedupe score IDs.`, { err }, () => { + process.exit(1); + }); }); diff --git a/server/src/scripts/state-sync/recalc-all-scores.ts b/server/src/scripts/state-sync/recalc-all-scores.ts index a88e99bb3..637e418cc 100644 --- a/server/src/scripts/state-sync/recalc-all-scores.ts +++ b/server/src/scripts/state-sync/recalc-all-scores.ts @@ -6,11 +6,13 @@ const logger = CreateLogCtx(__filename); if (require.main === module) { RecalcAllScores() .then(() => { - logger.info(`Successfully recalced all scores.`); - process.exit(0); + logger.info(`Successfully recalced all scores.`, () => { + process.exit(0); + }); }) .catch((err: unknown) => { - logger.error(`Failed to recalc all scores.`, { err }); - process.exit(1); + logger.error(`Failed to recalc all scores.`, { err }, () => { + process.exit(1); + }); }); } diff --git a/server/src/scripts/state-sync/recalc-game-profiles.ts b/server/src/scripts/state-sync/recalc-game-profiles.ts index 17caf4690..4efeaa5cb 100644 --- a/server/src/scripts/state-sync/recalc-game-profiles.ts +++ b/server/src/scripts/state-sync/recalc-game-profiles.ts @@ -45,7 +45,8 @@ if (require.main === module) { RecalcGameProfiles() .then(() => process.exit(0)) .catch((err: unknown) => { - logger.error(`Failed to recalc game profiles.`, { err }); - process.exit(1); + logger.error(`Failed to recalc game profiles.`, { err }, () => { + process.exit(1); + }); }); } diff --git a/server/src/scripts/state-sync/recalc-sessions.ts b/server/src/scripts/state-sync/recalc-sessions.ts index ab7d9fadf..2e5ba736e 100644 --- a/server/src/scripts/state-sync/recalc-sessions.ts +++ b/server/src/scripts/state-sync/recalc-sessions.ts @@ -7,7 +7,8 @@ if (require.main === module) { RecalcSessions() .then(() => process.exit(0)) .catch((err: unknown) => { - logger.error(`Failed to recalc sessions.`, { err }); - process.exit(1); + logger.error(`Failed to recalc sessions.`, { err }, () => { + process.exit(1); + }); }); } diff --git a/server/src/scripts/state-sync/sync-state.ts b/server/src/scripts/state-sync/sync-state.ts index aae60dc73..0ce663089 100644 --- a/server/src/scripts/state-sync/sync-state.ts +++ b/server/src/scripts/state-sync/sync-state.ts @@ -11,9 +11,11 @@ const logger = CreateLogCtx(__filename); await RecalcGameProfiles(); await RecalcSessions(); - logger.info(`Completely done!`); - process.exit(0); + logger.info(`Completely done!`, () => { + process.exit(0); + }); })().catch((err: unknown) => { - logger.error(`Failed to sync state.`, { err }); - process.exit(1); + logger.error(`Failed to sync state.`, { err }, () => { + process.exit(1); + }); }); diff --git a/server/src/scripts/state-sync/update-all-pbs.ts b/server/src/scripts/state-sync/update-all-pbs.ts index ae2732abe..d6b33d794 100644 --- a/server/src/scripts/state-sync/update-all-pbs.ts +++ b/server/src/scripts/state-sync/update-all-pbs.ts @@ -11,7 +11,8 @@ if (require.main === module) { process.exit(0); }) .catch((err: unknown) => { - logger.error(`Failed to update all PBs.`, { err }); - process.exit(1); + logger.error(`Failed to update all PBs.`, { err }, () => { + process.exit(1); + }); }); } diff --git a/server/src/scripts/validate-database.ts b/server/src/scripts/validate-database.ts index 1c6c0d174..9103fdc42 100644 --- a/server/src/scripts/validate-database.ts +++ b/server/src/scripts/validate-database.ts @@ -67,15 +67,21 @@ if (require.main === module) { ValidateCollection(options.collection as Databases) .then(() => process.exit(0)) .catch((err: unknown) => { - logger.error(`Failed to validate collection ${options.collection}?`, { err }); - process.exit(1); + logger.error( + `Failed to validate collection ${options.collection}?`, + { err }, + () => { + process.exit(1); + } + ); }); } else { ValidateAllCollections() .then(() => process.exit(0)) .catch((err: unknown) => { - logger.error(`Failed to validate all collections?`, { err }); - process.exit(1); + logger.error(`Failed to validate all collections?`, { err }, () => { + process.exit(1); + }); }); } }