let socket = io(); module.exports = () => { M.AutoInit(); setupSocket(); setInterval(() => { socket.emit("GetGeneralInfo"); }, 500); socket.emit("GetLog", {filter: "success error event", entryN: 10}); }; function setupSocket() { socket.on("lastLogEntries", (entries) => { let list = ""; entries.forEach((entry) => { list += "" + prettifyType(entry.type) + "" + entry.time + "" + entry.details + ""; }); document.getElementById("log-table-body").innerHTML = list; M.AutoInit(); }); socket.on("newLogEntry", (entry) => { // Start with parsing the new entry, no reason to select the DOM-element and stuff, if we are filtering out the entry anyway. let type = entry.type; if ( (type.toUpperCase() !== "SUCCESS") && (type.toUpperCase() !== "ERROR") && (type.toUpperCase() !== "EVENT") && (type.toUpperCase() !== "INFO")) { return; } let logTable = document.getElementById("log-table-body"); let LTable = logTable.rows.length; logTable.deleteRow(LTable - 1); // Since length outputs a 1-based number let newEntry = logTable.insertRow(0); newEntry.insertCell(0).innerHTML = prettifyType(entry.type); newEntry.insertCell(1).innerHTML = entry.time; newEntry.insertCell(2).innerHTML = entry.details; M.AutoInit(); newEntry.className = "newLogEntry"; }); socket.on("generalInfo", (info) => { if (info["scriptIsExited"]) { document.getElementById("currentScript").innerHTML = info["currentScript"] + " (exited)"; } else { document.getElementById("currentScript").innerHTML = info["currentScript"]; } document.getElementById("uptime").innerHTML = info["uptime"] + " seconds"; }); } function prettifyType(type) { let prettyTable = { "DEBUG": `😸`, "INFO": `â„šī¸`, "WARNING": `âš ī¸`, "EVENT": `âšĄī¸`, "SUCCESS": `✅`, "ERROR": `🔴`, "PYTHON": `🐍` }; return prettyTable[type]; }