monitor/core/modules/Logger/handlers/admin.js
2025-04-16 22:30:27 +07:00

78 lines
2.1 KiB
JavaScript

const modulename = 'Logger:Admin';
import fsp from 'node:fs/promises';
import path from 'node:path';
import { getBootDivider } from '../loggerUtils';
import consoleFactory from '@lib/console';
import { LoggerBase } from '../LoggerBase';
import { chalkInversePad, getTimeHms } from '@lib/misc';
const console = consoleFactory(modulename);
export default class AdminLogger extends LoggerBase {
constructor(basePath, lrProfileConfig) {
const lrDefaultOptions = {
path: basePath,
intervalBoundary: true,
initialRotation: true,
history: 'admin.history',
interval: '7d',
};
super(basePath, 'admin', lrDefaultOptions, lrProfileConfig);
this.lrStream.write(getBootDivider());
this.writeCounter = 0;
}
/**
* Returns a string with short usage stats
*/
getUsageStats() {
return `Writes: ${this.writeCounter}, lrErrors: ${this.lrErrors}`;
}
/**
* Returns an string with everything in admin.log (the active log rotate file)
*/
async getRecentBuffer() {
try {
return await fsp.readFile(path.join(this.basePath, 'admin.log'), 'utf8');
} catch (error) {
return false;
}
}
/**
* Handles the input of log data
*
* @param {string} author
* @param {string} message
*/
writeSystem(author, message) {
const timestamp = getTimeHms();
this.lrStream.write(`[${timestamp}][${author}] ${message}\n`);
this.writeCounter++;
}
/**
* Handles the input of log data
* TODO: add here discord log forwarding
*
* @param {string} author
* @param {string} action
* @param {'default'|'command'} type
*/
write(author, action, type = 'default') {
let saveMsg;
if (type === 'command') {
saveMsg = `[${author}] executed "${action}"`;
console.log(`${author} executed ` + chalkInversePad(action));
} else {
saveMsg = action;
console.log(saveMsg);
}
this.writeSystem(author, saveMsg);
}
};