Skip to content

Commit

Permalink
Add server start, current, shutdown or crash times and up time to log…
Browse files Browse the repository at this point in the history
… page
  • Loading branch information
dkerr64 committed Sep 23, 2024
1 parent 50a75d2 commit a072709
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 32 deletions.
7 changes: 1 addition & 6 deletions src/log.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,13 +148,8 @@ void printMessageLog(Print &outputDev)
#ifdef NTP_CLIENT
if (enableNTP && timeClient.isTimeSet())
{
static uint32_t currentTime = 0;
currentTime = timeClient.getEpochTime();
outputDev.write("Server time (secs): ");
outputDev.print(currentTime);
outputDev.write(" - ");
outputDev.write(timeString(currentTime));
outputDev.println();
outputDev.println(timeClient.getEpochTime());
}
#endif
outputDev.write("Server uptime (ms): ");
Expand Down
14 changes: 5 additions & 9 deletions src/www/logs.html
Original file line number Diff line number Diff line change
Expand Up @@ -52,20 +52,16 @@
</pre>
</div>
<div id="logTab" class="tabcontent">
<p id="firstLoad" style="margin: 0px;">Loading...</p>
<p style="margin: 0px; color: darkgoldenrod">Current server message log...</p>
<pre id="showlog"></pre>
</div>
<div id="rebootTab" class="tabcontent">
<p style="margin: 0px;">Messages logged immediately before last user requested reboot or reset...</p>
<pre id="rebootlog">
Loading...
</pre>
<p style="margin: 0px; color: darkgoldenrod">Messages logged immediately before last user requested reboot or reset...</p>
<pre id="rebootlog"></pre>
</div>
<div id="crashTab" class="tabcontent">
<p style="margin: 0px;">Messages logged immediately before last system crash...</p>
<pre id="crashlog">
Loading...
</pre>
<p style="margin: 0px; color: darkgoldenrod">Messages logged immediately before last system crash...</p>
<pre id="crashlog"></pre>
</div>
<!-- Footer section of page ------------------------------------------------------------------>
<div class="footer" style="flex: 0 1 0;">
Expand Down
99 changes: 82 additions & 17 deletions src/www/logs.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,33 @@ var msgJson = undefined; // for status
const clientUUID = uuidv4(); // uniquely identify this session

function findStartTime(text) {
let i = text.indexOf('Server time');
if (i < 0) return undefined;

i = text.indexOf(':', i) + 2;
let j = text.indexOf(' ', i);
let serverTime = parseInt(text.substring(i, j)) * 1000;
i = text.indexOf(':', text.indexOf('Server uptime')) + 2;
j = text.indexOf(' ', i);
return serverTime - parseInt(text.substring(i, j));
const regex = /[\s\r\n]/;
let serverTime = undefined;
let upTime = undefined;
let bootTime = undefined;

function search(string, regexp, from = 0) {
const index = string.slice(from).search(regexp);
return index === -1 ? -1 : index + from;
}

let i = text.indexOf(':', text.indexOf('Server uptime')) + 2;
let j = search(text, regex, i);
upTime = Number(text.substring(i, j));

i = text.indexOf('Server time');
if (i >= 0) {
i = text.indexOf(':', i) + 2;
let j = search(text, regex, i);
serverTime = Number(text.substring(i, j)) * 1000;
bootTime = serverTime - upTime;
}

return {
serverTime: serverTime,
upTime: upTime,
bootTime: bootTime
};
}

function insertTimeStamp(text, startTime) {
Expand All @@ -28,14 +46,27 @@ function insertTimeStamp(text, startTime) {
let date = new Date();
while ((i = text.indexOf('>>> [', i) + 1) > 0) {
let j = text.indexOf(']', i);
let logTime = parseInt(text.substring(i + 4, j));
let logTime = Number(text.substring(i + 4, j));
date.setTime(startTime + logTime);
text = text.substring(0, i - 1) + '[' + date.toJSON() + text.substring(j)
text = text.substring(0, i - 1) + '[' + date.toJSON() + text.substring(j);
}
}
return text;
}

