60 lines
1.8 KiB
TypeScript
60 lines
1.8 KiB
TypeScript
import fsp from 'node:fs/promises';
|
|
import path, { sep } from 'node:path';
|
|
import bytes from 'bytes';
|
|
import { txEnv } from '@core/globalData';
|
|
|
|
|
|
/**
|
|
* Returns an associative array of files in the log folder and it's sizes (human readable)
|
|
*/
|
|
export const getLogSizes = async (basePath: string, filterRegex: RegExp) => {
|
|
//Reading path
|
|
const files = await fsp.readdir(basePath, { withFileTypes: true });
|
|
const statOps = [];
|
|
const statNames: string[] = [];
|
|
for (let i = 0; i < files.length; i++) {
|
|
const file = files[i];
|
|
const filePath = path.join(basePath, file.name);
|
|
if (!filterRegex.test(file.name) || !file.isFile()) continue;
|
|
statNames.push(file.name);
|
|
statOps.push(fsp.stat(filePath));
|
|
}
|
|
|
|
//Processing files
|
|
let totalBytes = 0;
|
|
const fileStatsSizes = await Promise.allSettled(statOps);
|
|
const fileStatsArray = fileStatsSizes.map((op, index) => {
|
|
if (op.status === 'fulfilled') {
|
|
totalBytes += op.value.size;
|
|
return [statNames[index], bytes(op.value.size)];
|
|
} else {
|
|
return [statNames[index], false];
|
|
}
|
|
});
|
|
return {
|
|
total: bytes(totalBytes),
|
|
files: Object.fromEntries(fileStatsArray),
|
|
};
|
|
};
|
|
|
|
|
|
/**
|
|
* Generates a multiline separator string with 1 line padding
|
|
*/
|
|
export const getLogDivider = (msg: string) => {
|
|
const sepLine = '='.repeat(64);
|
|
const timestamp = new Date().toLocaleString();
|
|
let out = sepLine + '\n';
|
|
out += `======== ${msg} - ${timestamp}`.padEnd(64, ' ') + '\n';
|
|
out += sepLine + '\n';
|
|
return out;
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns the boot divider, with the txAdmin and FXServer versions
|
|
*/
|
|
export const getBootDivider = () => {
|
|
return getLogDivider(`txAdmin v${txEnv.txaVersion} atop fxserver ${txEnv.fxsVersion} Starting`);
|
|
}
|