// ROOT/services/logger/readLogs.js // Import the MySQL pools from your database service const pools = require('../database/pools').get(); // Database name used for logging const dbName = 'logging'; // Use the Read pool with the "system" role const readPool = pools[dbName].r.s; /* * Function: getAllLogs * Description: Retrieves all log entries from a specified table. * @param {string} tableName - Name of the table to query. * @returns {Array|Object} - Returns an array of log entries, or an error object. */ async function getAllLogs(tableName) { if (!tableName) throw new Error('Table name is required'); try { const [rows] = await readPool.query(`SELECT * FROM ${tableName}`); return rows; } catch (err) { console.error('Error reading logs from DB:', err); return { success: false, error: err }; } } /* * Function: getLogs * Description: Retrieves log entries from a specified table that match optional filter criteria. * @param {string} tableName - Name of the table to query. * @param {Object} filter - Optional key/value pairs representing column filters. * Example: { user: 'andi', success: true } * @returns {Array|Object} - Returns an array of filtered log entries, or an error object. */ async function getLogs(tableName, filter = {}) { if (!tableName) throw new Error('Table name is required'); // Start building the SQL query let sql = `SELECT * FROM ${tableName}`; const values = []; const filterKeys = Object.keys(filter); if (filterKeys.length > 0) { // Build WHERE clauses dynamically const whereClauses = filterKeys.map(key => { values.push(filter[key]); return `${key} = ?`; }); sql += ' WHERE ' + whereClauses.join(' AND '); } try { const [rows] = await readPool.query(sql, values); return rows; } catch (err) { console.error('Error reading filtered logs from DB:', err); return { success: false, error: err }; } } // Export both functions for external use module.exports = { getAll: getAllLogs, get: getLogs };