Improved internalization.

This commit is contained in:
Ylian Saint-Hilaire 2019-12-23 14:25:27 -08:00
parent 74e2529655
commit 2e81ba0bf9
18 changed files with 1805 additions and 1228 deletions

6
.gitignore vendored
View File

@ -5,6 +5,12 @@
[Dd]aemon/
[Bb]in/
[Aa]gent/
[Aa]gents/modules_meshcmd_min/
[Aa]gents/modules_meshcore_min/
[Aa]gents/meshcmd.min.js
[Aa]gents/meshcore.min.js
[Pu]ublic/translations/
[Vv]iews/translations/
meshcentral.db
meshcentral.db.json
mesherrors.txt

View File

@ -1211,9 +1211,9 @@ function createMeshCore(agent) {
var setupcommands = " alias ls='ls --color=auto'\n";
if (shell == sh) setupcommands += "stty erase ^H\n"
if (script && shell) {
if (script && shell && process.platform == 'linux') {
this.httprequest.process = childProcess.execFile(script, ['script', '--return', '--quiet', '-c', '"' + shell + '"', '/dev/null'], options); // Start as active user
if (process.platform == 'linux') { this.httprequest.process.stdin.write(setupcommands); }
this.httprequest.process.stdin.write(setupcommands);
} else if (python && shell) {
this.httprequest.process = childProcess.execFile(python, ['python', '-c', 'import pty; pty.spawn(["' + shell + '"])'], options); // Start as active user
if (process.platform == 'linux') { this.httprequest.process.stdin.write(setupcommands); }

View File

@ -288,40 +288,66 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
// Take a look at server stats
var os = require('os');
var stats = { action: 'serverstats', totalmem: os.totalmem(), freemem: os.freemem() };
if (parent.parent.platform != 'win32') { stats.cpuavg = os.loadavg(); } // else { stats.cpuavg = [ 0.2435345, 0.523234234, 0.6435345345 ]; }
if (parent.parent.platform != 'win32') { stats.cpuavg = os.loadavg(); }
var serverStats = {
"User Accounts": Object.keys(parent.users).length,
"Device Groups": Object.keys(parent.meshes).length,
"Agent Sessions": Object.keys(parent.wsagents).length,
"Connected Users": Object.keys(parent.wssessions).length,
"Users Sessions": Object.keys(parent.wssessions2).length,
"Relay Sessions": parent.relaySessionCount,
"Relay Count": Object.keys(parent.wsrelays).length
UserAccounts: Object.keys(parent.users).length,
DeviceGroups: Object.keys(parent.meshes).length,
AgentSessions: Object.keys(parent.wsagents).length,
ConnectedUsers: Object.keys(parent.wssessions).length,
UsersSessions: Object.keys(parent.wssessions2).length,
RelaySessions: parent.relaySessionCount,
RelayCount: Object.keys(parent.wsrelays).length
};
if (parent.relaySessionErrorCount != 0) { serverStats['Relay Errors'] = parent.relaySessionErrorCount; }
if (parent.parent.mpsserver != null) { serverStats['Connected Intel® AMT'] = Object.keys(parent.parent.mpsserver.ciraConnections).length; }
if (parent.relaySessionErrorCount != 0) { serverStats.RelayErrors = parent.relaySessionErrorCount; }
if (parent.parent.mpsserver != null) { serverStats.ConnectedIntelAMT = Object.keys(parent.parent.mpsserver.ciraConnections).length; }
// Take a look at agent errors
var agentstats = parent.getAgentStats();
var errorCounters = {}, errorCountersCount = 0;
if (agentstats.meshDoesNotExistCount > 0) { errorCountersCount++; errorCounters["Unknown Group"] = agentstats.meshDoesNotExistCount; }
if (agentstats.invalidPkcsSignatureCount > 0) { errorCountersCount++; errorCounters["Invalid PKCS signature"] = agentstats.invalidPkcsSignatureCount; }
if (agentstats.invalidRsaSignatureCount > 0) { errorCountersCount++; errorCounters["Invalid RSA siguature"] = agentstats.invalidRsaSignatureCount; }
if (agentstats.invalidJsonCount > 0) { errorCountersCount++; errorCounters["Invalid JSON"] = agentstats.invalidJsonCount; }
if (agentstats.unknownAgentActionCount > 0) { errorCountersCount++; errorCounters["Unknown Action"] = agentstats.unknownAgentActionCount; }
if (agentstats.agentBadWebCertHashCount > 0) { errorCountersCount++; errorCounters["Bad Web Certificate"] = agentstats.agentBadWebCertHashCount; }
if ((agentstats.agentBadSignature1Count + agentstats.agentBadSignature2Count) > 0) { errorCountersCount++; errorCounters["Bad Signature"] = (agentstats.agentBadSignature1Count + agentstats.agentBadSignature2Count); }
if (agentstats.agentMaxSessionHoldCount > 0) { errorCountersCount++; errorCounters["Max Sessions Reached"] = agentstats.agentMaxSessionHoldCount; }
if ((agentstats.invalidDomainMeshCount + agentstats.invalidDomainMesh2Count) > 0) { errorCountersCount++; errorCounters["Unknown Device Group"] = (agentstats.invalidDomainMeshCount + agentstats.invalidDomainMesh2Count); }
if ((agentstats.invalidMeshTypeCount + agentstats.invalidMeshType2Count) > 0) { errorCountersCount++; errorCounters["Invalid Device Group Type"] = (agentstats.invalidMeshTypeCount + agentstats.invalidMeshType2Count); }
//if (agentstats.duplicateAgentCount > 0) { errorCountersCount++; errorCounters["Duplicate Agent"] = agentstats.duplicateAgentCount; }
if (agentstats.meshDoesNotExistCount > 0) { errorCountersCount++; errorCounters.UnknownGroup = agentstats.meshDoesNotExistCount; }
if (agentstats.invalidPkcsSignatureCount > 0) { errorCountersCount++; errorCounters.InvalidPKCSsignature = agentstats.invalidPkcsSignatureCount; }
if (agentstats.invalidRsaSignatureCount > 0) { errorCountersCount++; errorCounters.InvalidRSAsiguature = agentstats.invalidRsaSignatureCount; }
if (agentstats.invalidJsonCount > 0) { errorCountersCount++; errorCounters.InvalidJSON = agentstats.invalidJsonCount; }
if (agentstats.unknownAgentActionCount > 0) { errorCountersCount++; errorCounters.UnknownAction = agentstats.unknownAgentActionCount; }
if (agentstats.agentBadWebCertHashCount > 0) { errorCountersCount++; errorCounters.BadWebCertificate = agentstats.agentBadWebCertHashCount; }
if ((agentstats.agentBadSignature1Count + agentstats.agentBadSignature2Count) > 0) { errorCountersCount++; errorCounters.BadSignature = (agentstats.agentBadSignature1Count + agentstats.agentBadSignature2Count); }
if (agentstats.agentMaxSessionHoldCount > 0) { errorCountersCount++; errorCounters.MaxSessionsReached = agentstats.agentMaxSessionHoldCount; }
if ((agentstats.invalidDomainMeshCount + agentstats.invalidDomainMesh2Count) > 0) { errorCountersCount++; errorCounters.UnknownDeviceGroup = (agentstats.invalidDomainMeshCount + agentstats.invalidDomainMesh2Count); }
if ((agentstats.invalidMeshTypeCount + agentstats.invalidMeshType2Count) > 0) { errorCountersCount++; errorCounters.InvalidDeviceGroupType = (agentstats.invalidMeshTypeCount + agentstats.invalidMeshType2Count); }
//if (agentstats.duplicateAgentCount > 0) { errorCountersCount++; errorCounters.DuplicateAgent = agentstats.duplicateAgentCount; }
// Send out the stats
stats.values = { "Server State": serverStats }
if (errorCountersCount > 0) { stats.values["Agent Error Counters"] = errorCounters; }
stats.values = { ServerState: serverStats }
if (errorCountersCount > 0) { stats.values.AgentErrorCounters = errorCounters; }
try { ws.send(JSON.stringify(stats)); } catch (ex) { }
}
//
var serverStatsStrings = {
ServerState: "Server State",
AgentErrorCounters: "Agent Error Counters",
UnknownGroup: "Unknown Group",
InvalidPKCSsignature: "Invalid PKCS signature",
InvalidRSAsiguature: "Invalid RSA siguature",
InvalidJSON: "Invalid JSON",
UnknownAction: "Unknown Action",
BadWebCertificate: "Bad Web Certificate",
BadSignature: "Bad Signature",
MaxSessionsReached: "Max Sessions Reached",
UnknownDeviceGroup: "Unknown Device Group",
InvalidDeviceGroupType: "Invalid Device Group Type",
DuplicateAgent: "Duplicate Agent",
ConnectedIntelAMT: "Connected Intel® AMT",
RelayErrors: "Relay Errors",
UserAccounts: "User Accounts",
DeviceGroups: "Device Groups",
AgentSessions: "Agent Sessions",
ConnectedUsers: "Connected Users",
UsersSessions: "Users Sessions",
RelaySessions: "Relay Sessions",
RelayCount: "Relay Count"
};
// When data is received from the web socket
ws.on('message', processWebSocketData);

View File

@ -1,6 +1,6 @@
{
"name": "meshcentral",
"version": "0.4.6-j",
"version": "0.4.6-k",
"keywords": [
"Remote Management",
"Intel AMT",

View File

@ -235,22 +235,28 @@ function totext(source, target, lang) {
// Generate raw text
var output = [];
var outputCharCount = 0; // Google has a 5000 character limit
var splitOutput = [];
var splitOutputPtr = 1;
var count = 0;
for (var i in sourceLangFileData.strings) {
if ((sourceLangFileData.strings[i][lang] != null) && (sourceLangFileData.strings[i][lang].indexOf('\r') == -1) && (sourceLangFileData.strings[i][lang].indexOf('\n') == -1)) {
output.push(sourceLangFileData.strings[i][lang]);
if (splitOutput[Math.floor(count / 1000) + 1] == null) { splitOutput[Math.floor(count / 1000) + 1] = []; }
splitOutput[Math.floor(count / 1000) + 1].push(sourceLangFileData.strings[i][lang]);
outputCharCount += (sourceLangFileData.strings[i][lang].length + 2);
if (outputCharCount > 4500) { outputCharCount = 0; splitOutputPtr++; }
if (splitOutput[splitOutputPtr] == null) { splitOutput[splitOutputPtr] = []; }
splitOutput[splitOutputPtr].push(sourceLangFileData.strings[i][lang]);
} else {
output.push('');
if (splitOutput[Math.floor(count / 1000) + 1] == null) { splitOutput[Math.floor(count / 1000) + 1] = []; }
splitOutput[Math.floor(count / 1000) + 1].push('');
outputCharCount += 2;
if (outputCharCount > 4500) { outputCharCount = 0; splitOutputPtr++; }
if (splitOutput[splitOutputPtr] == null) { splitOutput[splitOutputPtr] = []; }
splitOutput[splitOutputPtr].push('');
}
count++;
}
if (output.length <= 1000) {
if (splitOutputPtr == 1) {
// Save the target back
fs.writeFileSync(target + '-' + lang + '.txt', output.join('\r\n'), { flag: 'w+' });
console.log('Done.');
@ -376,7 +382,8 @@ function extract(langFile, sources) {
for (var i in sourceStrings) {
count++;
sourceStrings[i]['en'] = i;
if ((sourceStrings[i].xloc != null) && (sourceStrings[i].xloc.length > 0)) { output.push(sourceStrings[i]); } // Only save results that have a source location.
//if ((sourceStrings[i].xloc != null) && (sourceStrings[i].xloc.length > 0)) { output.push(sourceStrings[i]); } // Only save results that have a source location.
output.push(sourceStrings[i]); // Save all results
}
fs.writeFileSync(langFile, JSON.stringify({ 'strings': output }, null, ' '), { flag: 'w+' });
console.log(format("{0} strings in output file.", count));

File diff suppressed because it is too large Load Diff

View File

@ -2586,11 +2586,11 @@
function onSearchInputChanged() {
var x = Q('SearchInput').value.toLowerCase().trim(); putstore('_search', x);
var userSearch = null, ipSearch = null, groupSearch = null;
if (x.startsWith('user:')) { userSearch = x.substring(5); }
else if (x.startsWith('u:')) { userSearch = x.substring(2); }
else if (x.startsWith('ip:')) { ipSearch = x.substring(3); }
else if (x.startsWith('group:')) { groupSearch = x.substring(6); }
else if (x.startsWith('g:')) { groupSearch = x.substring(2); }
if (x.startsWith("user:")) { userSearch = x.substring(5); }
else if (x.startsWith("u:")) { userSearch = x.substring(2); }
else if (x.startsWith("ip:")) { ipSearch = x.substring(3); }
else if (x.startsWith("group:")) { groupSearch = x.substring(6); }
else if (x.startsWith("g:")) { groupSearch = x.substring(2); }
if (x == '') {
// No search
@ -2919,7 +2919,7 @@
});
// On right click open the context menu
contextmenu.on("open", function (evt) {
contextmenu.on('open', function (evt) {
var feature = xxmap.map.forEachFeatureAtPixel(evt.pixel, function(ft, l){ return ft; });
xxmap.contextmenu.clear(); //Clear the context menu
if (feature) {
@ -6656,8 +6656,8 @@
function p20editmeshfeatures() {
if (xxdialogMode) return;
var flags = (currentMesh.flags)?currentMesh.flags:0;
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>Remove device on disconnect</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>Sync server device name to hostname</label><br></div>';
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>' + "Sync server device name to hostname" + '</label><br></div>';
setDialogMode(2, "Edit Device Group Features", 3, p20editmeshfeaturesEx, x);
}
@ -6885,10 +6885,10 @@
if (xxdialogMode) return false;
var meshNotify = 0;
if (userinfo.links && userinfo.links[currentMesh._id] && userinfo.links[currentMesh._id].notify) { meshNotify = userinfo.links[currentMesh._id].notify; }
var x = 'Notification settings must also be turned on in account settings.<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel&reg; AMT desktop and serial events.</label></div>';
var x = "Notification settings must also be turned on in account settings." + '<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />' + "Device connections." + '</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />' + "Device disconnections." + '</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />' + "Intel&reg; AMT desktop and serial events." + '</label></div>';
setDialogMode(2, "Notification Settings", 3, p20editMeshNotifyEx, x);
Q('p20notifyIntelDeviceConnect').checked = (meshNotify & 2);
Q('p20notifyIntelDeviceDisconnect').checked = (meshNotify & 4);
@ -7452,7 +7452,7 @@
// Display the users using the sorted list
var x = '<table class=p3usersTable cellpadding=0 cellspacing=0>', addHeader = true;
x += '<th>' + "Name" + '<th style=width:80px>Groups<th style=width:120px>' + nobreak("Last Access") + '<th style=width:120px>' + "Permissions";
x += '<th>' + "Name" + '<th style=width:80px>' + "Groups" + '<th style=width:120px>' + nobreak("Last Access") + '<th style=width:120px>' + "Permissions";
// Online users
for (var i in sortedUserIds) {
@ -7909,9 +7909,9 @@
// Show bottom buttons
x = '<div style=float:right;font-size:x-small>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">Delete User</a>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">' + "Delete User" + '</a>';
x += '</div><div style=font-size:x-small>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">Change Password</a>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">' + "Change Password" + '</a>';
x += '</div><br>'
QH('p30html3', x);
@ -8052,7 +8052,7 @@
++count;
date = new Date(date.getTime() - (1000 * 60 * 60 * 24)); // Substract one day
}
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center>7 Day Login State</th></tr>' + x + '</tbody></table>');
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>' + "Day" + '</th><th scope=col style=text-align:center>' + "7 Day Login State" + '</th></tr>' + x + '</tbody></table>');
}
//
@ -8356,6 +8356,31 @@
});
}
var serverStatsStrings = {
ServerState: "Server State",
AgentErrorCounters: "Agent Error Counters",
UnknownGroup: "Unknown Group",
InvalidPKCSsignature: "Invalid PKCS signature",
InvalidRSAsiguature: "Invalid RSA siguature",
InvalidJSON: "Invalid JSON",
UnknownAction: "Unknown Action",
BadWebCertificate: "Bad Web Certificate",
BadSignature: "Bad Signature",
MaxSessionsReached: "Max Sessions Reached",
UnknownDeviceGroup: "Unknown Device Group",
InvalidDeviceGroupType: "Invalid Device Group Type",
DuplicateAgent: "Duplicate Agent",
ConnectedIntelAMT: "Connected Intel&reg; AMT",
RelayErrors: "Relay Errors",
UserAccounts: "User Accounts",
DeviceGroups: "Device Groups",
AgentSessions: "Agent Sessions",
ConnectedUsers: "Connected Users",
UsersSessions: "Users Sessions",
RelaySessions: "Relay Sessions",
RelayCount: "Relay Count"
};
var lastServerStats = null;
function updateGeneralServerStats(message) {
if (message != null) { lastServerStats = message; } else { message = lastServerStats; }
@ -8365,7 +8390,7 @@
if (typeof message.cpuavg == 'object') {
var m = Math.min(message.cpuavg[0], 1);
window.serverStatCpu.config.data.datasets[0].data = [m, 1 - m];
QH('serverCpuChartText', '<div style=margin-bottom:5px>CPU Load</div><div><b title=\"' + "CPU load in the last minute" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 5 minutes" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 15 minutes" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QH('serverCpuChartText', '<div style=margin-bottom:5px>' + "CPU Load" + '</div><div><b title=\"' + "CPU load in the last minute" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 5 minutes" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 15 minutes" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QS('serverCpuChartView')['display'] = 'inline-block';
window.serverStatCpu.update();
}
@ -8377,12 +8402,13 @@
}
// Display all of the server values
// serverStatsStrings
var x = '<div style=width:100% cellpadding=0 cellspacing=0>';
if (typeof message.values == 'object') {
for (var i in message.values) {
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + i + '</div>';
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + (serverStatsStrings[i]?serverStatsStrings[i]:i) + '</div>';
for (var j in message.values[i]) {
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + j + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + (serverStatsStrings[j]?serverStatsStrings[j]:j) + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
}
}
}
@ -8473,10 +8499,10 @@
data = {
labels: [pastDate(0), timeAfter],
datasets: [
{ label: 'External', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: 'Heap Used', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: 'Heap Total', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: 'RSS', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
{ label: "External", data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: "Heap Used", data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: "Heap Total", data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: "RSS", data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
]
};
for (var i = 0; i < serverTimelineStats.length; i++) {

View File

@ -3640,11 +3640,11 @@
function onSearchInputChanged() {
var x = Q('SearchInput').value.toLowerCase().trim(); putstore('_search', x);
var userSearch = null, ipSearch = null, groupSearch = null;
if (x.startsWith('user:')) { userSearch = x.substring(5); }
else if (x.startsWith('u:')) { userSearch = x.substring(2); }
else if (x.startsWith('ip:')) { ipSearch = x.substring(3); }
else if (x.startsWith('group:')) { groupSearch = x.substring(6); }
else if (x.startsWith('g:')) { groupSearch = x.substring(2); }
if (x.startsWith("user:")) { userSearch = x.substring(5); }
else if (x.startsWith("u:")) { userSearch = x.substring(2); }
else if (x.startsWith("ip:")) { ipSearch = x.substring(3); }
else if (x.startsWith("group:")) { groupSearch = x.substring(6); }
else if (x.startsWith("g:")) { groupSearch = x.substring(2); }
if (x == '') {
// No search
@ -3973,7 +3973,7 @@
});
// On right click open the context menu
contextmenu.on("open", function (evt) {
contextmenu.on('open', function (evt) {
var feature = xxmap.map.forEachFeatureAtPixel(evt.pixel, function(ft, l){ return ft; });
xxmap.contextmenu.clear(); //Clear the context menu
if (feature) {
@ -7710,8 +7710,8 @@
function p20editmeshfeatures() {
if (xxdialogMode) return;
var flags = (currentMesh.flags)?currentMesh.flags:0;
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>Remove device on disconnect</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>Sync server device name to hostname</label><br></div>';
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>' + "Sync server device name to hostname" + '</label><br></div>';
setDialogMode(2, "Edit Device Group Features", 3, p20editmeshfeaturesEx, x);
}
@ -7939,10 +7939,10 @@
if (xxdialogMode) return false;
var meshNotify = 0;
if (userinfo.links && userinfo.links[currentMesh._id] && userinfo.links[currentMesh._id].notify) { meshNotify = userinfo.links[currentMesh._id].notify; }
var x = 'Notification settings must also be turned on in account settings.<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel&reg; AMT desktop and serial events.</label></div>';
var x = "Notification settings must also be turned on in account settings." + '<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />' + "Device connections." + '</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />' + "Device disconnections." + '</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />' + "Intel&reg; AMT desktop and serial events." + '</label></div>';
setDialogMode(2, "Notification Settings", 3, p20editMeshNotifyEx, x);
Q('p20notifyIntelDeviceConnect').checked = (meshNotify & 2);
Q('p20notifyIntelDeviceDisconnect').checked = (meshNotify & 4);
@ -8506,7 +8506,7 @@
// Display the users using the sorted list
var x = '<table class=p3usersTable cellpadding=0 cellspacing=0>', addHeader = true;
x += '<th>' + "Name" + '<th style=width:80px>Groups<th style=width:120px>' + nobreak("Last Access") + '<th style=width:120px>' + "Permissions";
x += '<th>' + "Name" + '<th style=width:80px>' + "Groups" + '<th style=width:120px>' + nobreak("Last Access") + '<th style=width:120px>' + "Permissions";
// Online users
for (var i in sortedUserIds) {
@ -8963,9 +8963,9 @@
// Show bottom buttons
x = '<div style=float:right;font-size:x-small>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">Delete User</a>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">' + "Delete User" + '</a>';
x += '</div><div style=font-size:x-small>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">Change Password</a>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">' + "Change Password" + '</a>';
x += '</div><br>'
QH('p30html3', x);
@ -9106,7 +9106,7 @@
++count;
date = new Date(date.getTime() - (1000 * 60 * 60 * 24)); // Substract one day
}
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center>7 Day Login State</th></tr>' + x + '</tbody></table>');
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>' + "Day" + '</th><th scope=col style=text-align:center>' + "7 Day Login State" + '</th></tr>' + x + '</tbody></table>');
}
//
@ -9410,6 +9410,31 @@
});
}
var serverStatsStrings = {
ServerState: "Server State",
AgentErrorCounters: "Agent Error Counters",
UnknownGroup: "Unknown Group",
InvalidPKCSsignature: "Invalid PKCS signature",
InvalidRSAsiguature: "Invalid RSA siguature",
InvalidJSON: "Invalid JSON",
UnknownAction: "Unknown Action",
BadWebCertificate: "Bad Web Certificate",
BadSignature: "Bad Signature",
MaxSessionsReached: "Max Sessions Reached",
UnknownDeviceGroup: "Unknown Device Group",
InvalidDeviceGroupType: "Invalid Device Group Type",
DuplicateAgent: "Duplicate Agent",
ConnectedIntelAMT: "Connected Intel&reg; AMT",
RelayErrors: "Relay Errors",
UserAccounts: "User Accounts",
DeviceGroups: "Device Groups",
AgentSessions: "Agent Sessions",
ConnectedUsers: "Connected Users",
UsersSessions: "Users Sessions",
RelaySessions: "Relay Sessions",
RelayCount: "Relay Count"
};
var lastServerStats = null;
function updateGeneralServerStats(message) {
if (message != null) { lastServerStats = message; } else { message = lastServerStats; }
@ -9419,7 +9444,7 @@
if (typeof message.cpuavg == 'object') {
var m = Math.min(message.cpuavg[0], 1);
window.serverStatCpu.config.data.datasets[0].data = [m, 1 - m];
QH('serverCpuChartText', '<div style=margin-bottom:5px>CPU Load</div><div><b title=\"' + "CPU load in the last minute" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 5 minutes" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 15 minutes" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QH('serverCpuChartText', '<div style=margin-bottom:5px>' + "CPU Load" + '</div><div><b title=\"' + "CPU load in the last minute" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 5 minutes" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 15 minutes" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QS('serverCpuChartView')['display'] = 'inline-block';
window.serverStatCpu.update();
}
@ -9431,12 +9456,13 @@
}
// Display all of the server values
// serverStatsStrings
var x = '<div style=width:100% cellpadding=0 cellspacing=0>';
if (typeof message.values == 'object') {
for (var i in message.values) {
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + i + '</div>';
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + (serverStatsStrings[i]?serverStatsStrings[i]:i) + '</div>';
for (var j in message.values[i]) {
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + j + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + (serverStatsStrings[j]?serverStatsStrings[j]:j) + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
}
}
}
@ -9527,10 +9553,10 @@
data = {
labels: [pastDate(0), timeAfter],
datasets: [
{ label: 'External', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: 'Heap Used', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: 'Heap Total', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: 'RSS', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
{ label: "External", data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: "Heap Used", data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: "Heap Total", data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: "RSS", data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
]
};
for (var i = 0; i < serverTimelineStats.length; i++) {

View File

@ -2586,11 +2586,11 @@
function onSearchInputChanged() {
var x = Q('SearchInput').value.toLowerCase().trim(); putstore('_search', x);
var userSearch = null, ipSearch = null, groupSearch = null;
if (x.startsWith('user:')) { userSearch = x.substring(5); }
else if (x.startsWith('u:')) { userSearch = x.substring(2); }
else if (x.startsWith('ip:')) { ipSearch = x.substring(3); }
else if (x.startsWith('group:')) { groupSearch = x.substring(6); }
else if (x.startsWith('g:')) { groupSearch = x.substring(2); }
if (x.startsWith("user:")) { userSearch = x.substring(5); }
else if (x.startsWith("u:")) { userSearch = x.substring(2); }
else if (x.startsWith("ip:")) { ipSearch = x.substring(3); }
else if (x.startsWith("group:")) { groupSearch = x.substring(6); }
else if (x.startsWith("g:")) { groupSearch = x.substring(2); }
if (x == '') {
// No search
@ -2919,7 +2919,7 @@
});
// On right click open the context menu
contextmenu.on("otevřít", function (evt) {
contextmenu.on('open', function (evt) {
var feature = xxmap.map.forEachFeatureAtPixel(evt.pixel, function(ft, l){ return ft; });
xxmap.contextmenu.clear(); //Clear the context menu
if (feature) {
@ -6656,8 +6656,8 @@
function p20editmeshfeatures() {
if (xxdialogMode) return;
var flags = (currentMesh.flags)?currentMesh.flags:0;
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>Remove device on disconnect</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>Sync server device name to hostname</label><br></div>';
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>' + "Sync server device name to hostname" + '</label><br></div>';
setDialogMode(2, "Upravit vlastnosti skupiny zařízení", 3, p20editmeshfeaturesEx, x);
}
@ -6885,10 +6885,10 @@
if (xxdialogMode) return false;
var meshNotify = 0;
if (userinfo.links && userinfo.links[currentMesh._id] && userinfo.links[currentMesh._id].notify) { meshNotify = userinfo.links[currentMesh._id].notify; }
var x = 'Notification settings must also be turned on in account settings.<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel&reg; AMT desktop and serial events.</label></div>';
var x = "Notification settings must also be turned on in account settings." + '<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />' + "Připojení zařízení" + '</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />' + "Odpojení zařízení" + '</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />' + "Intel&reg; AMT desktop and serial události." + '</label></div>';
setDialogMode(2, "Nastavení notifikací", 3, p20editMeshNotifyEx, x);
Q('p20notifyIntelDeviceConnect').checked = (meshNotify & 2);
Q('p20notifyIntelDeviceDisconnect').checked = (meshNotify & 4);
@ -7452,7 +7452,7 @@
// Display the users using the sorted list
var x = '<table class=p3usersTable cellpadding=0 cellspacing=0>', addHeader = true;
x += '<th>' + "Jméno" + '<th style=width:80px>Groups<th style=width:120px>' + nobreak("Poslední přístup") + '<th style=width:120px>' + "Práva";
x += '<th>' + "Jméno" + '<th style=width:80px>' + "Groups" + '<th style=width:120px>' + nobreak("Poslední přístup") + '<th style=width:120px>' + "Práva";
// Online users
for (var i in sortedUserIds) {
@ -7909,9 +7909,9 @@
// Show bottom buttons
x = '<div style=float:right;font-size:x-small>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">Delete User</a>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">' + "Delete User" + '</a>';
x += '</div><div style=font-size:x-small>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">Change Password</a>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">' + "Změnit heslo" + '</a>';
x += '</div><br>'
QH('p30html3', x);
@ -8052,7 +8052,7 @@
++count;
date = new Date(date.getTime() - (1000 * 60 * 60 * 24)); // Substract one day
}
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center>7 Day Login State</th></tr>' + x + '</tbody></table>');
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>' + "Den" + '</th><th scope=col style=text-align:center>' + "7 Day Login State" + '</th></tr>' + x + '</tbody></table>');
}
//
@ -8356,6 +8356,31 @@
});
}
var serverStatsStrings = {
ServerState: "Server State",
AgentErrorCounters: "Agent Error Counters",
UnknownGroup: "Unknown Group",
InvalidPKCSsignature: "Invalid PKCS signature",
InvalidRSAsiguature: "Invalid RSA siguature",
InvalidJSON: "Invalid JSON",
UnknownAction: "Unknown Action",
BadWebCertificate: "Bad Web Certificate",
BadSignature: "Bad Signature",
MaxSessionsReached: "Max Sessions Reached",
UnknownDeviceGroup: "Unknown Device Group",
InvalidDeviceGroupType: "Invalid Device Group Type",
DuplicateAgent: "Duplicate Agent",
ConnectedIntelAMT: "Connected Intel&reg; AMT",
RelayErrors: "Relay Errors",
UserAccounts: "User Accounts",
DeviceGroups: "Skupiny zařízení",
AgentSessions: "Agent Sessions",
ConnectedUsers: "Connected Users",
UsersSessions: "Users Sessions",
RelaySessions: "Přesměrované relace",
RelayCount: "Relay Count"
};
var lastServerStats = null;
function updateGeneralServerStats(message) {
if (message != null) { lastServerStats = message; } else { message = lastServerStats; }
@ -8365,7 +8390,7 @@
if (typeof message.cpuavg == 'object') {
var m = Math.min(message.cpuavg[0], 1);
window.serverStatCpu.config.data.datasets[0].data = [m, 1 - m];
QH('serverCpuChartText', '<div style=margin-bottom:5px>CPU Load</div><div><b title=\"' + "CPU zatížení v poslední minutě" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU zatížení v posledních 5 minutách" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU zatížení v posledních 15 minutách" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QH('serverCpuChartText', '<div style=margin-bottom:5px>' + "CPU Load" + '</div><div><b title=\"' + "CPU zatížení v poslední minutě" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU zatížení v posledních 5 minutách" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU zatížení v posledních 15 minutách" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QS('serverCpuChartView')['display'] = 'inline-block';
window.serverStatCpu.update();
}
@ -8377,12 +8402,13 @@
}
// Display all of the server values
// serverStatsStrings
var x = '<div style=width:100% cellpadding=0 cellspacing=0>';
if (typeof message.values == 'object') {
for (var i in message.values) {
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + i + '</div>';
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + (serverStatsStrings[i]?serverStatsStrings[i]:i) + '</div>';
for (var j in message.values[i]) {
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + j + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + (serverStatsStrings[j]?serverStatsStrings[j]:j) + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
}
}
}
@ -8473,10 +8499,10 @@
data = {
labels: [pastDate(0), timeAfter],
datasets: [
{ label: 'External', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: 'Heap Used', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: 'Heap Total', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: 'RSS', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
{ label: "External", data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: "Heap Used", data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: "Heap Total", data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: "RSS", data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
]
};
for (var i = 0; i < serverTimelineStats.length; i++) {

View File

@ -2586,11 +2586,11 @@
function onSearchInputChanged() {
var x = Q('SearchInput').value.toLowerCase().trim(); putstore('_search', x);
var userSearch = null, ipSearch = null, groupSearch = null;
if (x.startsWith('user:')) { userSearch = x.substring(5); }
else if (x.startsWith('u:')) { userSearch = x.substring(2); }
else if (x.startsWith('ip:')) { ipSearch = x.substring(3); }
else if (x.startsWith('group:')) { groupSearch = x.substring(6); }
else if (x.startsWith('g:')) { groupSearch = x.substring(2); }
if (x.startsWith("user:")) { userSearch = x.substring(5); }
else if (x.startsWith("u:")) { userSearch = x.substring(2); }
else if (x.startsWith("ip:")) { ipSearch = x.substring(3); }
else if (x.startsWith("group:")) { groupSearch = x.substring(6); }
else if (x.startsWith("g:")) { groupSearch = x.substring(2); }
if (x == '') {
// No search
@ -2919,7 +2919,7 @@
});
// On right click open the context menu
contextmenu.on("open", function (evt) {
contextmenu.on('open', function (evt) {
var feature = xxmap.map.forEachFeatureAtPixel(evt.pixel, function(ft, l){ return ft; });
xxmap.contextmenu.clear(); //Clear the context menu
if (feature) {
@ -6656,8 +6656,8 @@
function p20editmeshfeatures() {
if (xxdialogMode) return;
var flags = (currentMesh.flags)?currentMesh.flags:0;
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>Remove device on disconnect</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>Sync server device name to hostname</label><br></div>';
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>' + "Sync server device name to hostname" + '</label><br></div>';
setDialogMode(2, "Edit Device Group Features", 3, p20editmeshfeaturesEx, x);
}
@ -6885,10 +6885,10 @@
if (xxdialogMode) return false;
var meshNotify = 0;
if (userinfo.links && userinfo.links[currentMesh._id] && userinfo.links[currentMesh._id].notify) { meshNotify = userinfo.links[currentMesh._id].notify; }
var x = 'Notification settings must also be turned on in account settings.<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel&reg; AMT desktop and serial events.</label></div>';
var x = "Notification settings must also be turned on in account settings." + '<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />' + "Device connections." + '</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />' + "Device disconnections." + '</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />' + "Intel&reg; AMT desktop and serial events." + '</label></div>';
setDialogMode(2, "Notification Settings", 3, p20editMeshNotifyEx, x);
Q('p20notifyIntelDeviceConnect').checked = (meshNotify & 2);
Q('p20notifyIntelDeviceDisconnect').checked = (meshNotify & 4);
@ -7452,7 +7452,7 @@
// Display the users using the sorted list
var x = '<table class=p3usersTable cellpadding=0 cellspacing=0>', addHeader = true;
x += '<th>' + "Nom" + '<th style=width:80px>Groups<th style=width:120px>' + nobreak("Dernier accès") + '<th style=width:120px>' + "Permissions";
x += '<th>' + "Nom" + '<th style=width:80px>' + "Groups" + '<th style=width:120px>' + nobreak("Dernier accès") + '<th style=width:120px>' + "Permissions";
// Online users
for (var i in sortedUserIds) {
@ -7909,9 +7909,9 @@
// Show bottom buttons
x = '<div style=float:right;font-size:x-small>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">Delete User</a>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">' + "Delete User" + '</a>';
x += '</div><div style=font-size:x-small>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">Change Password</a>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">' + "Change Password" + '</a>';
x += '</div><br>'
QH('p30html3', x);
@ -8052,7 +8052,7 @@
++count;
date = new Date(date.getTime() - (1000 * 60 * 60 * 24)); // Substract one day
}
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center>7 Day Login State</th></tr>' + x + '</tbody></table>');
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>' + "Day" + '</th><th scope=col style=text-align:center>' + "7 Day Login State" + '</th></tr>' + x + '</tbody></table>');
}
//
@ -8356,6 +8356,31 @@
});
}
var serverStatsStrings = {
ServerState: "Server State",
AgentErrorCounters: "Agent Error Counters",
UnknownGroup: "Unknown Group",
InvalidPKCSsignature: "Invalid PKCS signature",
InvalidRSAsiguature: "Invalid RSA siguature",
InvalidJSON: "Invalid JSON",
UnknownAction: "Unknown Action",
BadWebCertificate: "Bad Web Certificate",
BadSignature: "Bad Signature",
MaxSessionsReached: "Max Sessions Reached",
UnknownDeviceGroup: "Unknown Device Group",
InvalidDeviceGroupType: "Invalid Device Group Type",
DuplicateAgent: "Duplicate Agent",
ConnectedIntelAMT: "Connected Intel&reg; AMT",
RelayErrors: "Relay Errors",
UserAccounts: "User Accounts",
DeviceGroups: "Device Groups",
AgentSessions: "Agent Sessions",
ConnectedUsers: "Connected Users",
UsersSessions: "Users Sessions",
RelaySessions: "Relay Sessions",
RelayCount: "Relay Count"
};
var lastServerStats = null;
function updateGeneralServerStats(message) {
if (message != null) { lastServerStats = message; } else { message = lastServerStats; }
@ -8365,7 +8390,7 @@
if (typeof message.cpuavg == 'object') {
var m = Math.min(message.cpuavg[0], 1);
window.serverStatCpu.config.data.datasets[0].data = [m, 1 - m];
QH('serverCpuChartText', '<div style=margin-bottom:5px>CPU Load</div><div><b title=\"' + "CPU load in the last minute" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 5 minutes" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 15 minutes" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QH('serverCpuChartText', '<div style=margin-bottom:5px>' + "CPU Load" + '</div><div><b title=\"' + "CPU load in the last minute" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 5 minutes" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 15 minutes" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QS('serverCpuChartView')['display'] = 'inline-block';
window.serverStatCpu.update();
}
@ -8377,12 +8402,13 @@
}
// Display all of the server values
// serverStatsStrings
var x = '<div style=width:100% cellpadding=0 cellspacing=0>';
if (typeof message.values == 'object') {
for (var i in message.values) {
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + i + '</div>';
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + (serverStatsStrings[i]?serverStatsStrings[i]:i) + '</div>';
for (var j in message.values[i]) {
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + j + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + (serverStatsStrings[j]?serverStatsStrings[j]:j) + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
}
}
}
@ -8473,10 +8499,10 @@
data = {
labels: [pastDate(0), timeAfter],
datasets: [
{ label: 'External', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: 'Heap Used', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: 'Heap Total', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: 'RSS', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
{ label: "External", data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: "Heap Used", data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: "Heap Total", data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: "RSS", data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
]
};
for (var i = 0; i < serverTimelineStats.length; i++) {

View File

@ -2586,11 +2586,11 @@
function onSearchInputChanged() {
var x = Q('SearchInput').value.toLowerCase().trim(); putstore('_search', x);
var userSearch = null, ipSearch = null, groupSearch = null;
if (x.startsWith('user:')) { userSearch = x.substring(5); }
else if (x.startsWith('u:')) { userSearch = x.substring(2); }
else if (x.startsWith('ip:')) { ipSearch = x.substring(3); }
else if (x.startsWith('group:')) { groupSearch = x.substring(6); }
else if (x.startsWith('g:')) { groupSearch = x.substring(2); }
if (x.startsWith("user:")) { userSearch = x.substring(5); }
else if (x.startsWith("u:")) { userSearch = x.substring(2); }
else if (x.startsWith("ip:")) { ipSearch = x.substring(3); }
else if (x.startsWith("group:")) { groupSearch = x.substring(6); }
else if (x.startsWith("g:")) { groupSearch = x.substring(2); }
if (x == '') {
// No search
@ -2919,7 +2919,7 @@
});
// On right click open the context menu
contextmenu.on("開いた", function (evt) {
contextmenu.on('open', function (evt) {
var feature = xxmap.map.forEachFeatureAtPixel(evt.pixel, function(ft, l){ return ft; });
xxmap.contextmenu.clear(); //Clear the context menu
if (feature) {
@ -6656,8 +6656,8 @@
function p20editmeshfeatures() {
if (xxdialogMode) return;
var flags = (currentMesh.flags)?currentMesh.flags:0;
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>Remove device on disconnect</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>Sync server device name to hostname</label><br></div>';
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>' + "Sync server device name to hostname" + '</label><br></div>';
setDialogMode(2, "デバイスグループ機能の編集", 3, p20editmeshfeaturesEx, x);
}
@ -6885,10 +6885,10 @@
if (xxdialogMode) return false;
var meshNotify = 0;
if (userinfo.links && userinfo.links[currentMesh._id] && userinfo.links[currentMesh._id].notify) { meshNotify = userinfo.links[currentMesh._id].notify; }
var x = 'Notification settings must also be turned on in account settings.<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel&reg; AMT desktop and serial events.</label></div>';
var x = "Notification settings must also be turned on in account settings." + '<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />' + "デバイス接続。" + '</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />' + "デバイスの切断。" + '</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />' + "Intel&reg; AMTデスクトップおよびシリアルイベント。" + '</label></div>';
setDialogMode(2, "通知設定", 3, p20editMeshNotifyEx, x);
Q('p20notifyIntelDeviceConnect').checked = (meshNotify & 2);
Q('p20notifyIntelDeviceDisconnect').checked = (meshNotify & 4);
@ -7452,7 +7452,7 @@
// Display the users using the sorted list
var x = '<table class=p3usersTable cellpadding=0 cellspacing=0>', addHeader = true;
x += '<th>' + "名" + '<th style=width:80px>Groups<th style=width:120px>' + nobreak("最終アクセス") + '<th style=width:120px>' + "許可";
x += '<th>' + "名" + '<th style=width:80px>' + "Groups" + '<th style=width:120px>' + nobreak("最終アクセス") + '<th style=width:120px>' + "許可";
// Online users
for (var i in sortedUserIds) {
@ -7909,9 +7909,9 @@
// Show bottom buttons
x = '<div style=float:right;font-size:x-small>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">Delete User</a>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">' + "Delete User" + '</a>';
x += '</div><div style=font-size:x-small>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">Change Password</a>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">' + "パスワードを変更する" + '</a>';
x += '</div><br>'
QH('p30html3', x);
@ -8052,7 +8052,7 @@
++count;
date = new Date(date.getTime() - (1000 * 60 * 60 * 24)); // Substract one day
}
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center>7 Day Login State</th></tr>' + x + '</tbody></table>');
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>' + "日" + '</th><th scope=col style=text-align:center>' + "7 Day Login State" + '</th></tr>' + x + '</tbody></table>');
}
//
@ -8356,6 +8356,31 @@
});
}
var serverStatsStrings = {
ServerState: "Server State",
AgentErrorCounters: "Agent Error Counters",
UnknownGroup: "Unknown Group",
InvalidPKCSsignature: "Invalid PKCS signature",
InvalidRSAsiguature: "Invalid RSA siguature",
InvalidJSON: "Invalid JSON",
UnknownAction: "Unknown Action",
BadWebCertificate: "Bad Web Certificate",
BadSignature: "Bad Signature",
MaxSessionsReached: "Max Sessions Reached",
UnknownDeviceGroup: "Unknown Device Group",
InvalidDeviceGroupType: "Invalid Device Group Type",
DuplicateAgent: "Duplicate Agent",
ConnectedIntelAMT: "Connected Intel&reg; AMT",
RelayErrors: "Relay Errors",
UserAccounts: "User Accounts",
DeviceGroups: "デバイスグループ",
AgentSessions: "Agent Sessions",
ConnectedUsers: "Connected Users",
UsersSessions: "Users Sessions",
RelaySessions: "中継セッション",
RelayCount: "Relay Count"
};
var lastServerStats = null;
function updateGeneralServerStats(message) {
if (message != null) { lastServerStats = message; } else { message = lastServerStats; }
@ -8365,7 +8390,7 @@
if (typeof message.cpuavg == 'object') {
var m = Math.min(message.cpuavg[0], 1);
window.serverStatCpu.config.data.datasets[0].data = [m, 1 - m];
QH('serverCpuChartText', '<div style=margin-bottom:5px>CPU Load</div><div><b title=\"' + "直前のCPU負荷" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "過去5分間のCPU負荷" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "過去15分間のCPU負荷" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QH('serverCpuChartText', '<div style=margin-bottom:5px>' + "CPU Load" + '</div><div><b title=\"' + "直前のCPU負荷" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "過去5分間のCPU負荷" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "過去15分間のCPU負荷" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QS('serverCpuChartView')['display'] = 'inline-block';
window.serverStatCpu.update();
}
@ -8377,12 +8402,13 @@
}
// Display all of the server values
// serverStatsStrings
var x = '<div style=width:100% cellpadding=0 cellspacing=0>';
if (typeof message.values == 'object') {
for (var i in message.values) {
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + i + '</div>';
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + (serverStatsStrings[i]?serverStatsStrings[i]:i) + '</div>';
for (var j in message.values[i]) {
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + j + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + (serverStatsStrings[j]?serverStatsStrings[j]:j) + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
}
}
}
@ -8473,10 +8499,10 @@
data = {
labels: [pastDate(0), timeAfter],
datasets: [
{ label: 'External', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: 'Heap Used', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: 'Heap Total', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: 'RSS', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
{ label: "External", data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: "Heap Used", data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: "Heap Total", data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: "RSS", data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
]
};
for (var i = 0; i < serverTimelineStats.length; i++) {

View File

@ -2586,11 +2586,11 @@
function onSearchInputChanged() {
var x = Q('SearchInput').value.toLowerCase().trim(); putstore('_search', x);
var userSearch = null, ipSearch = null, groupSearch = null;
if (x.startsWith('user:')) { userSearch = x.substring(5); }
else if (x.startsWith('u:')) { userSearch = x.substring(2); }
else if (x.startsWith('ip:')) { ipSearch = x.substring(3); }
else if (x.startsWith('group:')) { groupSearch = x.substring(6); }
else if (x.startsWith('g:')) { groupSearch = x.substring(2); }
if (x.startsWith("user:")) { userSearch = x.substring(5); }
else if (x.startsWith("u:")) { userSearch = x.substring(2); }
else if (x.startsWith("ip:")) { ipSearch = x.substring(3); }
else if (x.startsWith("group:")) { groupSearch = x.substring(6); }
else if (x.startsWith("g:")) { groupSearch = x.substring(2); }
if (x == '') {
// No search
@ -2919,7 +2919,7 @@
});
// On right click open the context menu
contextmenu.on("Open", function (evt) {
contextmenu.on('open', function (evt) {
var feature = xxmap.map.forEachFeatureAtPixel(evt.pixel, function(ft, l){ return ft; });
xxmap.contextmenu.clear(); //Clear the context menu
if (feature) {
@ -6656,8 +6656,8 @@
function p20editmeshfeatures() {
if (xxdialogMode) return;
var flags = (currentMesh.flags)?currentMesh.flags:0;
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>Remove device on disconnect</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>Sync server device name to hostname</label><br></div>';
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>' + "Sync server device name to hostname" + '</label><br></div>';
setDialogMode(2, "Functies van apparaatgroep bewerken", 3, p20editmeshfeaturesEx, x);
}
@ -6885,10 +6885,10 @@
if (xxdialogMode) return false;
var meshNotify = 0;
if (userinfo.links && userinfo.links[currentMesh._id] && userinfo.links[currentMesh._id].notify) { meshNotify = userinfo.links[currentMesh._id].notify; }
var x = 'Notification settings must also be turned on in account settings.<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel&reg; AMT desktop and serial events.</label></div>';
var x = "Notification settings must also be turned on in account settings." + '<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />' + "Apparaat verbindingen." + '</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />' + "Apparaat verbroken." + '</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />' + "Intel&reg; AMT desktop- en seriële gebeurtenissen." + '</label></div>';
setDialogMode(2, "meldingsinstellingen", 3, p20editMeshNotifyEx, x);
Q('p20notifyIntelDeviceConnect').checked = (meshNotify & 2);
Q('p20notifyIntelDeviceDisconnect').checked = (meshNotify & 4);
@ -7452,7 +7452,7 @@
// Display the users using the sorted list
var x = '<table class=p3usersTable cellpadding=0 cellspacing=0>', addHeader = true;
x += '<th>' + "Naam" + '<th style=width:80px>Groups<th style=width:120px>' + nobreak("Laatste toegang") + '<th style=width:120px>' + "machtigingen";
x += '<th>' + "Naam" + '<th style=width:80px>' + "Groups" + '<th style=width:120px>' + nobreak("Laatste toegang") + '<th style=width:120px>' + "machtigingen";
// Online users
for (var i in sortedUserIds) {
@ -7909,9 +7909,9 @@
// Show bottom buttons
x = '<div style=float:right;font-size:x-small>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">Delete User</a>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">' + "Delete User" + '</a>';
x += '</div><div style=font-size:x-small>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">Change Password</a>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">' + "Verander wachtwoord" + '</a>';
x += '</div><br>'
QH('p30html3', x);
@ -8052,7 +8052,7 @@
++count;
date = new Date(date.getTime() - (1000 * 60 * 60 * 24)); // Substract one day
}
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center>7 Day Login State</th></tr>' + x + '</tbody></table>');
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>' + "Dag" + '</th><th scope=col style=text-align:center>' + "7 Day Login State" + '</th></tr>' + x + '</tbody></table>');
}
//
@ -8356,6 +8356,31 @@
});
}
var serverStatsStrings = {
ServerState: "Server State",
AgentErrorCounters: "Agent Error Counters",
UnknownGroup: "Unknown Group",
InvalidPKCSsignature: "Invalid PKCS signature",
InvalidRSAsiguature: "Invalid RSA siguature",
InvalidJSON: "Invalid JSON",
UnknownAction: "Unknown Action",
BadWebCertificate: "Bad Web Certificate",
BadSignature: "Bad Signature",
MaxSessionsReached: "Max Sessions Reached",
UnknownDeviceGroup: "Unknown Device Group",
InvalidDeviceGroupType: "Invalid Device Group Type",
DuplicateAgent: "Duplicate Agent",
ConnectedIntelAMT: "Connected Intel&reg; AMT",
RelayErrors: "Relay Errors",
UserAccounts: "User Accounts",
DeviceGroups: "Apparaatgroepen",
AgentSessions: "Agent Sessions",
ConnectedUsers: "Connected Users",
UsersSessions: "Users Sessions",
RelaySessions: "Relay Sessies",
RelayCount: "Relay Count"
};
var lastServerStats = null;
function updateGeneralServerStats(message) {
if (message != null) { lastServerStats = message; } else { message = lastServerStats; }
@ -8365,7 +8390,7 @@
if (typeof message.cpuavg == 'object') {
var m = Math.min(message.cpuavg[0], 1);
window.serverStatCpu.config.data.datasets[0].data = [m, 1 - m];
QH('serverCpuChartText', '<div style=margin-bottom:5px>CPU Load</div><div><b title=\"' + "CPU-belasting in de laatste minuut" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU-belasting in de afgelopen 5 minuten" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU-belasting in de afgelopen 15 minuten" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QH('serverCpuChartText', '<div style=margin-bottom:5px>' + "CPU Load" + '</div><div><b title=\"' + "CPU-belasting in de laatste minuut" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU-belasting in de afgelopen 5 minuten" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU-belasting in de afgelopen 15 minuten" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QS('serverCpuChartView')['display'] = 'inline-block';
window.serverStatCpu.update();
}
@ -8377,12 +8402,13 @@
}
// Display all of the server values
// serverStatsStrings
var x = '<div style=width:100% cellpadding=0 cellspacing=0>';
if (typeof message.values == 'object') {
for (var i in message.values) {
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + i + '</div>';
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + (serverStatsStrings[i]?serverStatsStrings[i]:i) + '</div>';
for (var j in message.values[i]) {
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + j + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + (serverStatsStrings[j]?serverStatsStrings[j]:j) + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
}
}
}
@ -8473,10 +8499,10 @@
data = {
labels: [pastDate(0), timeAfter],
datasets: [
{ label: 'External', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: 'Heap Used', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: 'Heap Total', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: 'RSS', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
{ label: "External", data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: "Heap Used", data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: "Heap Total", data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: "RSS", data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
]
};
for (var i = 0; i < serverTimelineStats.length; i++) {

View File

@ -2586,11 +2586,11 @@
function onSearchInputChanged() {
var x = Q('SearchInput').value.toLowerCase().trim(); putstore('_search', x);
var userSearch = null, ipSearch = null, groupSearch = null;
if (x.startsWith('user:')) { userSearch = x.substring(5); }
else if (x.startsWith('u:')) { userSearch = x.substring(2); }
else if (x.startsWith('ip:')) { ipSearch = x.substring(3); }
else if (x.startsWith('group:')) { groupSearch = x.substring(6); }
else if (x.startsWith('g:')) { groupSearch = x.substring(2); }
if (x.startsWith("user:")) { userSearch = x.substring(5); }
else if (x.startsWith("u:")) { userSearch = x.substring(2); }
else if (x.startsWith("ip:")) { ipSearch = x.substring(3); }
else if (x.startsWith("group:")) { groupSearch = x.substring(6); }
else if (x.startsWith("g:")) { groupSearch = x.substring(2); }
if (x == '') {
// No search
@ -2919,7 +2919,7 @@
});
// On right click open the context menu
contextmenu.on("abrir", function (evt) {
contextmenu.on('open', function (evt) {
var feature = xxmap.map.forEachFeatureAtPixel(evt.pixel, function(ft, l){ return ft; });
xxmap.contextmenu.clear(); //Clear the context menu
if (feature) {
@ -6656,8 +6656,8 @@
function p20editmeshfeatures() {
if (xxdialogMode) return;
var flags = (currentMesh.flags)?currentMesh.flags:0;
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>Remove device on disconnect</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>Sync server device name to hostname</label><br></div>';
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>' + "Sync server device name to hostname" + '</label><br></div>';
setDialogMode(2, "Editar recursos do grupo de dispositivos", 3, p20editmeshfeaturesEx, x);
}
@ -6885,10 +6885,10 @@
if (xxdialogMode) return false;
var meshNotify = 0;
if (userinfo.links && userinfo.links[currentMesh._id] && userinfo.links[currentMesh._id].notify) { meshNotify = userinfo.links[currentMesh._id].notify; }
var x = 'Notification settings must also be turned on in account settings.<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel&reg; AMT desktop and serial events.</label></div>';
var x = "Notification settings must also be turned on in account settings." + '<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />' + "Conexões de dispositivos." + '</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />' + "Desconexões de dispositivos." + '</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />' + "Intel&reg; Área de trabalho AMT e eventos seriais." + '</label></div>';
setDialogMode(2, "Configurações de notificação", 3, p20editMeshNotifyEx, x);
Q('p20notifyIntelDeviceConnect').checked = (meshNotify & 2);
Q('p20notifyIntelDeviceDisconnect').checked = (meshNotify & 4);
@ -7452,7 +7452,7 @@
// Display the users using the sorted list
var x = '<table class=p3usersTable cellpadding=0 cellspacing=0>', addHeader = true;
x += '<th>' + "Nome" + '<th style=width:80px>Groups<th style=width:120px>' + nobreak("Último acesso") + '<th style=width:120px>' + "Permissões";
x += '<th>' + "Nome" + '<th style=width:80px>' + "Groups" + '<th style=width:120px>' + nobreak("Último acesso") + '<th style=width:120px>' + "Permissões";
// Online users
for (var i in sortedUserIds) {
@ -7909,9 +7909,9 @@
// Show bottom buttons
x = '<div style=float:right;font-size:x-small>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">Delete User</a>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">' + "Delete User" + '</a>';
x += '</div><div style=font-size:x-small>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">Change Password</a>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">' + "Mudar senha" + '</a>';
x += '</div><br>'
QH('p30html3', x);
@ -8052,7 +8052,7 @@
++count;
date = new Date(date.getTime() - (1000 * 60 * 60 * 24)); // Substract one day
}
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center>7 Day Login State</th></tr>' + x + '</tbody></table>');
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>' + "Dia" + '</th><th scope=col style=text-align:center>' + "7 Day Login State" + '</th></tr>' + x + '</tbody></table>');
}
//
@ -8356,6 +8356,31 @@
});
}
var serverStatsStrings = {
ServerState: "Server State",
AgentErrorCounters: "Agent Error Counters",
UnknownGroup: "Unknown Group",
InvalidPKCSsignature: "Invalid PKCS signature",
InvalidRSAsiguature: "Invalid RSA siguature",
InvalidJSON: "Invalid JSON",
UnknownAction: "Unknown Action",
BadWebCertificate: "Bad Web Certificate",
BadSignature: "Bad Signature",
MaxSessionsReached: "Max Sessions Reached",
UnknownDeviceGroup: "Unknown Device Group",
InvalidDeviceGroupType: "Invalid Device Group Type",
DuplicateAgent: "Duplicate Agent",
ConnectedIntelAMT: "Connected Intel&reg; AMT",
RelayErrors: "Relay Errors",
UserAccounts: "User Accounts",
DeviceGroups: "Grupos de dispositivos",
AgentSessions: "Agent Sessions",
ConnectedUsers: "Connected Users",
UsersSessions: "Users Sessions",
RelaySessions: "Retransmissão de sessão ",
RelayCount: "Relay Count"
};
var lastServerStats = null;
function updateGeneralServerStats(message) {
if (message != null) { lastServerStats = message; } else { message = lastServerStats; }
@ -8365,7 +8390,7 @@
if (typeof message.cpuavg == 'object') {
var m = Math.min(message.cpuavg[0], 1);
window.serverStatCpu.config.data.datasets[0].data = [m, 1 - m];
QH('serverCpuChartText', '<div style=margin-bottom:5px>CPU Load</div><div><b title=\"' + "Carga da CPU no último minuto" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "Carga da CPU nos últimos 5 minutos" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "Carga da CPU nos últimos 15 minutos" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QH('serverCpuChartText', '<div style=margin-bottom:5px>' + "CPU Load" + '</div><div><b title=\"' + "Carga da CPU no último minuto" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "Carga da CPU nos últimos 5 minutos" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "Carga da CPU nos últimos 15 minutos" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QS('serverCpuChartView')['display'] = 'inline-block';
window.serverStatCpu.update();
}
@ -8377,12 +8402,13 @@
}
// Display all of the server values
// serverStatsStrings
var x = '<div style=width:100% cellpadding=0 cellspacing=0>';
if (typeof message.values == 'object') {
for (var i in message.values) {
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + i + '</div>';
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + (serverStatsStrings[i]?serverStatsStrings[i]:i) + '</div>';
for (var j in message.values[i]) {
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + j + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + (serverStatsStrings[j]?serverStatsStrings[j]:j) + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
}
}
}
@ -8473,10 +8499,10 @@
data = {
labels: [pastDate(0), timeAfter],
datasets: [
{ label: 'External', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: 'Heap Used', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: 'Heap Total', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: 'RSS', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
{ label: "External", data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: "Heap Used", data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: "Heap Total", data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: "RSS", data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
]
};
for (var i = 0; i < serverTimelineStats.length; i++) {

View File

@ -3638,11 +3638,11 @@
function onSearchInputChanged() {
var x = Q('SearchInput').value.toLowerCase().trim(); putstore('_search', x);
var userSearch = null, ipSearch = null, groupSearch = null;
if (x.startsWith('user:')) { userSearch = x.substring(5); }
else if (x.startsWith('u:')) { userSearch = x.substring(2); }
else if (x.startsWith('ip:')) { ipSearch = x.substring(3); }
else if (x.startsWith('group:')) { groupSearch = x.substring(6); }
else if (x.startsWith('g:')) { groupSearch = x.substring(2); }
if (x.startsWith("user:")) { userSearch = x.substring(5); }
else if (x.startsWith("u:")) { userSearch = x.substring(2); }
else if (x.startsWith("ip:")) { ipSearch = x.substring(3); }
else if (x.startsWith("group:")) { groupSearch = x.substring(6); }
else if (x.startsWith("g:")) { groupSearch = x.substring(2); }
if (x == '') {
// No search
@ -3971,7 +3971,7 @@
});
// On right click open the context menu
contextmenu.on("otevřít", function (evt) {
contextmenu.on('open', function (evt) {
var feature = xxmap.map.forEachFeatureAtPixel(evt.pixel, function(ft, l){ return ft; });
xxmap.contextmenu.clear(); //Clear the context menu
if (feature) {
@ -7708,8 +7708,8 @@
function p20editmeshfeatures() {
if (xxdialogMode) return;
var flags = (currentMesh.flags)?currentMesh.flags:0;
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>Remove device on disconnect</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>Sync server device name to hostname</label><br></div>';
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>' + "Sync server device name to hostname" + '</label><br></div>';
setDialogMode(2, "Upravit vlastnosti skupiny zařízení", 3, p20editmeshfeaturesEx, x);
}
@ -7937,10 +7937,10 @@
if (xxdialogMode) return false;
var meshNotify = 0;
if (userinfo.links && userinfo.links[currentMesh._id] && userinfo.links[currentMesh._id].notify) { meshNotify = userinfo.links[currentMesh._id].notify; }
var x = 'Notification settings must also be turned on in account settings.<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel&reg; AMT desktop and serial events.</label></div>';
var x = "Notification settings must also be turned on in account settings." + '<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />' + "Připojení zařízení" + '</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />' + "Odpojení zařízení" + '</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />' + "Intel&reg; AMT desktop and serial události." + '</label></div>';
setDialogMode(2, "Nastavení notifikací", 3, p20editMeshNotifyEx, x);
Q('p20notifyIntelDeviceConnect').checked = (meshNotify & 2);
Q('p20notifyIntelDeviceDisconnect').checked = (meshNotify & 4);
@ -8504,7 +8504,7 @@
// Display the users using the sorted list
var x = '<table class=p3usersTable cellpadding=0 cellspacing=0>', addHeader = true;
x += '<th>' + "Jméno" + '<th style=width:80px>Groups<th style=width:120px>' + nobreak("Poslední přístup") + '<th style=width:120px>' + "Práva";
x += '<th>' + "Jméno" + '<th style=width:80px>' + "Groups" + '<th style=width:120px>' + nobreak("Poslední přístup") + '<th style=width:120px>' + "Práva";
// Online users
for (var i in sortedUserIds) {
@ -8961,9 +8961,9 @@
// Show bottom buttons
x = '<div style=float:right;font-size:x-small>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">Delete User</a>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">' + "Delete User" + '</a>';
x += '</div><div style=font-size:x-small>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">Change Password</a>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">' + "Změnit heslo" + '</a>';
x += '</div><br>'
QH('p30html3', x);
@ -9104,7 +9104,7 @@
++count;
date = new Date(date.getTime() - (1000 * 60 * 60 * 24)); // Substract one day
}
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center>7 Day Login State</th></tr>' + x + '</tbody></table>');
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>' + "Den" + '</th><th scope=col style=text-align:center>' + "7 Day Login State" + '</th></tr>' + x + '</tbody></table>');
}
//
@ -9408,6 +9408,31 @@
});
}
var serverStatsStrings = {
ServerState: "Server State",
AgentErrorCounters: "Agent Error Counters",
UnknownGroup: "Unknown Group",
InvalidPKCSsignature: "Invalid PKCS signature",
InvalidRSAsiguature: "Invalid RSA siguature",
InvalidJSON: "Invalid JSON",
UnknownAction: "Unknown Action",
BadWebCertificate: "Bad Web Certificate",
BadSignature: "Bad Signature",
MaxSessionsReached: "Max Sessions Reached",
UnknownDeviceGroup: "Unknown Device Group",
InvalidDeviceGroupType: "Invalid Device Group Type",
DuplicateAgent: "Duplicate Agent",
ConnectedIntelAMT: "Connected Intel&reg; AMT",
RelayErrors: "Relay Errors",
UserAccounts: "User Accounts",
DeviceGroups: "Skupiny zařízení",
AgentSessions: "Agent Sessions",
ConnectedUsers: "Connected Users",
UsersSessions: "Users Sessions",
RelaySessions: "Přesměrované relace",
RelayCount: "Relay Count"
};
var lastServerStats = null;
function updateGeneralServerStats(message) {
if (message != null) { lastServerStats = message; } else { message = lastServerStats; }
@ -9417,7 +9442,7 @@
if (typeof message.cpuavg == 'object') {
var m = Math.min(message.cpuavg[0], 1);
window.serverStatCpu.config.data.datasets[0].data = [m, 1 - m];
QH('serverCpuChartText', '<div style=margin-bottom:5px>CPU Load</div><div><b title=\"' + "CPU zatížení v poslední minutě" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU zatížení v posledních 5 minutách" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU zatížení v posledních 15 minutách" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QH('serverCpuChartText', '<div style=margin-bottom:5px>' + "CPU Load" + '</div><div><b title=\"' + "CPU zatížení v poslední minutě" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU zatížení v posledních 5 minutách" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU zatížení v posledních 15 minutách" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QS('serverCpuChartView')['display'] = 'inline-block';
window.serverStatCpu.update();
}
@ -9429,12 +9454,13 @@
}
// Display all of the server values
// serverStatsStrings
var x = '<div style=width:100% cellpadding=0 cellspacing=0>';
if (typeof message.values == 'object') {
for (var i in message.values) {
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + i + '</div>';
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + (serverStatsStrings[i]?serverStatsStrings[i]:i) + '</div>';
for (var j in message.values[i]) {
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + j + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + (serverStatsStrings[j]?serverStatsStrings[j]:j) + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
}
}
}
@ -9525,10 +9551,10 @@
data = {
labels: [pastDate(0), timeAfter],
datasets: [
{ label: 'External', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: 'Heap Used', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: 'Heap Total', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: 'RSS', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
{ label: "External", data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: "Heap Used", data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: "Heap Total", data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: "RSS", data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
]
};
for (var i = 0; i < serverTimelineStats.length; i++) {

View File

@ -3638,11 +3638,11 @@
function onSearchInputChanged() {
var x = Q('SearchInput').value.toLowerCase().trim(); putstore('_search', x);
var userSearch = null, ipSearch = null, groupSearch = null;
if (x.startsWith('user:')) { userSearch = x.substring(5); }
else if (x.startsWith('u:')) { userSearch = x.substring(2); }
else if (x.startsWith('ip:')) { ipSearch = x.substring(3); }
else if (x.startsWith('group:')) { groupSearch = x.substring(6); }
else if (x.startsWith('g:')) { groupSearch = x.substring(2); }
if (x.startsWith("user:")) { userSearch = x.substring(5); }
else if (x.startsWith("u:")) { userSearch = x.substring(2); }
else if (x.startsWith("ip:")) { ipSearch = x.substring(3); }
else if (x.startsWith("group:")) { groupSearch = x.substring(6); }
else if (x.startsWith("g:")) { groupSearch = x.substring(2); }
if (x == '') {
// No search
@ -3971,7 +3971,7 @@
});
// On right click open the context menu
contextmenu.on("open", function (evt) {
contextmenu.on('open', function (evt) {
var feature = xxmap.map.forEachFeatureAtPixel(evt.pixel, function(ft, l){ return ft; });
xxmap.contextmenu.clear(); //Clear the context menu
if (feature) {
@ -7708,8 +7708,8 @@
function p20editmeshfeatures() {
if (xxdialogMode) return;
var flags = (currentMesh.flags)?currentMesh.flags:0;
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>Remove device on disconnect</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>Sync server device name to hostname</label><br></div>';
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>' + "Sync server device name to hostname" + '</label><br></div>';
setDialogMode(2, "Edit Device Group Features", 3, p20editmeshfeaturesEx, x);
}
@ -7937,10 +7937,10 @@
if (xxdialogMode) return false;
var meshNotify = 0;
if (userinfo.links && userinfo.links[currentMesh._id] && userinfo.links[currentMesh._id].notify) { meshNotify = userinfo.links[currentMesh._id].notify; }
var x = 'Notification settings must also be turned on in account settings.<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel&reg; AMT desktop and serial events.</label></div>';
var x = "Notification settings must also be turned on in account settings." + '<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />' + "Device connections." + '</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />' + "Device disconnections." + '</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />' + "Intel&reg; AMT desktop and serial events." + '</label></div>';
setDialogMode(2, "Notification Settings", 3, p20editMeshNotifyEx, x);
Q('p20notifyIntelDeviceConnect').checked = (meshNotify & 2);
Q('p20notifyIntelDeviceDisconnect').checked = (meshNotify & 4);
@ -8504,7 +8504,7 @@
// Display the users using the sorted list
var x = '<table class=p3usersTable cellpadding=0 cellspacing=0>', addHeader = true;
x += '<th>' + "Nom" + '<th style=width:80px>Groups<th style=width:120px>' + nobreak("Dernier accès") + '<th style=width:120px>' + "Permissions";
x += '<th>' + "Nom" + '<th style=width:80px>' + "Groups" + '<th style=width:120px>' + nobreak("Dernier accès") + '<th style=width:120px>' + "Permissions";
// Online users
for (var i in sortedUserIds) {
@ -8961,9 +8961,9 @@
// Show bottom buttons
x = '<div style=float:right;font-size:x-small>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">Delete User</a>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">' + "Delete User" + '</a>';
x += '</div><div style=font-size:x-small>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">Change Password</a>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">' + "Change Password" + '</a>';
x += '</div><br>'
QH('p30html3', x);
@ -9104,7 +9104,7 @@
++count;
date = new Date(date.getTime() - (1000 * 60 * 60 * 24)); // Substract one day
}
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center>7 Day Login State</th></tr>' + x + '</tbody></table>');
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>' + "Day" + '</th><th scope=col style=text-align:center>' + "7 Day Login State" + '</th></tr>' + x + '</tbody></table>');
}
//
@ -9408,6 +9408,31 @@
});
}
var serverStatsStrings = {
ServerState: "Server State",
AgentErrorCounters: "Agent Error Counters",
UnknownGroup: "Unknown Group",
InvalidPKCSsignature: "Invalid PKCS signature",
InvalidRSAsiguature: "Invalid RSA siguature",
InvalidJSON: "Invalid JSON",
UnknownAction: "Unknown Action",
BadWebCertificate: "Bad Web Certificate",
BadSignature: "Bad Signature",
MaxSessionsReached: "Max Sessions Reached",
UnknownDeviceGroup: "Unknown Device Group",
InvalidDeviceGroupType: "Invalid Device Group Type",
DuplicateAgent: "Duplicate Agent",
ConnectedIntelAMT: "Connected Intel&reg; AMT",
RelayErrors: "Relay Errors",
UserAccounts: "User Accounts",
DeviceGroups: "Device Groups",
AgentSessions: "Agent Sessions",
ConnectedUsers: "Connected Users",
UsersSessions: "Users Sessions",
RelaySessions: "Relay Sessions",
RelayCount: "Relay Count"
};
var lastServerStats = null;
function updateGeneralServerStats(message) {
if (message != null) { lastServerStats = message; } else { message = lastServerStats; }
@ -9417,7 +9442,7 @@
if (typeof message.cpuavg == 'object') {
var m = Math.min(message.cpuavg[0], 1);
window.serverStatCpu.config.data.datasets[0].data = [m, 1 - m];
QH('serverCpuChartText', '<div style=margin-bottom:5px>CPU Load</div><div><b title=\"' + "CPU load in the last minute" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 5 minutes" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 15 minutes" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QH('serverCpuChartText', '<div style=margin-bottom:5px>' + "CPU Load" + '</div><div><b title=\"' + "CPU load in the last minute" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 5 minutes" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU load in the last 15 minutes" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QS('serverCpuChartView')['display'] = 'inline-block';
window.serverStatCpu.update();
}
@ -9429,12 +9454,13 @@
}
// Display all of the server values
// serverStatsStrings
var x = '<div style=width:100% cellpadding=0 cellspacing=0>';
if (typeof message.values == 'object') {
for (var i in message.values) {
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + i + '</div>';
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + (serverStatsStrings[i]?serverStatsStrings[i]:i) + '</div>';
for (var j in message.values[i]) {
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + j + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + (serverStatsStrings[j]?serverStatsStrings[j]:j) + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
}
}
}
@ -9525,10 +9551,10 @@
data = {
labels: [pastDate(0), timeAfter],
datasets: [
{ label: 'External', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: 'Heap Used', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: 'Heap Total', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: 'RSS', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
{ label: "External", data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: "Heap Used", data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: "Heap Total", data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: "RSS", data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
]
};
for (var i = 0; i < serverTimelineStats.length; i++) {

View File

@ -3638,11 +3638,11 @@
function onSearchInputChanged() {
var x = Q('SearchInput').value.toLowerCase().trim(); putstore('_search', x);
var userSearch = null, ipSearch = null, groupSearch = null;
if (x.startsWith('user:')) { userSearch = x.substring(5); }
else if (x.startsWith('u:')) { userSearch = x.substring(2); }
else if (x.startsWith('ip:')) { ipSearch = x.substring(3); }
else if (x.startsWith('group:')) { groupSearch = x.substring(6); }
else if (x.startsWith('g:')) { groupSearch = x.substring(2); }
if (x.startsWith("user:")) { userSearch = x.substring(5); }
else if (x.startsWith("u:")) { userSearch = x.substring(2); }
else if (x.startsWith("ip:")) { ipSearch = x.substring(3); }
else if (x.startsWith("group:")) { groupSearch = x.substring(6); }
else if (x.startsWith("g:")) { groupSearch = x.substring(2); }
if (x == '') {
// No search
@ -3971,7 +3971,7 @@
});
// On right click open the context menu
contextmenu.on("開いた", function (evt) {
contextmenu.on('open', function (evt) {
var feature = xxmap.map.forEachFeatureAtPixel(evt.pixel, function(ft, l){ return ft; });
xxmap.contextmenu.clear(); //Clear the context menu
if (feature) {
@ -7708,8 +7708,8 @@
function p20editmeshfeatures() {
if (xxdialogMode) return;
var flags = (currentMesh.flags)?currentMesh.flags:0;
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>Remove device on disconnect</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>Sync server device name to hostname</label><br></div>';
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>' + "Sync server device name to hostname" + '</label><br></div>';
setDialogMode(2, "デバイスグループ機能の編集", 3, p20editmeshfeaturesEx, x);
}
@ -7937,10 +7937,10 @@
if (xxdialogMode) return false;
var meshNotify = 0;
if (userinfo.links && userinfo.links[currentMesh._id] && userinfo.links[currentMesh._id].notify) { meshNotify = userinfo.links[currentMesh._id].notify; }
var x = 'Notification settings must also be turned on in account settings.<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel&reg; AMT desktop and serial events.</label></div>';
var x = "Notification settings must also be turned on in account settings." + '<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />' + "デバイス接続。" + '</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />' + "デバイスの切断。" + '</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />' + "Intel&reg; AMTデスクトップおよびシリアルイベント。" + '</label></div>';
setDialogMode(2, "通知設定", 3, p20editMeshNotifyEx, x);
Q('p20notifyIntelDeviceConnect').checked = (meshNotify & 2);
Q('p20notifyIntelDeviceDisconnect').checked = (meshNotify & 4);
@ -8504,7 +8504,7 @@
// Display the users using the sorted list
var x = '<table class=p3usersTable cellpadding=0 cellspacing=0>', addHeader = true;
x += '<th>' + "名" + '<th style=width:80px>Groups<th style=width:120px>' + nobreak("最終アクセス") + '<th style=width:120px>' + "許可";
x += '<th>' + "名" + '<th style=width:80px>' + "Groups" + '<th style=width:120px>' + nobreak("最終アクセス") + '<th style=width:120px>' + "許可";
// Online users
for (var i in sortedUserIds) {
@ -8961,9 +8961,9 @@
// Show bottom buttons
x = '<div style=float:right;font-size:x-small>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">Delete User</a>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">' + "Delete User" + '</a>';
x += '</div><div style=font-size:x-small>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">Change Password</a>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">' + "パスワードを変更する" + '</a>';
x += '</div><br>'
QH('p30html3', x);
@ -9104,7 +9104,7 @@
++count;
date = new Date(date.getTime() - (1000 * 60 * 60 * 24)); // Substract one day
}
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center>7 Day Login State</th></tr>' + x + '</tbody></table>');
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>' + "日" + '</th><th scope=col style=text-align:center>' + "7 Day Login State" + '</th></tr>' + x + '</tbody></table>');
}
//
@ -9408,6 +9408,31 @@
});
}
var serverStatsStrings = {
ServerState: "Server State",
AgentErrorCounters: "Agent Error Counters",
UnknownGroup: "Unknown Group",
InvalidPKCSsignature: "Invalid PKCS signature",
InvalidRSAsiguature: "Invalid RSA siguature",
InvalidJSON: "Invalid JSON",
UnknownAction: "Unknown Action",
BadWebCertificate: "Bad Web Certificate",
BadSignature: "Bad Signature",
MaxSessionsReached: "Max Sessions Reached",
UnknownDeviceGroup: "Unknown Device Group",
InvalidDeviceGroupType: "Invalid Device Group Type",
DuplicateAgent: "Duplicate Agent",
ConnectedIntelAMT: "Connected Intel&reg; AMT",
RelayErrors: "Relay Errors",
UserAccounts: "User Accounts",
DeviceGroups: "デバイスグループ",
AgentSessions: "Agent Sessions",
ConnectedUsers: "Connected Users",
UsersSessions: "Users Sessions",
RelaySessions: "中継セッション",
RelayCount: "Relay Count"
};
var lastServerStats = null;
function updateGeneralServerStats(message) {
if (message != null) { lastServerStats = message; } else { message = lastServerStats; }
@ -9417,7 +9442,7 @@
if (typeof message.cpuavg == 'object') {
var m = Math.min(message.cpuavg[0], 1);
window.serverStatCpu.config.data.datasets[0].data = [m, 1 - m];
QH('serverCpuChartText', '<div style=margin-bottom:5px>CPU Load</div><div><b title=\"' + "直前のCPU負荷" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "過去5分間のCPU負荷" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "過去15分間のCPU負荷" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QH('serverCpuChartText', '<div style=margin-bottom:5px>' + "CPU Load" + '</div><div><b title=\"' + "直前のCPU負荷" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "過去5分間のCPU負荷" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "過去15分間のCPU負荷" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QS('serverCpuChartView')['display'] = 'inline-block';
window.serverStatCpu.update();
}
@ -9429,12 +9454,13 @@
}
// Display all of the server values
// serverStatsStrings
var x = '<div style=width:100% cellpadding=0 cellspacing=0>';
if (typeof message.values == 'object') {
for (var i in message.values) {
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + i + '</div>';
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + (serverStatsStrings[i]?serverStatsStrings[i]:i) + '</div>';
for (var j in message.values[i]) {
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + j + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + (serverStatsStrings[j]?serverStatsStrings[j]:j) + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
}
}
}
@ -9525,10 +9551,10 @@
data = {
labels: [pastDate(0), timeAfter],
datasets: [
{ label: 'External', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: 'Heap Used', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: 'Heap Total', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: 'RSS', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
{ label: "External", data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: "Heap Used", data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: "Heap Total", data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: "RSS", data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
]
};
for (var i = 0; i < serverTimelineStats.length; i++) {

View File

@ -3638,11 +3638,11 @@
function onSearchInputChanged() {
var x = Q('SearchInput').value.toLowerCase().trim(); putstore('_search', x);
var userSearch = null, ipSearch = null, groupSearch = null;
if (x.startsWith('user:')) { userSearch = x.substring(5); }
else if (x.startsWith('u:')) { userSearch = x.substring(2); }
else if (x.startsWith('ip:')) { ipSearch = x.substring(3); }
else if (x.startsWith('group:')) { groupSearch = x.substring(6); }
else if (x.startsWith('g:')) { groupSearch = x.substring(2); }
if (x.startsWith("user:")) { userSearch = x.substring(5); }
else if (x.startsWith("u:")) { userSearch = x.substring(2); }
else if (x.startsWith("ip:")) { ipSearch = x.substring(3); }
else if (x.startsWith("group:")) { groupSearch = x.substring(6); }
else if (x.startsWith("g:")) { groupSearch = x.substring(2); }
if (x == '') {
// No search
@ -3971,7 +3971,7 @@
});
// On right click open the context menu
contextmenu.on("Open", function (evt) {
contextmenu.on('open', function (evt) {
var feature = xxmap.map.forEachFeatureAtPixel(evt.pixel, function(ft, l){ return ft; });
xxmap.contextmenu.clear(); //Clear the context menu
if (feature) {
@ -7708,8 +7708,8 @@
function p20editmeshfeatures() {
if (xxdialogMode) return;
var flags = (currentMesh.flags)?currentMesh.flags:0;
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>Remove device on disconnect</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>Sync server device name to hostname</label><br></div>';
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>' + "Sync server device name to hostname" + '</label><br></div>';
setDialogMode(2, "Functies van apparaatgroep bewerken", 3, p20editmeshfeaturesEx, x);
}
@ -7937,10 +7937,10 @@
if (xxdialogMode) return false;
var meshNotify = 0;
if (userinfo.links && userinfo.links[currentMesh._id] && userinfo.links[currentMesh._id].notify) { meshNotify = userinfo.links[currentMesh._id].notify; }
var x = 'Notification settings must also be turned on in account settings.<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel&reg; AMT desktop and serial events.</label></div>';
var x = "Notification settings must also be turned on in account settings." + '<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />' + "Apparaat verbindingen." + '</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />' + "Apparaat verbroken." + '</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />' + "Intel&reg; AMT desktop- en seriële gebeurtenissen." + '</label></div>';
setDialogMode(2, "meldingsinstellingen", 3, p20editMeshNotifyEx, x);
Q('p20notifyIntelDeviceConnect').checked = (meshNotify & 2);
Q('p20notifyIntelDeviceDisconnect').checked = (meshNotify & 4);
@ -8504,7 +8504,7 @@
// Display the users using the sorted list
var x = '<table class=p3usersTable cellpadding=0 cellspacing=0>', addHeader = true;
x += '<th>' + "Naam" + '<th style=width:80px>Groups<th style=width:120px>' + nobreak("Laatste toegang") + '<th style=width:120px>' + "machtigingen";
x += '<th>' + "Naam" + '<th style=width:80px>' + "Groups" + '<th style=width:120px>' + nobreak("Laatste toegang") + '<th style=width:120px>' + "machtigingen";
// Online users
for (var i in sortedUserIds) {
@ -8961,9 +8961,9 @@
// Show bottom buttons
x = '<div style=float:right;font-size:x-small>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">Delete User</a>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">' + "Delete User" + '</a>';
x += '</div><div style=font-size:x-small>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">Change Password</a>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">' + "Verander wachtwoord" + '</a>';
x += '</div><br>'
QH('p30html3', x);
@ -9104,7 +9104,7 @@
++count;
date = new Date(date.getTime() - (1000 * 60 * 60 * 24)); // Substract one day
}
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center>7 Day Login State</th></tr>' + x + '</tbody></table>');
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>' + "Dag" + '</th><th scope=col style=text-align:center>' + "7 Day Login State" + '</th></tr>' + x + '</tbody></table>');
}
//
@ -9408,6 +9408,31 @@
});
}
var serverStatsStrings = {
ServerState: "Server State",
AgentErrorCounters: "Agent Error Counters",
UnknownGroup: "Unknown Group",
InvalidPKCSsignature: "Invalid PKCS signature",
InvalidRSAsiguature: "Invalid RSA siguature",
InvalidJSON: "Invalid JSON",
UnknownAction: "Unknown Action",
BadWebCertificate: "Bad Web Certificate",
BadSignature: "Bad Signature",
MaxSessionsReached: "Max Sessions Reached",
UnknownDeviceGroup: "Unknown Device Group",
InvalidDeviceGroupType: "Invalid Device Group Type",
DuplicateAgent: "Duplicate Agent",
ConnectedIntelAMT: "Connected Intel&reg; AMT",
RelayErrors: "Relay Errors",
UserAccounts: "User Accounts",
DeviceGroups: "Apparaatgroepen",
AgentSessions: "Agent Sessions",
ConnectedUsers: "Connected Users",
UsersSessions: "Users Sessions",
RelaySessions: "Relay Sessies",
RelayCount: "Relay Count"
};
var lastServerStats = null;
function updateGeneralServerStats(message) {
if (message != null) { lastServerStats = message; } else { message = lastServerStats; }
@ -9417,7 +9442,7 @@
if (typeof message.cpuavg == 'object') {
var m = Math.min(message.cpuavg[0], 1);
window.serverStatCpu.config.data.datasets[0].data = [m, 1 - m];
QH('serverCpuChartText', '<div style=margin-bottom:5px>CPU Load</div><div><b title=\"' + "CPU-belasting in de laatste minuut" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU-belasting in de afgelopen 5 minuten" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU-belasting in de afgelopen 15 minuten" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QH('serverCpuChartText', '<div style=margin-bottom:5px>' + "CPU Load" + '</div><div><b title=\"' + "CPU-belasting in de laatste minuut" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU-belasting in de afgelopen 5 minuten" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "CPU-belasting in de afgelopen 15 minuten" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QS('serverCpuChartView')['display'] = 'inline-block';
window.serverStatCpu.update();
}
@ -9429,12 +9454,13 @@
}
// Display all of the server values
// serverStatsStrings
var x = '<div style=width:100% cellpadding=0 cellspacing=0>';
if (typeof message.values == 'object') {
for (var i in message.values) {
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + i + '</div>';
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + (serverStatsStrings[i]?serverStatsStrings[i]:i) + '</div>';
for (var j in message.values[i]) {
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + j + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + (serverStatsStrings[j]?serverStatsStrings[j]:j) + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
}
}
}
@ -9525,10 +9551,10 @@
data = {
labels: [pastDate(0), timeAfter],
datasets: [
{ label: 'External', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: 'Heap Used', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: 'Heap Total', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: 'RSS', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
{ label: "External", data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: "Heap Used", data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: "Heap Total", data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: "RSS", data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
]
};
for (var i = 0; i < serverTimelineStats.length; i++) {

View File

@ -3638,11 +3638,11 @@
function onSearchInputChanged() {
var x = Q('SearchInput').value.toLowerCase().trim(); putstore('_search', x);
var userSearch = null, ipSearch = null, groupSearch = null;
if (x.startsWith('user:')) { userSearch = x.substring(5); }
else if (x.startsWith('u:')) { userSearch = x.substring(2); }
else if (x.startsWith('ip:')) { ipSearch = x.substring(3); }
else if (x.startsWith('group:')) { groupSearch = x.substring(6); }
else if (x.startsWith('g:')) { groupSearch = x.substring(2); }
if (x.startsWith("user:")) { userSearch = x.substring(5); }
else if (x.startsWith("u:")) { userSearch = x.substring(2); }
else if (x.startsWith("ip:")) { ipSearch = x.substring(3); }
else if (x.startsWith("group:")) { groupSearch = x.substring(6); }
else if (x.startsWith("g:")) { groupSearch = x.substring(2); }
if (x == '') {
// No search
@ -3971,7 +3971,7 @@
});
// On right click open the context menu
contextmenu.on("abrir", function (evt) {
contextmenu.on('open', function (evt) {
var feature = xxmap.map.forEachFeatureAtPixel(evt.pixel, function(ft, l){ return ft; });
xxmap.contextmenu.clear(); //Clear the context menu
if (feature) {
@ -7708,8 +7708,8 @@
function p20editmeshfeatures() {
if (xxdialogMode) return;
var flags = (currentMesh.flags)?currentMesh.flags:0;
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>Remove device on disconnect</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>Sync server device name to hostname</label><br></div>';
var x = '<div><label><input type=checkbox id=d20flag1 ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>';
x += '<div><label><input type=checkbox id=d20flag2 ' + ((flags & 2) ? 'checked' : '') + '>' + "Sync server device name to hostname" + '</label><br></div>';
setDialogMode(2, "Editar recursos do grupo de dispositivos", 3, p20editmeshfeaturesEx, x);
}
@ -7937,10 +7937,10 @@
if (xxdialogMode) return false;
var meshNotify = 0;
if (userinfo.links && userinfo.links[currentMesh._id] && userinfo.links[currentMesh._id].notify) { meshNotify = userinfo.links[currentMesh._id].notify; }
var x = 'Notification settings must also be turned on in account settings.<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel&reg; AMT desktop and serial events.</label></div>';
var x = "Notification settings must also be turned on in account settings." + '<br /><br />';
x += '<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />' + "Conexões de dispositivos." + '</label></div>';
x += '<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />' + "Desconexões de dispositivos." + '</label></div>';
x += '<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />' + "Intel&reg; Área de trabalho AMT e eventos seriais." + '</label></div>';
setDialogMode(2, "Configurações de notificação", 3, p20editMeshNotifyEx, x);
Q('p20notifyIntelDeviceConnect').checked = (meshNotify & 2);
Q('p20notifyIntelDeviceDisconnect').checked = (meshNotify & 4);
@ -8504,7 +8504,7 @@
// Display the users using the sorted list
var x = '<table class=p3usersTable cellpadding=0 cellspacing=0>', addHeader = true;
x += '<th>' + "Nome" + '<th style=width:80px>Groups<th style=width:120px>' + nobreak("Último acesso") + '<th style=width:120px>' + "Permissões";
x += '<th>' + "Nome" + '<th style=width:80px>' + "Groups" + '<th style=width:120px>' + nobreak("Último acesso") + '<th style=width:120px>' + "Permissões";
// Online users
for (var i in sortedUserIds) {
@ -8961,9 +8961,9 @@
// Show bottom buttons
x = '<div style=float:right;font-size:x-small>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">Delete User</a>';
if (deletePossible) x += '<a href=# style=cursor:pointer onclick=\'return p30showDeleteUserDialog()\' title="Remove this user">' + "Delete User" + '</a>';
x += '</div><div style=font-size:x-small>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">Change Password</a>';
if (userinfo.siteadmin == 0xFFFFFFFF) x += '<a href=# style=cursor:pointer onclick=\'return p30showUserChangePassDialog(' + multiFactor + ')\' title="Change the password for this user">' + "Mudar senha" + '</a>';
x += '</div><br>'
QH('p30html3', x);
@ -9104,7 +9104,7 @@
++count;
date = new Date(date.getTime() - (1000 * 60 * 60 * 24)); // Substract one day
}
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center>7 Day Login State</th></tr>' + x + '</tbody></table>');
QH('p30html2', '<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>' + "Dia" + '</th><th scope=col style=text-align:center>' + "7 Day Login State" + '</th></tr>' + x + '</tbody></table>');
}
//
@ -9408,6 +9408,31 @@
});
}
var serverStatsStrings = {
ServerState: "Server State",
AgentErrorCounters: "Agent Error Counters",
UnknownGroup: "Unknown Group",
InvalidPKCSsignature: "Invalid PKCS signature",
InvalidRSAsiguature: "Invalid RSA siguature",
InvalidJSON: "Invalid JSON",
UnknownAction: "Unknown Action",
BadWebCertificate: "Bad Web Certificate",
BadSignature: "Bad Signature",
MaxSessionsReached: "Max Sessions Reached",
UnknownDeviceGroup: "Unknown Device Group",
InvalidDeviceGroupType: "Invalid Device Group Type",
DuplicateAgent: "Duplicate Agent",
ConnectedIntelAMT: "Connected Intel&reg; AMT",
RelayErrors: "Relay Errors",
UserAccounts: "User Accounts",
DeviceGroups: "Grupos de dispositivos",
AgentSessions: "Agent Sessions",
ConnectedUsers: "Connected Users",
UsersSessions: "Users Sessions",
RelaySessions: "Retransmissão de sessão ",
RelayCount: "Relay Count"
};
var lastServerStats = null;
function updateGeneralServerStats(message) {
if (message != null) { lastServerStats = message; } else { message = lastServerStats; }
@ -9417,7 +9442,7 @@
if (typeof message.cpuavg == 'object') {
var m = Math.min(message.cpuavg[0], 1);
window.serverStatCpu.config.data.datasets[0].data = [m, 1 - m];
QH('serverCpuChartText', '<div style=margin-bottom:5px>CPU Load</div><div><b title=\"' + "Carga da CPU no último minuto" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "Carga da CPU nos últimos 5 minutos" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "Carga da CPU nos últimos 15 minutos" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QH('serverCpuChartText', '<div style=margin-bottom:5px>' + "CPU Load" + '</div><div><b title=\"' + "Carga da CPU no último minuto" + '\">' + (Math.round(message.cpuavg[0] * 100.0) / 100.0) + '</b>, <b title=\"' + "Carga da CPU nos últimos 5 minutos" + '\">' + (Math.round(message.cpuavg[1] * 100.0) / 100.0) + '</b>, <b title=\"' + "Carga da CPU nos últimos 15 minutos" + '\">' + (Math.round(message.cpuavg[2] * 100.0) / 100.0) + '</b></div>');
QS('serverCpuChartView')['display'] = 'inline-block';
window.serverStatCpu.update();
}
@ -9429,12 +9454,13 @@
}
// Display all of the server values
// serverStatsStrings
var x = '<div style=width:100% cellpadding=0 cellspacing=0>';
if (typeof message.values == 'object') {
for (var i in message.values) {
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + i + '</div>';
x += '<div class=userTableHeader style=margin-bottom:4px;width:200px>' + (serverStatsStrings[i]?serverStatsStrings[i]:i) + '</div>';
for (var j in message.values[i]) {
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + j + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
x += '<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>' + (serverStatsStrings[j]?serverStatsStrings[j]:j) + '</span><span style=float:right>' + message.values[i][j] + '</span></td><td class=h2></td></tr></table></div>';
}
}
}
@ -9525,10 +9551,10 @@
data = {
labels: [pastDate(0), timeAfter],
datasets: [
{ label: 'External', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: 'Heap Used', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: 'Heap Total', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: 'RSS', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
{ label: "External", data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
{ label: "Heap Used", data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
{ label: "Heap Total", data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
{ label: "RSS", data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
]
};
for (var i = 0; i < serverTimelineStats.length; i++) {