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

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`);
}