function msToTime(duration) {
let seconds = Math.floor((duration / 1000) % 60),
minutes = Math.floor((duration / (1000 * 60)) % 60),
hours = Math.floor((duration / (1000 * 60 * 60)) % 24),
days = Math.floor((duration / (1000 * 60 * 60 * 24)));

hours = (hours < 10) ? "0" + hours : hours;
minutes = (minutes < 10) ? "0" + minutes : minutes;
seconds = (seconds < 10) ? "0" + seconds : seconds;

return days + " days " + hours + " hrs " + minutes + " mins " + seconds + " secs";
}

function openTab(evt, tabName) {
var i, tabcontent, tablinks;
// Get all elements with class="tabcontent" and hide them
Expand Down Expand Up @@ -108,7 +139,19 @@ async function loadLogs() {
}
})
.then((text) => {
document.getElementById("rebootlog").innerText = insertTimeStamp(text, findStartTime(text));
const { serverTime, upTime, bootTime } = findStartTime(text);
const elem = document.getElementById("rebootlog");
if (bootTime) {
let date = new Date();
date.setTime(bootTime);
elem.insertAdjacentHTML('beforebegin', `<pre style="margin: 0px; color : darkgoldenrod">Server started at: ${date.toUTCString()}</pre>`);
date.setTime(serverTime);
elem.insertAdjacentHTML('beforebegin', `<pre style="margin: 0px; color : darkgoldenrod">Server shutdown at: ${date.toUTCString()}</pre>`);
}
if (upTime) {
elem.insertAdjacentHTML('beforebegin', `<pre style="margin: 0px; color : darkgoldenrod">Server upTime: ${msToTime(upTime)}</pre>`);
}
elem.innerText = insertTimeStamp(text, bootTime);
})
.catch(error => console.warn(error)),

Expand All @@ -121,7 +164,19 @@ async function loadLogs() {
}
})
.then((text) => {
document.getElementById("crashlog").innerText = insertTimeStamp(text, findStartTime(text));
const { serverTime, upTime, bootTime } = findStartTime(text);
const elem = document.getElementById("crashlog");
if (bootTime) {
let date = new Date();
date.setTime(bootTime);
elem.insertAdjacentHTML('beforebegin', `<pre style="margin: 0px; color : darkgoldenrod">Server started at: ${date.toUTCString()}</pre>`);
date.setTime(serverTime);
elem.insertAdjacentHTML('beforebegin', `<pre style="margin: 0px; color : darkgoldenrod">Server crashed at: ${date.toUTCString()}</pre>`);
}
if (upTime) {
elem.insertAdjacentHTML('beforebegin', `<pre style="margin: 0px; color : darkgoldenrod">Server upTime: ${msToTime(upTime)}</pre>`);
}
elem.innerText = insertTimeStamp(text, bootTime);
})
.catch(error => console.warn(error)),

Expand Down Expand Up @@ -161,10 +216,20 @@ async function loadLogs() {
}
})
.then((text) => {
document.getElementById("firstLoad").style.display = "none";
serverBootTime = findStartTime(text);
text = insertTimeStamp(text, serverBootTime);
document.getElementById("showlog").insertAdjacentText('afterbegin', text);
const elem = document.getElementById("showlog");
const { serverTime, upTime, bootTime } = findStartTime(text);
serverBootTime = bootTime;
if (bootTime) {
let date = new Date();
date.setTime(bootTime);
elem.insertAdjacentHTML('beforebegin', `<pre style="margin: 0px; color : darkgoldenrod">Server started at: ${date.toUTCString()}</pre>`);
date.setTime(serverTime);
elem.insertAdjacentHTML('beforebegin', `<pre style="margin: 0px; color : darkgoldenrod">Server current time: ${date.toUTCString()}</pre>`);
}
if (upTime) {
elem.insertAdjacentHTML('beforebegin', `<pre style="margin: 0px; color : darkgoldenrod">Server upTime: ${msToTime(upTime)}</pre>`);
}
elem.insertAdjacentText('afterbegin', insertTimeStamp(text, serverBootTime));
let divElem = document.getElementById("logTab");
// Scroll to the bottom
divElem.scrollTop = divElem.scrollHeight;
Expand Down

0 comments on commit a072709

Please sign in to comment.