monitor/core/index.ts
2025-04-16 22:30:27 +07:00

84 lines
2.3 KiB
TypeScript

//NOTE: must be imported first to setup the environment
import { txEnv, txHostConfig } from './globalData';
import consoleFactory, { setTTYTitle } from '@lib/console';
//Can be imported after
import fs from 'node:fs';
import checkPreRelease from './boot/checkPreRelease';
import fatalError from '@lib/fatalError';
import { ensureProfileStructure, setupProfile } from './boot/setup';
import setupProcessHandlers from './boot/setupProcessHandlers';
import bootTxAdmin from './txAdmin';
const console = consoleFactory();
//Early process stuff
try {
process.title = 'txAdmin'; //doesn't work for now
setupProcessHandlers();
setTTYTitle();
checkPreRelease();
} catch (error) {
fatalError.Boot(0, 'Failed early process setup.', error);
}
console.log(`Starting txAdmin v${txEnv.txaVersion}/b${txEnv.fxsVersionTag}...`);
//Setting up txData & Profile
try {
if (!fs.existsSync(txHostConfig.dataPath)) {
fs.mkdirSync(txHostConfig.dataPath);
}
} catch (error) {
fatalError.Boot(1, [
`Failed to check or create the data folder.`,
['Path', txHostConfig.dataPath],
], error);
}
let isNewProfile = false;
try {
if (fs.existsSync(txEnv.profilePath)) {
ensureProfileStructure();
} else {
setupProfile();
isNewProfile = true;
}
} catch (error) {
fatalError.Boot(2, [
`Failed to check or create the txAdmin profile folder.`,
['Data Path', txHostConfig.dataPath],
['Profile Name', txEnv.profileName],
['Profile Path', txEnv.profilePath],
], error);
}
if (isNewProfile && txEnv.profileName !== 'default') {
console.log(`Profile path: ${txEnv.profilePath}`);
}
//Start txAdmin (have fun 😀)
try {
bootTxAdmin();
} catch (error) {
fatalError.Boot(3, 'Failed to start txAdmin.', error);
}
//Freeze detector - starts after 10 seconds due to the initial bootup lag
const bootGracePeriod = 15_000;
const loopInterval = 500;
const loopElapsedLimit = 2_000;
setTimeout(() => {
let hdTimer = Date.now();
setInterval(() => {
const now = Date.now();
if (now - hdTimer > loopElapsedLimit) {
console.majorMultilineError([
'Major VPS freeze/lag detected!',
'THIS IS NOT AN ERROR CAUSED BY TXADMIN!',
]);
}
hdTimer = now;
}, loopInterval);
}, bootGracePeriod);