84 lines
2.3 KiB
TypeScript
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);
|