56 lines
1.9 KiB
JavaScript
56 lines
1.9 KiB
JavaScript
const loggerService = require('./start');
|
|
|
|
// Import the MySQL pools from your database service
|
|
const pools = require('../database/pools').get();
|
|
|
|
// Name of the database used for logging
|
|
const dbName = 'logging';
|
|
|
|
// Get the Write pool with the "system" role
|
|
const writePool = pools[dbName].w.s;
|
|
|
|
/*
|
|
* Generic function to write log data to any table
|
|
* @param {string} tableName - Name of the table to write to
|
|
* @param {Object} logData - Key/value pairs representing columns and values
|
|
* @returns {Object} - Success status and optional error
|
|
*/
|
|
async function writeToTable(tableName, logData) {
|
|
// Check if logger is active
|
|
if (!loggerService.online()) {
|
|
return { success: false, error: 'Logger is inactive' };
|
|
}
|
|
|
|
// Validate input
|
|
if (!tableName || !logData) throw new Error('Table name and log data are required');
|
|
|
|
// Extract columns and values dynamically from the logData object
|
|
const columns = Object.keys(logData).join(', '); // e.g., "user, action, success"
|
|
const placeholders = Object.keys(logData).map(() => '?').join(', '); // e.g., "?, ?, ?"
|
|
const values = Object.values(logData); // e.g., ["user", "login", true]
|
|
|
|
// Build the INSERT SQL statement
|
|
const sql = `INSERT INTO ${tableName} (${columns}) VALUES (${placeholders})`;
|
|
|
|
try {
|
|
// Execute the query on the write pool
|
|
await writePool.query(sql, values);
|
|
|
|
// Return success
|
|
return { success: true };
|
|
} catch (err) {
|
|
// Log the error to the console for debugging
|
|
console.error('Error writing log to DB:', err);
|
|
|
|
// Return failure state
|
|
return { success: false, error: err };
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Generic write function for any other log types.
|
|
* This allows dynamic handling of new log types without modifying the module.
|
|
*/
|
|
module.exports.write = async function(logData, tableName) {
|
|
return writeToTable(tableName, logData);
|
|
}; |