feature/IO-2742-redis - Checkpoint, All optimizations to prevent multiple requests to redis have been applied. Things like using lists for the Log Events, to getting and setting multiple values at the same time when given the chance.

Signed-off-by: Dave Richer <dave@imexsystems.ca>
This commit is contained in:
Dave Richer
2024-09-11 20:27:40 -04:00
parent f606228792
commit 4486858a86
5 changed files with 186 additions and 102 deletions

View File

@@ -3,7 +3,8 @@ require("dotenv").config({
path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`)
});
const { io, setSessionData, clearSessionData, getSessionData } = require("../../server");
const { io, setSessionData, clearSessionData, getMultipleSessionData, addItemToEndOfList } = require("../../server");
const { admin } = require("../firebase/firebase-handler");
const logger = require("../utils/logger");
const { default: CdkJobExport, CdkSelectedCustomer } = require("../cdk/cdk-job-export");
@@ -117,7 +118,10 @@ function registerPbsApEvents(socket) {
socket.on("pbs-export-ap", async ({ billids, txEnvelope }) => {
await setSessionData(socket.id, "pbs_txEnvelope", txEnvelope);
PbsExportAp(socket, { billids, txEnvelope }).catch((err) => console.error(`Error in pbs-export-ap: ${err}`));
PbsExportAp(socket, {
billids,
txEnvelope
}).catch((err) => console.error(`Error in pbs-export-ap: ${err}`));
});
}
@@ -149,76 +153,67 @@ function registerDmsClearSessionEvent(socket) {
// Logging helper functions
async function createLogEvent(socket, level, message) {
const logLevel = await getSessionData(socket.id, "log_level");
const recordid = await getSessionData(socket.id, "recordid");
const logEvents = await getSessionData(socket.id, "logEvents");
const { logLevel, recordid } = await getMultipleSessionData(socket.id, ["log_level", "recordid"]);
if (LogLevelHierarchy(logLevel) >= LogLevelHierarchy(level)) {
console.log(`[WS LOG EVENT] ${level} - ${new Date()} - ${socket.user.email} - ${socket.id} - ${message}`);
socket.emit("log-event", { timestamp: new Date(), level, message });
const logMessage = { timestamp: new Date(), level, message };
// Log the message to the console and emit it via the socket
console.log(`[WS LOG EVENT] ${level} - ${logMessage.timestamp} - ${socket.user.email} - ${socket.id} - ${message}`);
socket.emit("log-event", logMessage);
// Log the event via the logger
logger.log("ws-log-event", level, socket.user.email, recordid, { wsmessage: message });
if (logEvents && Array.isArray(logEvents)) {
logEvents.push({ timestamp: new Date(), level, message });
setSessionData(socket.id, "logEvents", logEvents).catch((err) =>
console.error(`Error setting logEvents in Redis: ${err}`)
);
}
// Add the log message to the Redis list using the helper function
await addItemToEndOfList(socket.id, "logEvents", logMessage);
}
}
async function createJsonEvent(socket, level, message, json) {
const logEvents = await getSessionData(socket.id, "logEvents");
const logLevel = await getSessionData(socket.id, "log_level");
const recordid = await getSessionData(socket.id, "recordid");
const { logLevel, recordid } = await getMultipleSessionData(socket.id, ["log_level", "recordid"]);
if (LogLevelHierarchy(logLevel) >= LogLevelHierarchy(level)) {
socket.emit("log-event", { timestamp: new Date(), level, message });
}
const logMessage = { timestamp: new Date(), level, message };
logger.log("ws-log-event-json", level, socket.user.email, recordid, {
wsmessage: message,
json
});
// Emit the log message via the socket
socket.emit("log-event", logMessage);
if (logEvents && Array.isArray(logEvents)) {
logEvents.push({ timestamp: new Date(), level, message });
setSessionData(socket.id, "logEvents", logEvents).catch((err) =>
console.error(`Error setting logEvents in Redis: ${err}`)
);
// Log the JSON event via the logger
logger.log("ws-log-event-json", level, socket.user.email, recordid, {
wsmessage: message,
json
});
// Use the helper function to append the log event to the Redis list
await addItemToEndOfList(socket.id, "logEvents", logMessage);
}
}
async function createXmlEvent(socket, xml, message, isError = false) {
const logLevel = await getSessionData(socket.id, "log_level");
const recordid = await getSessionData(socket.id, "recordid");
const logEvents = await getSessionData(socket.id, "logEvents");
const { logLevel, recordid } = await getMultipleSessionData(socket.id, ["log_level", "recordid"]);
if (LogLevelHierarchy(logLevel) >= LogLevelHierarchy("TRACE")) {
socket.emit("log-event", {
const logMessage = {
timestamp: new Date(),
level: isError ? "ERROR" : "TRACE",
message: `${message}: ${xml}`
});
}
};
logger.log(
isError ? "ws-log-event-xml-error" : "ws-log-event-xml",
isError ? "ERROR" : "TRACE",
socket.user.email,
recordid,
{ wsmessage: message, xml }
);
// Emit the log message via the socket
socket.emit("log-event", logMessage);
if (logEvents && Array.isArray(logEvents)) {
logEvents.push({
timestamp: new Date(),
level: isError ? "ERROR" : "TRACE",
message,
xml
});
// Log the XML event via the logger
logger.log(
isError ? "ws-log-event-xml-error" : "ws-log-event-xml",
isError ? "ERROR" : "TRACE",
socket.user.email,
recordid,
{ wsmessage: message, xml }
);
await setSessionData(socket.id, "logEvents", logEvents);
// Use the helper function to append the log event to the Redis list
await addItemToEndOfList(socket.id, "logEvents", { ...logMessage, xml });
}
}