mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2025-03-09 15:40:18 +00:00
Much improved event logs
This commit is contained in:
parent
35dda581da
commit
ec0047369b
12 changed files with 381 additions and 266 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1063,11 +1063,6 @@
|
|||
}
|
||||
break;
|
||||
}
|
||||
case 'clearevents': {
|
||||
//events = [];
|
||||
//events_update();
|
||||
break;
|
||||
}
|
||||
case 'login': {
|
||||
// Update the last login time
|
||||
if (users != null && users['user/' + domain + '/' + message.event.username.toLowerCase()]) { users['user/' + domain + '/' + message.event.username.toLowerCase()].login = message.event.time; }
|
||||
|
|
|
@ -286,7 +286,6 @@
|
|||
<table class="pTable">
|
||||
<tr>
|
||||
<td class="h1"></td>
|
||||
<td> <input id="p2deleteall" type=button onclick=showDeleteAllEventsDialog() style="display:none" value="Delete All..." /></td>
|
||||
<td class="auto-style1">
|
||||
Show
|
||||
<select id=p3limitdropdown onchange=refreshEvents()>
|
||||
|
@ -762,7 +761,7 @@
|
|||
<td class="h2"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id=p31events></div>
|
||||
<div id=p31events style=""></div>
|
||||
</div>
|
||||
<div id=p40 style="display:none;">
|
||||
<h1>My Server Stats</h1>
|
||||
|
@ -1263,7 +1262,6 @@
|
|||
if (xxcurrentView == 4 || ((xxcurrentView >= 30) && (xxcurrentView < 40))) { setDialogMode(0); go(1); currentUser = null; }
|
||||
}
|
||||
meshserver.send({ action: 'events', limit: parseInt(p3limitdropdown.value) });
|
||||
QV('p2deleteall', userinfo.siteadmin == 0xFFFFFFFF);
|
||||
QV('ServerConsole', userinfo.siteadmin === 0xFFFFFFFF);
|
||||
if ((xxcurrentView == 115) && (userinfo.siteadmin != 0xFFFFFFFF)) { go(6); }
|
||||
if ((xxcurrentView == 6) && ((userinfo.siteadmin & 21) == 0)) { go(1); }
|
||||
|
@ -1689,6 +1687,23 @@
|
|||
}
|
||||
case 'event': {
|
||||
if (!message.event.nolog) {
|
||||
if (currentNode && (message.event.nodeid == currentNode._id)) {
|
||||
// If this event has a nodeid and we are looking at this node, update the log in real time.
|
||||
currentDeviceEvents.unshift(message.event);
|
||||
var eventLimit = parseInt(p16limitdropdown.value);
|
||||
while (currentDeviceEvents.length > eventLimit) { currentDeviceEvents.pop(); } // Remove element(s) at the end
|
||||
masterUpdate(1024);
|
||||
}
|
||||
|
||||
if (currentUser && (message.event.userid == currentUser._id)) {
|
||||
// If this event has a userid and we are looking at this user, update the log in real time.
|
||||
currentUserEvents.unshift(message.event);
|
||||
var eventLimit = parseInt(p31limitdropdown.value);
|
||||
while (currentUserEvents.length > eventLimit) { currentUserEvents.pop(); } // Remove element(s) at the end
|
||||
masterUpdate(2048);
|
||||
}
|
||||
|
||||
// Add this event to the master events log.
|
||||
events.unshift(message.event);
|
||||
var eventLimit = parseInt(p3limitdropdown.value);
|
||||
while (events.length > eventLimit) { events.pop(); } // Remove element(s) at the end
|
||||
|
@ -2001,11 +2016,6 @@
|
|||
}
|
||||
break;
|
||||
}
|
||||
case 'clearevents': {
|
||||
events = [];
|
||||
masterUpdate(32);
|
||||
break;
|
||||
}
|
||||
case 'login': {
|
||||
// Update the last login time
|
||||
if (users != null && users['user/' + domain + '/' + message.event.username.toLowerCase()]) {
|
||||
|
@ -4147,6 +4157,7 @@
|
|||
function deviceUrlFunction() {
|
||||
if (xxdialogMode) return;
|
||||
setDialogMode(2, "Open Page on Device", 3, deviceUrlFunctionEx, '<input id=d2devurl placeholder="http://server.com" style=width:100%;overflow-y:scroll></input>');
|
||||
Q('d2devurl').focus();
|
||||
}
|
||||
|
||||
function deviceUrlFunctionEx() {
|
||||
|
@ -4156,6 +4167,7 @@
|
|||
function deviceToastFunction() {
|
||||
if (xxdialogMode) return;
|
||||
setDialogMode(2, "Device Notification", 3, deviceToastFunctionEx, '<textarea id=d2devToast style=width:100%;height:80px;resize:none;overflow-y:scroll></textarea>');
|
||||
Q('d2devToast').focus();
|
||||
}
|
||||
|
||||
function deviceToastFunctionEx() {
|
||||
|
@ -5830,50 +5842,56 @@
|
|||
function deviceEventsUpdate() {
|
||||
var x = '', dateHeader = null;
|
||||
for (var i in currentDeviceEvents) {
|
||||
var event = currentDeviceEvents[i];
|
||||
var time = new Date(event.time);
|
||||
if (printDate(time) != dateHeader) {
|
||||
if (dateHeader != null) x += '</table>';
|
||||
dateHeader = printDate(time);
|
||||
x += '<table style=width:100% cellpadding=0 cellspacing=0><tr><td class=DevSt colspan=4>' + dateHeader + '</td></tr>';
|
||||
}
|
||||
var icon = 'si3';
|
||||
if (event.etype == 'user') icon = 'm2';
|
||||
if (event.etype == 'server') icon = 'si3';
|
||||
var event = currentDeviceEvents[i], time = new Date(event.time);
|
||||
if (event.msg) {
|
||||
if (event.h == null) { event.h = Math.random(); }
|
||||
if (printDate(time) != dateHeader) {
|
||||
if (dateHeader != null) x += '</table>';
|
||||
dateHeader = printDate(time);
|
||||
x += '<table class=p3eventsTable cellpadding=0 cellspacing=0><tr><td colspan=4 class=DevSt>' + dateHeader + '</td></tr>';
|
||||
}
|
||||
var icon = 'si3';
|
||||
if (event.etype == 'user') icon = 'm2';
|
||||
if (event.etype == 'server') icon = 'si3';
|
||||
|
||||
var msg = event.msg.split('(R)').join('®');
|
||||
//if (event.username && event.username != userinfo.name) { msg += ': ' + event.username; }
|
||||
x += '<tr><td style=width:18px><div class=' + icon + '></div></td><td class=g1 style=float:none> </td><td style=background-color:#C9C9C9>' + printTime(time) + ' - ' + msg + '</td><td class=g2 style=float:none> </td></tr><tr style=height:2px></tr>';
|
||||
var msg = event.msg.split('(R)').join('®');
|
||||
if (event.username) {
|
||||
if ((userinfo.siteadmin & 2) && (event.userid)) {
|
||||
msg = '<a href=# onclick=\'gotoUser("' + encodeURIComponent(event.userid) + '");haltEvent(event);\'>' + event.username + '</a> → ' + msg;
|
||||
} else {
|
||||
msg = event.username + ' → ' + msg;
|
||||
}
|
||||
}
|
||||
x += '<tr onclick=showEventDetails(' + event.h + ',1) onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class=' + icon + '></div></td><td class=g1> </td><td class=style10>' + printTime(time) + ' - ' + msg + '</td><td class=g2> </td></tr><tr style=height:2px></tr>';
|
||||
}
|
||||
}
|
||||
if (dateHeader != null) x += '</table>';
|
||||
if (x == '') x = "<br><i>No Events Found</i><br><br>";
|
||||
QH('p16events', x);
|
||||
}
|
||||
|
||||
/*
|
||||
function showDeleteAllEventsDialog() {
|
||||
if (xxdialogMode) return;
|
||||
var x = "Delete all events in the server event log?<br /><br />";
|
||||
x += "<input id=p3check type=checkbox onchange=validateDeleteAllEventsDialog() />Confirm";
|
||||
setDialogMode(2, "Delete All Events", 3, showDeleteAllEventsDialogEx, x);
|
||||
validateDeleteAllEventsDialog();
|
||||
}
|
||||
|
||||
function validateDeleteAllEventsDialog() {
|
||||
QE('idx_dlgOkButton', Q('p3check').checked);
|
||||
}
|
||||
|
||||
function showDeleteAllEventsDialogEx(buttons, tag) {
|
||||
meshserver.send({ action: 'clearevents' });
|
||||
}
|
||||
*/
|
||||
|
||||
function refreshDeviceEvents() {
|
||||
//currentDeviceEvents = null;
|
||||
//QH('p16events', '');
|
||||
meshserver.send({ action: 'events', nodeid: currentNode._id, limit: parseInt(p16limitdropdown.value) });
|
||||
}
|
||||
|
||||
function showEventDetails(h, mode) {
|
||||
var eventList, xevent;
|
||||
if (mode == 1) { eventList = currentDeviceEvents; }
|
||||
if (mode == 2) { eventList = events; }
|
||||
if (mode == 3) { eventList = currentUserEvents; }
|
||||
for (var i in eventList) { if (eventList[i].h == h) { xevent = eventList[i]; break; } }
|
||||
if (xevent) {
|
||||
if (xxdialogMode) return false;
|
||||
var x = '<div style=overflow-y:auto>';
|
||||
for (var i in xevent) {
|
||||
if ((i == 'h') || (i == '_id') || (i == 'ids') || (i == 'domain') || (xevent[i] == null) || (typeof xevent[i] == 'object')) continue;
|
||||
x += addHtmlValue3(EscapeHtml(i), EscapeHtml(xevent[i]));
|
||||
}
|
||||
x += '</div>';
|
||||
setDialogMode(2, "Event Details", 9, null, x);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// CONSOLE
|
||||
//
|
||||
|
@ -7206,6 +7224,7 @@
|
|||
for (var i in events) {
|
||||
var event = events[i], time = new Date(event.time);
|
||||
if (event.msg) {
|
||||
if (event.h == null) { event.h = Math.random(); }
|
||||
if (printDate(time) != dateHeader) {
|
||||
if (dateHeader != null) x += '</table>';
|
||||
dateHeader = printDate(time);
|
||||
|
@ -7216,8 +7235,21 @@
|
|||
if (event.etype == 'server') icon = 'si3';
|
||||
|
||||
var msg = event.msg.split('(R)').join('®');
|
||||
if (event.username && event.username != userinfo.name) { msg += ': ' + event.username; }
|
||||
x += '<tr onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class=' + icon + '></div></td><td class=g1> </td><td class=style10>' + printTime(time) + ' - ' + msg + '</td><td class=g2> </td></tr><tr style=height:2px></tr>';
|
||||
if (event.nodeid) {
|
||||
var node = getNodeFromId(event.nodeid);
|
||||
if (node != null) {
|
||||
icon = 'si' + node.icon;
|
||||
msg = '<a href=# onclick=\'gotoDevice("' + event.nodeid + '",10);haltEvent(event);\'>' + node.name + '</a> → ' + msg;
|
||||
}
|
||||
}
|
||||
if (event.username) {
|
||||
if ((userinfo.siteadmin & 2) && (event.userid)) {
|
||||
msg = '<a href=# onclick=\'gotoUser("' + encodeURIComponent(event.userid) + '");haltEvent(event);\'>' + event.username + '</a> → ' + msg;
|
||||
} else {
|
||||
msg = event.username + ' → ' + msg;
|
||||
}
|
||||
}
|
||||
x += '<tr onclick=showEventDetails(' + event.h + ',2) onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class=' + icon + '></div></td><td class=g1> </td><td class=style10>' + printTime(time) + ' - ' + msg + '</td><td class=g2> </td></tr><tr style=height:2px></tr>';
|
||||
}
|
||||
}
|
||||
if (dateHeader != null) x += '</table>';
|
||||
|
@ -7225,22 +7257,6 @@
|
|||
QH('p3events', x);
|
||||
}
|
||||
|
||||
function showDeleteAllEventsDialog() {
|
||||
if (xxdialogMode) return;
|
||||
var x = "Delete all events in the server event log?<br /><br />";
|
||||
x += "<label><input id=p3check type=checkbox onchange=validateDeleteAllEventsDialog() />Confirm</label>";
|
||||
setDialogMode(2, "Delete All Events", 3, showDeleteAllEventsDialogEx, x);
|
||||
validateDeleteAllEventsDialog();
|
||||
}
|
||||
|
||||
function validateDeleteAllEventsDialog() {
|
||||
QE('idx_dlgOkButton', Q('p3check').checked);
|
||||
}
|
||||
|
||||
function showDeleteAllEventsDialogEx(buttons, tag) {
|
||||
meshserver.send({ action: 'clearevents' });
|
||||
}
|
||||
|
||||
function refreshEvents() {
|
||||
meshserver.send({ action: 'events', limit: parseInt(p3limitdropdown.value) });
|
||||
}
|
||||
|
@ -7902,23 +7918,35 @@
|
|||
function userEventsUpdate() {
|
||||
var x = '', dateHeader = null;
|
||||
for (var i in currentUserEvents) {
|
||||
var event = currentUserEvents[i];
|
||||
var time = new Date(event.time);
|
||||
if (printDate(time) != dateHeader) {
|
||||
if (dateHeader != null) x += '</table>';
|
||||
dateHeader = printDate(time);
|
||||
x += '<table style=width:100% cellpadding=0 cellspacing=0><tr><td class=DevSt>' + dateHeader + '</td></tr>';
|
||||
}
|
||||
var icon = 'si3';
|
||||
if (event.etype == 'user') icon = 'm2';
|
||||
if (event.etype == 'server') icon = 'si3';
|
||||
var event = currentUserEvents[i], time = new Date(event.time);
|
||||
if (event.msg) {
|
||||
if (event.h == null) { event.h = Math.random(); }
|
||||
if (printDate(time) != dateHeader) {
|
||||
if (dateHeader != null) x += '</table>';
|
||||
dateHeader = printDate(time);
|
||||
x += '<table class=p3eventsTable cellpadding=0 cellspacing=0><tr><td colspan=4 class=DevSt>' + dateHeader + '</td></tr>';
|
||||
}
|
||||
var icon = 'si3';
|
||||
if (event.etype == 'user') icon = 'm2';
|
||||
if (event.etype == 'server') icon = 'si3';
|
||||
|
||||
var msg = event.msg.split('(R)').join('®');
|
||||
if (event.username && event.username != userinfo.name) { msg += ': ' + event.username; }
|
||||
x += '<tr><td><div class=bar18 style=height:18px;width:100%;font-size:medium>';
|
||||
x += '<div style=float:left;height:18px;width:18px;background-color:white><div class=' + icon + ' style=width:16px;margin-top:1px;margin-left:2px;height:16px></div></div>';
|
||||
x += '<div class=g1 style=height:18px;float:left></div><div class=g2 style=height:18px;float:right></div>';
|
||||
x += '<div style=font-size:14px><span style=width:300px>' + printTime(time) + ' - ' + msg + '</span></div></div></td></tr>';
|
||||
var msg = event.msg.split('(R)').join('®');
|
||||
if (event.nodeid) {
|
||||
var node = getNodeFromId(event.nodeid);
|
||||
if (node != null) {
|
||||
icon = 'si' + node.icon;
|
||||
msg = '<a href=# onclick=\'gotoDevice("' + event.nodeid + '",10);haltEvent(event);\'>' + node.name + '</a> → ' + msg;
|
||||
}
|
||||
}
|
||||
if (event.username && (event.username != currentUser.name)) {
|
||||
if ((userinfo.siteadmin & 2) && (event.userid)) {
|
||||
msg = '<a href=# onclick=\'gotoUser("' + encodeURIComponent(event.userid) + '");haltEvent(event);\'>' + event.username + '</a> → ' + msg;
|
||||
} else {
|
||||
msg = event.username + ' → ' + msg;
|
||||
}
|
||||
}
|
||||
x += '<tr onclick=showEventDetails(' + event.h + ',3) onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class=' + icon + '></div></td><td class=g1> </td><td class=style10>' + printTime(time) + ' - ' + msg + '</td><td class=g2> </td></tr><tr style=height:2px></tr>';
|
||||
}
|
||||
}
|
||||
if (dateHeader != null) x += '</table>';
|
||||
if (x == '') x = "<br><i>No Events Found</i><br><br>";
|
||||
|
@ -8516,6 +8544,7 @@
|
|||
//function addHtmlValue(t, v) { return '<div style=height:20px><div style=float:right;width:220px><b>' + v + '</b></div><div>' + t + '</div></div>'; }
|
||||
function addHtmlValue(t, v) { return '<table><td style=width:120px>' + t + '<td><b>' + v + '</b></table>'; }
|
||||
function addHtmlValue2(t, v) { return '<div><div style=display:inline-block;float:right>' + v + '</div><div style=display:inline-block>' + t + '</div></div>'; }
|
||||
function addHtmlValue3(t, v) { return '<div><b>' + t + '</b></div><div style=margin-left:16px>' + v + '</div>'; }
|
||||
function parseUriArgs() { var name, r = {}, parsedUri = window.document.location.href.split(/[\?&|\=]/); parsedUri.splice(0, 1); for (x in parsedUri) { switch (x % 2) { case 0: { name = decodeURIComponent(parsedUri[x]); break; } case 1: { r[name] = decodeURIComponent(parsedUri[x]); var x = parseInt(r[name]); if (x == r[name]) { r[name] = x; } break; } default: { break; } } } return r; }
|
||||
function focusTextBox(x) { setTimeout(function(){ Q(x).selectionStart = Q(x).selectionEnd = 65535; Q(x).focus(); }, 0); }
|
||||
function validateEmail(v) { var emailReg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return emailReg.test(v); } // New version
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue