smeserver-phpsysinfo/root/opt/phpsysinfo/js/phpSysInfo/phpsysinfo_bootstrap.js

1173 lines
42 KiB
JavaScript

//var data_dbg;
function reload(initiate) {
$("#errorbutton").hide();
$("#errors").empty();
$.ajax({
dataType: "json",
url: "xml.php?json",
success: function (data) {
// console.log(data);
// data_dbg = data;
if ((initiate === true) && (data["Options"] !== undefined) && (data["Options"]["@attributes"] !== undefined)
&& ((refrtime = data["Options"]["@attributes"]["refresh"]) !== undefined) && (refrtime !== "0")) {
setInterval(reload, refrtime);
}
renderErrors(data);
renderVitals(data);
renderHardware(data);
renderMemory(data);
renderFilesystem(data);
renderNetwork(data);
renderVoltage(data);
renderTemperature(data);
renderFans(data);
renderPower(data);
renderCurrent(data);
renderUPS(data);
if (data['UnusedPlugins'] !== undefined) {
var plugins = items(data["UnusedPlugins"]["Plugin"]);
for (var i = 0; i < plugins.length; i++) {
$.ajax({
dataType: "json",
url: "xml.php?plugin=" + plugins[i]["@attributes"]["name"]+"&json",
pluginname: plugins[i]["@attributes"]["name"],
success: function (data) {
try {
// dynamic call
window['renderPlugin_' + this.pluginname](data);
}
catch (err) {
}
renderErrors(data);
}
});
}
}
}
});
}
$(document).ready(function () {
$(document).ajaxStart(function () {
$("#loader").show();
});
$(document).ajaxStop(function () {
$("#loader").hide();
});
$.getScript( "./js.php?name=bootstrap", function(data, status, jqxhr) {
reload(true);
$(".navbar-logo").click(function () {
reload();
});
});
});
Array.prototype.push_attrs=function(element) {
for (var i = 0; i < element.length ; i++) {
this.push(element[i]["@attributes"]);
}
return i;
};
function items(data) {
if (data !== undefined) {
if ((data.length > 0) && (data[0] !== undefined) && (data[0]["@attributes"] !== undefined)) {
return data;
} else if (data["@attributes"] !== undefined ) {
return [data];
} else {
return [];
}
} else {
return [];
}
}
function renderVitals(data) {
var directives = {
Uptime: {
text: function () {
return formatUptime(this["Uptime"]);
}
},
LastBoot: {
text: function () {
var lastboot;
var timestamp = 0;
if ((data["Generation"] !== undefined) && (data["Generation"]["@attributes"] !== undefined) && (data["Generation"]["@attributes"]["timestamp"] !== undefined) ) {
timestamp = parseInt(data["Generation"]["@attributes"]["timestamp"])*1000; //server time
if (isNaN(timestamp)) timestamp = Number(new Date()); //client time
} else {
timestamp = Number(new Date()); //client time
}
lastboot = new Date(timestamp - (parseInt(this["Uptime"])*1000));
if (typeof(lastboot.toUTCString) === "function") {
return lastboot.toUTCString(); //toUTCstring() or toLocaleString()
} else {
//deprecated
return lastboot.toGMTString(); //toGMTString() or toLocaleString()
}
}
},
Distro: {
html: function () {
return '<img src="gfx/images/' + this["Distroicon"] + '" style="width:32px"/>' + " " +this["Distro"];
}
},
LoadAvg: {
html: function () {
if (this["CPULoad"] !== undefined) {
return '<table width=100%><tr><td width=50%>'+this["LoadAvg"] + '</td><td><div class="progress">' +
'<div class="progress-bar progress-bar-info" style="width: ' + round(this["CPULoad"],0) + '%;"></div>' +
'</div><div class="percent">' + round(this["CPULoad"],0) + '%</div></td></tr></table>';
} else {
return this["LoadAvg"];
}
}
},
Processes: {
text: function () {
var processes = "", prunning = 0, psleeping = 0, pstopped = 0, pzombie = 0, pwaiting = 0, pother = 0;
var not_first = false;
processes = parseInt(this["Processes"]);
if (this["ProcessesRunning"] !== undefined) {
prunning = parseInt(this["ProcessesRunning"]);
}
if (this["ProcessesSleeping"] !== undefined) {
psleeping = parseInt(this["ProcessesSleeping"]);
}
if (this["ProcessesStopped"] !== undefined) {
pstopped = parseInt(this["ProcessesStopped"]);
}
if (this["ProcessesZombie"] !== undefined) {
pzombie = parseInt(this["ProcessesZombie"]);
}
if (this["ProcessesWaiting"] !== undefined) {
pwaiting = parseInt(this["ProcessesWaiting"]);
}
if (this["ProcessesOther"] !== undefined) {
pother = parseInt(this["ProcessesOther"]);
}
if (prunning || psleeping || pstopped || pzombie || pwaiting || pother) {
processes += " (";
for (proc_type in {running:0,sleeping:1,stopped:2,zombie:3,waiting:4,other:5}) {
if (eval("p" + proc_type)) {
if (not_first) {
processes += ", ";
}
processes += eval("p" + proc_type) + String.fromCharCode(160) + proc_type;
not_first = true;
}
}
processes += ")";
}
return processes;
}
}
};
if (data["Vitals"]["@attributes"]["SysLang"] === undefined) {
$("#tr_SysLang").hide();
}
if (data["Vitals"]["@attributes"]["CodePage"] === undefined) {
$("#tr_CodePage").hide();
}
if (data["Vitals"]["@attributes"]["Processes"] === undefined) {
$("#tr_Processes").hide();
}
$('#vitals').render(data["Vitals"]["@attributes"], directives);
}
function renderHardware(data) {
var directives = {
Model: {
text: function () {
return this["Model"];
}
},
CpuSpeed: {
text: function () {
return formatHertz(this["CpuSpeed"]);
}
},
CpuSpeedMax: {
text: function () {
return formatHertz(this["CpuSpeedMax"]);
}
},
CpuSpeedMin: {
text: function () {
return formatHertz(this["CpuSpeedMin"]);
}
},
Cache: {
text: function () {
return formatBytes(this["Cache"], data["Options"]["@attributes"]["byteFormat"]);
}
},
BusSpeed: {
text: function () {
return formatHertz(this["BusSpeed"]);
}
},
Cputemp: {
html: function () {
return formatTemp(this["Cputemp"], data["Options"]["@attributes"]["tempFormat"]);
}
},
Bogomips: {
text: function () {
return parseInt(this["Bogomips"]);
}
},
Load: {
html: function () {
return '<div class="progress">' +
'<div class="progress-bar progress-bar-info" style="width: ' + round(this["Load"],0) + '%;"></div>' +
'</div><div class="percent">' + round(this["Load"],0) + '%</div>';
}
}
};
var hw_directives = {
hwName: {
text: function() {
return this["Name"];
}
},
hwCount: {
text: function() {
if (this["Count"] == "1") {
return "";
}
return this["Count"];
}
}
};
var html="";
if ((data["Hardware"]["@attributes"] !== undefined) && (data["Hardware"]["@attributes"]["Name"] !== undefined)) {
html+="<tr id=\"hardware-Machine\">";
html+="<th width=8%>Machine</th>";
html+="<td><span data-bind=\"Name\"></span></td>";
html+="<td></td>";
html+="</tr>";
}
var paramlist = {CpuSpeed:"CPU Speed",CpuSpeedMax:"CPU Speed Max",CpuSpeedMin:"CPU Speed Min",Cache:"Cache Size",Virt:"Virtualization",BusSpeed:"BUS Speed",Bogomips:"System Bogomips",Cputemp:"Temperature",Load:"Load Averages"};
try {
var datas = items(data["Hardware"]["CPU"]["CpuCore"]);
for (var i = 0; i < datas.length; i++) {
if (i == 0) {
html+="<tr id=\"hardware-CPU\" class=\"treegrid-CPU\">";
html+="<th>CPU</th>";
html+="<td>Number of processors:</td>";
html+="<td class=\"rightCell\"><span></span></td>";
html+="</tr>";
}
html+="<tr id=\"hardware-CPU-" + i +"\" class=\"treegrid-CPU-" + i +" treegrid-parent-CPU\">";
html+="<th></th>";
html+="<td><span data-bind=\"Model\"></span></td>";
html+="<td></td>";
html+="</tr>";
for (var proc_param in paramlist) {
if (datas[i]["@attributes"][proc_param] !== undefined) {
html+="<tr id=\"hardware-CPU-" + i + "-" + proc_param + "\" class=\"treegrid-parent-CPU-" + i +"\">";
html+="<th></th>";
html+="<td>"+ paramlist[proc_param]+"</td>";
html+="<td class=\"rightCell\"><span data-bind=\"" + proc_param + "\"></span></td>";
html+="</tr>";
}
}
}
}
catch (err) {
$("#hardware-CPU").hide();
}
for (hw_type in {PCI:0,IDE:1,SCSI:2,USB:3,TB:4,I2C:5}) {
try {
var datas = items(data["Hardware"][hw_type]["Device"]);
for (var i = 0; i < datas.length; i++) {
if (i == 0) {
html+="<tr id=\"hardware-" + hw_type + "\" class=\"treegrid-" + hw_type + "\">";
html+="<th>" + hw_type + "</th>";
html+="<td>Number of devices:</td>";
html+="<td class=\"rightCell\"><span></span></td>";
html+="</tr>";
}
html+="<tr id=\"hardware-" + hw_type + "-" + i +"\" class=\"treegrid-parent-" + hw_type + "\">";
html+="<th></th>";
html+="<td><span data-bind=\"hwName\"></span></td>";
html+="<td class=\"rightCell\"><span data-bind=\"hwCount\"></span></td>";
html+="</tr>";
}
}
catch (err) {
$("#hardware-"+hw_type).hide();
}
}
$("#hardware").empty().append(html);
if ((data["Hardware"]["@attributes"] !== undefined) && (data["Hardware"]["@attributes"]["Name"] !== undefined)) {
$('#hardware-Machine').render(data["Hardware"]["@attributes"]);
}
try {
var datas = items(data["Hardware"]["CPU"]["CpuCore"]);
for (var i = 0; i < datas.length; i++) {
$('#hardware-CPU-'+ i).render(datas[i]["@attributes"]);
for (var proc_param in paramlist) {
if (datas[i]["@attributes"][proc_param] !== undefined) {
$('#hardware-CPU-'+ i +'-'+proc_param).render(datas[i]["@attributes"], directives);
}
}
}
if (i > 0) {
$("#hardware-CPU span").html(i);
}
}
catch (err) {
$("#hardware-CPU").hide();
}
for (hw_type in {PCI:0,IDE:1,SCSI:2,USB:3,TB:4,I2C:5}) {
try {
var licz = 0;
var datas = items(data["Hardware"][hw_type]["Device"]);
for (var i = 0; i < datas.length; i++) {
$('#hardware-'+hw_type+'-'+ i).render(datas[i]["@attributes"], hw_directives);
if (datas[i]["@attributes"]["Count"] !== undefined) {
licz += parseInt(datas[i]["@attributes"]["Count"]);
} else {
licz++;
}
}
if (i > 0) {
$("#hardware-" + hw_type + " span").html(licz);
}
}
catch (err) {
$("#hardware-"+hw_type).hide();
}
}
$('#hardware').treegrid({
initialState: 'collapsed',
expanderExpandedClass: 'normalicon normalicon-down',
expanderCollapsedClass: 'normalicon normalicon-right'
});
if (data["Options"]["@attributes"]["showCPUListExpanded"] !== "false") {
try {
$('#hardware-CPU').treegrid('expand');
}
catch (err) {
}
}
if (data["Options"]["@attributes"]["showCPUInfoExpanded"] === "true") {
try {
var datas = items(data["Hardware"]["CPU"]["CpuCore"]);
for (var i = 0; i < datas.length; i++) {
$('#hardware-CPU-'+i).treegrid('expand');
}
}
catch (err) {
}
}
}
function renderMemory(data) {
var directives = {
Total: {
text: function () {
return formatBytes(this["@attributes"]["Total"], data["Options"]["@attributes"]["byteFormat"]);
}
},
Free: {
text: function () {
return formatBytes(this["@attributes"]["Free"], data["Options"]["@attributes"]["byteFormat"]);
}
},
Used: {
text: function () {
return formatBytes(this["@attributes"]["Used"], data["Options"]["@attributes"]["byteFormat"]);
}
},
Usage: {
html: function () {
if ((this["Details"] === undefined) || (this["Details"]["@attributes"] === undefined)) {
return '<div class="progress">' +
'<div class="progress-bar progress-bar-info" style="width: ' + this["@attributes"]["Percent"] + '%;"></div>' +
'</div><div class="percent">' + this["@attributes"]["Percent"] + '%</div>';
}
else {
var rest = parseInt(this["@attributes"]["Percent"]);
var html = '<div class="progress">';
if ((this["Details"]["@attributes"]["AppPercent"] !== undefined) && (this["Details"]["@attributes"]["AppPercent"] > 0)) {
html += '<div class="progress-bar progress-bar-info" style="width: ' + this["Details"]["@attributes"]["AppPercent"] + '%;"></div>';
rest -= parseInt(this["Details"]["@attributes"]["AppPercent"]);
}
if ((this["Details"]["@attributes"]["CachedPercent"] !== undefined) && (this["Details"]["@attributes"]["CachedPercent"] > 0)) {
html += '<div class="progress-bar progress-bar-warning" style="width: ' + this["Details"]["@attributes"]["CachedPercent"] + '%;"></div>';
rest -= parseInt(this["Details"]["@attributes"]["CachedPercent"]);
}
if ((this["Details"]["@attributes"]["BuffersPercent"] !== undefined) && (this["Details"]["@attributes"]["BuffersPercent"] > 0)) {
html += '<div class="progress-bar progress-bar-danger" style="width: ' + this["Details"]["@attributes"]["BuffersPercent"] + '%;"></div>';
rest -= parseInt(this["Details"]["@attributes"]["BuffersPercent"]);
}
if (rest > 0) {
html += '<div class="progress-bar progress-bar-success" style="width: ' + rest + '%;"></div>';
}
html += '</div>';
html += '<div class="percent">' + 'Total: ' + this["@attributes"]["Percent"] + '% ' + '<i>(';
var not_first = false;
if (this["Details"]["@attributes"]["AppPercent"] !== undefined) {
html += 'Kernel+Apps: '+ this["Details"]["@attributes"]["AppPercent"] + '%';
not_first = true;
}
if (this["Details"]["@attributes"]["CachedPercent"] !== undefined) {
if (not_first) html += ' - ';
html += 'Cache: ' + this["Details"]["@attributes"]["CachedPercent"] + '%';
not_first = true;
}
if (this["Details"]["@attributes"]["BuffersPercent"] !== undefined) {
if (not_first) html += ' - ';
html += 'Buffers: ' + this["Details"]["@attributes"]["BuffersPercent"] + '%';
}
html += ')</i></div>';
return html;
}
}
},
Type: {
text: function () {
return "Physical Memory";
}
}
};
var directive_swap = {
Total: {
text: function () {
return formatBytes(this["Total"], data["Options"]["@attributes"]["byteFormat"]);
}
},
Free: {
text: function () {
return formatBytes(this["Free"], data["Options"]["@attributes"]["byteFormat"]);
}
},
Used: {
text: function () {
return formatBytes(this["Used"], data["Options"]["@attributes"]["byteFormat"]);
}
},
Usage: {
html: function () {
return '<div class="progress">' +
'<div class="progress-bar progress-bar-info" style="width: ' + this["Percent"] + '%;"></div>' +
'</div><div class="percent">' + this["Percent"] + '%</div>';
}
},
Name: {
html: function () {
return this['Name'] + '<br/>' + ((this["MountPoint"] !== undefined) ? this["MountPoint"] : this["MountPointID"]);
}
}
};
var data_memory = [];
if (data["Memory"]["Swap"] !== undefined) {
var datas = items(data["Memory"]["Swap"]["Mount"]);
data_memory.push_attrs(datas);
$('#swap-data').render(data_memory, directive_swap);
$('#swap-data').show();
} else {
$('#swap-data').hide();
}
$('#memory-data').render(data["Memory"], directives);
}
function renderFilesystem(data) {
var directives = {
Total: {
text: function () {
return formatBytes(this["Total"], data["Options"]["@attributes"]["byteFormat"]);
}
},
Free: {
text: function () {
return formatBytes(this["Free"], data["Options"]["@attributes"]["byteFormat"]);
}
},
Used: {
text: function () {
return formatBytes(this["Used"], data["Options"]["@attributes"]["byteFormat"]);
}
},
MountPoint: {
text: function () {
return ((this["MountPoint"] !== undefined) ? this["MountPoint"] : this["MountPointID"]);
}
},
Name: {
html: function () {
return this["Name"] + ((this["MountOptions"] !== undefined) ? '<br><i>(' + this["MountOptions"] + ')</i>' : '');
}
},
Percent: {
html: function () {
return '<div class="progress">' + '<div class="' +
(((data["Options"]["@attributes"]["threshold"] !== undefined) &&
(parseInt(this["Percent"]) >= parseInt(data["Options"]["@attributes"]["threshold"]))) ? 'progress-bar progress-bar-danger' : 'progress-bar progress-bar-info') +
'" style="width: ' + this["Percent"] + '% ;"></div>' +
'</div>' + '<div class="percent">' + this["Percent"] + '% ' + ((this["Inodes"] !== undefined) ? '<i>(' + this["Inodes"] + '%)</i>' : '') + '</div>';
}
}
};
try {
var fs_data = [];
var datas = items(data["FileSystem"]["Mount"]);
var total = {Total:0,Free:0,Used:0};
for (var i = 0; i < datas.length; i++) {
fs_data.push(datas[i]["@attributes"]);
total["Total"] += parseInt(datas[i]["@attributes"]["Total"]);
total["Free"] += parseInt(datas[i]["@attributes"]["Free"]);
total["Used"] += parseInt(datas[i]["@attributes"]["Used"]);
total["Percent"] = (total["Total"] !== 0) ? round((total["Used"] / total["Total"]) * 100, 2) : 0;
}
if (i > 0) {
$('#filesystem-data').render(fs_data, directives);
$('#filesystem-foot').render(total, directives);
$('#filesystem_MountPoint').removeClass("sorttable_sorted"); // reset sort order
// sorttable.innerSortFunction.apply(document.getElementById('filesystem_MountPoint'), []);
sorttable.innerSortFunction.apply($('#filesystem_MountPoint')[0], []);
$("#block_filesystem").show();
} else {
$("#block_filesystem").hide();
}
}
catch (err) {
$("#block_filesystem").hide();
}
}
function renderNetwork(data) {
var directives = {
RxBytes: {
text: function () {
return formatBytes(this["RxBytes"], data["Options"]["@attributes"]["byteFormat"]);
}
},
TxBytes: {
text: function () {
return formatBytes(this["TxBytes"], data["Options"]["@attributes"]["byteFormat"]);
}
},
Drops: {
text: function () {
return this["Err"] + "/" + String.fromCharCode(8203) + this["Drops"];
}
}
};
var html = "";
html+="<thead>";
html+="<tr>";
html+="<th width=\"60%\">Device</th>";
html+="<th class=\"rightCell\">Receive</th>";
html+="<th class=\"rightCell\">Sent</th>";
html+="<th class=\"rightCell\">Err/" + String.fromCharCode(8203) +"Drop</th>";
html+="</tr>";
html+="</thead>";
try {
var network_data = [];
var datas = items(data["Network"]["NetDevice"]);
for (var i = 0; i < datas.length; i++) {
html+="<tr id=\"network-" + i +"\" class=\"treegrid-network-" + i + "\">";
html+="<td><b><span data-bind=\"Name\"></span></b></td>";
html+="<td class=\"rightCell\"><span data-bind=\"RxBytes\"></span></td>";
html+="<td class=\"rightCell\"><span data-bind=\"TxBytes\"></span></td>";
html+="<td class=\"rightCell\"><span data-bind=\"Drops\"></span></td>";
html+="</tr>";
var info = datas[i]["@attributes"]["Info"];
if ( (info !== undefined) && (info !== "") ) {
var infos = info.replace(/:/g, String.fromCharCode(8203)+":").split(";"); /* split long addresses */
for (var j = 0; j < infos.length; j++){
html +="<tr class=\"treegrid-parent-network-" + i + "\"><td>" + infos[j] + "</td><td></td><td></td><td></td></tr>";
}
}
}
$("#network").empty().append(html);
if (i > 0) {
for (var i = 0; i < datas.length; i++) {
$('#network-' + i).render(datas[i]["@attributes"], directives);
}
$("#block_network").show();
} else {
$("#block_network").hide();
}
}
catch (err) {
$("#block_network").hide();
}
$('#network').treegrid({
initialState: 'collapsed',
expanderExpandedClass: 'normalicon normalicon-down',
expanderCollapsedClass: 'normalicon normalicon-right'
});
}
function renderVoltage(data) {
var directives = {
Value: {
text: function () {
return this["Value"] + String.fromCharCode(160) + "V";
}
},
Min: {
text: function () {
if (this["Min"] !== undefined)
return this["Min"] + String.fromCharCode(160) + "V";
}
},
Max: {
text: function () {
if (this["Max"] !== undefined)
return this["Max"] + String.fromCharCode(160) + "V";
}
},
Label: {
text: function () {
if (this["Event"] === undefined)
return this["Label"];
else
return this["Label"] + " ! "+this["Event"];
}
}
};
try {
var voltage_data = [];
var datas = items(data["MBInfo"]["Voltage"]["Item"]);
if (voltage_data.push_attrs(datas) > 0) {
$('#voltage-data').render(voltage_data, directives);
$("#block_voltage").show();
} else {
$("#block_voltage").hide();
}
}
catch (err) {
$("#block_voltage").hide();
}
}
function renderTemperature(data) {
var directives = {
Value: {
html: function () {
return formatTemp(this["Value"], data["Options"]["@attributes"]["tempFormat"]);
}
},
Max: {
html: function () {
if (this["Max"] !== undefined)
return formatTemp(this["Max"], data["Options"]["@attributes"]["tempFormat"]);
}
},
Label: {
text: function () {
if (this["Event"] === undefined)
return this["Label"];
else
return this["Label"] + " ! "+this["Event"];
}
}
};
try {
var temperature_data = [];
var datas = items(data["MBInfo"]["Temperature"]["Item"]);
if (temperature_data.push_attrs(datas) > 0) {
$('#temperature-data').render(temperature_data, directives);
$("#block_temperature").show();
} else {
$("#block_temperature").hide();
}
}
catch (err) {
$("#block_temperature").hide();
}
}
function renderFans(data) {
var directives = {
Value: {
text: function () {
return this["Value"] + String.fromCharCode(160) + "RPM";
}
},
Min: {
text: function () {
if (this["Min"] !== undefined)
return this["Min"] + String.fromCharCode(160) + "RPM";
}
},
Label: {
text: function () {
if (this["Event"] === undefined)
return this["Label"];
else
return this["Label"] + " ! "+this["Event"];
}
}
};
try {
var fans_data = [];
var datas = items(data["MBInfo"]["Fans"]["Item"]);
if (fans_data.push_attrs(datas) > 0) {
$('#fans-data').render(fans_data, directives);
$("#block_fans").show();
} else {
$("#block_fans").hide();
}
}
catch (err) {
$("#block_fans").hide();
}
}
function renderPower(data) {
var directives = {
Value: {
text: function () {
return this["Value"] + String.fromCharCode(160) + "W";
}
},
Max: {
text: function () {
if (this["Max"] !== undefined)
return this["Max"] + String.fromCharCode(160) + "W";
}
},
Label: {
text: function () {
if (this["Event"] === undefined)
return this["Label"];
else
return this["Label"] + " ! "+this["Event"];
}
}
};
try {
var power_data = [];
var datas = items(data["MBInfo"]["Power"]["Item"]);
if (power_data.push_attrs(datas) > 0) {
$('#power-data').render(power_data, directives);
$("#block_power").show();
} else {
$("#block_power").hide();
}
}
catch (err) {
$("#block_power").hide();
}
}
function renderCurrent(data) {
var directives = {
Value: {
text: function () {
return this["Value"] + String.fromCharCode(160) + "A";
}
},
Max: {
text: function () {
if (this["Max"] !== undefined)
return this["Max"] + String.fromCharCode(160) + "A";
}
},
Label: {
text: function () {
if (this["Event"] === undefined)
return this["Label"];
else
return this["Label"] + " ! "+this["Event"];
}
}
};
try {
var current_data = [];
var datas = items(data["MBInfo"]["Current"]["Item"]);
if (current_data.push_attrs(datas) > 0) {
$('#current-data').render(current_data, directives);
$("#block_current").show();
} else {
$("#block_current").hide();
}
}
catch (err) {
$("#block_current").hide();
}
}
function renderUPS(data) {
var directives = {
Name: {
text: function () {
return this["Name"] + ((this["Mode"] !== undefined) ? " (" + this["Mode"] + ")" : "");
}
},
LineVoltage: {
text: function () {
return this["LineVoltage"] + String.fromCharCode(160) + "V";
}
},
LineFrequency: {
text: function () {
return this["LineFrequency"] + String.fromCharCode(160) + "Hz";
}
},
BatteryVoltage: {
text: function () {
return this["BatteryVoltage"] + String.fromCharCode(160) + "V";
}
},
TimeLeftMinutes: {
text: function () {
return this["TimeLeftMinutes"] + String.fromCharCode(160) + "minutes";
}
},
LoadPercent: {
html: function () {
return '<div class="progress">' +
'<div class="progress-bar progress-bar-info" style="width: ' + round(this["LoadPercent"],0) + '%;"></div>' +
'</div><div class="percent">' + round(this["LoadPercent"],0) + '%</div>';
}
},
BatteryChargePercent: {
html: function () {
return '<div class="progress">' +
'<div class="progress-bar progress-bar-info" style="width: ' + round(this["BatteryChargePercent"],0) + '%;"></div>' +
'</div><div class="percent">' + round(this["BatteryChargePercent"],0) + '%</div>';
}
}
};
if ((data["UPSInfo"] !== undefined) && (items(data["UPSInfo"]["UPS"]).length > 0)) {
var html="";
var paramlist = {Model:"Model",StartTime:"Started",Status:"Status",Temperature:"Temperature",OutagesCount:"Outages",LastOutage:"Last outage cause",LastOutageFinish:"Last outage timestamp",LineVoltage:"Line voltage",LineFrequency:"Line frequency",LoadPercent:"Load percent",BatteryDate:"Battery date",BatteryVoltage:"Battery voltage",BatteryChargePercent:"Battery charge",TimeLeftMinutes:"Time left on batteries"};
try {
var datas = items(data["UPSInfo"]["UPS"]);
for (var i = 0; i < datas.length; i++) {
html+="<tr id=\"ups-" + i +"\" class=\"treegrid-UPS-" + i+ "\">";
html+="<td width=60%><b><span data-bind=\"Name\"></span></b></td>";
html+="<td></td>";
html+="</tr>";
for (var proc_param in paramlist) {
if (datas[i]["@attributes"][proc_param] !== undefined) {
html+="<tr id=\"ups-" + i + "-" + proc_param + "\" class=\"treegrid-parent-UPS-" + i +"\">";
html+="<th>"+ paramlist[proc_param]+"</th>";
html+="<td class=\"rightCell\"><span data-bind=\"" + proc_param + "\"></span></td>";
html+="</tr>";
}
}
}
}
catch (err) {
}
if ((data["UPSInfo"]["@attributes"] !== undefined) && (data["UPSInfo"]["@attributes"]["ApcupsdCgiLinks"] === "1")) {
html+="<tr>";
html+="<td>(<a href='/cgi-bin/apcupsd/multimon.cgi' target='apcupsdcgi'>Details</a>)</td>";
html+="<td></td>";
html+="</tr>";
}
$("#ups").empty().append(html);
try {
var datas = items(data["UPSInfo"]["UPS"]);
for (var i = 0; i < datas.length; i++) {
$('#ups-'+ i).render(datas[i]["@attributes"], directives);
for (var proc_param in paramlist) {
if (datas[i]["@attributes"][proc_param] !== undefined) {
$('#ups-'+ i +'-'+proc_param).render(datas[i]["@attributes"], directives);
}
}
}
}
catch (err) {
}
$('#ups').treegrid({
initialState: 'expanded',
expanderExpandedClass: 'normalicon normalicon-down',
expanderCollapsedClass: 'normalicon normalicon-right'
});
$("#block_ups").show();
} else {
$("#block_ups").hide();
}
}
function renderErrors(data) {
try {
var datas = items(data["Errors"]["Error"]);
for (var i = 0; i < datas.length; i++) {
$("#errors").append("<li><b>"+datas[i]["@attributes"]["Function"]+"</b> - "+datas[i]["@attributes"]["Message"].replace(/\n/g, "<br>")+"</li><br>");
}
if (i > 0) {
$("#errorbutton").show();
}
}
catch (err) {
$("#errorbutton").hide();
}
}
/**
* format seconds to a better readable statement with days, hours and minutes
* @param {Number} sec seconds that should be formatted
* @return {String} html string with no breaking spaces and translation statemen
*/
function formatUptime(sec) {
var txt = "", intMin = 0, intHours = 0, intDays = 0;
intMin = sec / 60;
intHours = intMin / 60;
intDays = Math.floor(intHours / 24);
intHours = Math.floor(intHours - (intDays * 24));
intMin = Math.floor(intMin - (intDays * 60 * 24) - (intHours * 60));
if (intDays) {
txt += intDays.toString() + String.fromCharCode(160) + "days" + String.fromCharCode(160);
}
if (intHours) {
txt += intHours.toString() + String.fromCharCode(160) + "hours" + String.fromCharCode(160);
}
return txt + intMin.toString() + String.fromCharCode(160) + "minutes";
}
/**
* format a celcius temperature to fahrenheit and also append the right suffix
* @param {String} degreeC temperature in celvius
* @param {jQuery} xml phpSysInfo-XML
* @return {String} html string with no breaking spaces and translation statements
*/
function formatTemp(degreeC, tempFormat) {
var degree = 0;
if (tempFormat === undefined) {
tempFormat = "c";
}
degree = parseFloat(degreeC);
if (isNaN(degreeC)) {
return "---";
}
else {
switch (tempFormat.toLowerCase()) {
case "f":
return round((((9 * degree) / 5) + 32), 1) + String.fromCharCode(160) + "F";
case "c":
return round(degree, 1) + String.fromCharCode(160) + "C";
case "c-f":
return round(degree, 1) + String.fromCharCode(160) + "C<br><i>(" + round((((9 * degree) / 5) + 32), 1) + String.fromCharCode(160) + "F)</i>";
case "f-c":
return round((((9 * degree) / 5) + 32), 1) + String.fromCharCode(160) + "F<br><i>(" + round(degree, 1) + String.fromCharCode(160) + "C)</i>";
}
}
}
/**
* format a given MHz value to a better readable statement with the right suffix
* @param {Number} mhertz mhertz value that should be formatted
* @return {String} html string with no breaking spaces and translation statements
*/
function formatHertz(mhertz) {
if (mhertz && mhertz < 1000) {
return mhertz.toString() + String.fromCharCode(160) + "MHz";
}
else {
if (mhertz && mhertz >= 1000) {
return round(mhertz / 1000, 2) + String.fromCharCode(160) + "GHz";
}
else {
return "";
}
}
}
/**
* format the byte values into a user friendly value with the corespondenting unit expression<br>support is included
* for binary and decimal output<br>user can specify a constant format for all byte outputs or the output is formated
* automatically so that every value can be read in a user friendly way
* @param {Number} bytes value that should be converted in the corespondenting format, which is specified in the phpsysinfo.ini
* @param {jQuery} xml phpSysInfo-XML
* @return {String} string of the converted bytes with the translated unit expression
*/
function formatBytes(bytes, byteFormat) {
var show = "";
if (byteFormat === undefined) {
byteFormat = "auto_binary";
}
switch (byteFormat.toLowerCase()) {
case "pib":
show += round(bytes / Math.pow(1024, 5), 2);
show += String.fromCharCode(160) + "PiB";
break;
case "tib":
show += round(bytes / Math.pow(1024, 4), 2);
show += String.fromCharCode(160) + "TiB";
break;
case "gib":
show += round(bytes / Math.pow(1024, 3), 2);
show += String.fromCharCode(160) + "GiB";
break;
case "mib":
show += round(bytes / Math.pow(1024, 2), 2);
show += String.fromCharCode(160) + "MiB";
break;
case "kib":
show += round(bytes / Math.pow(1024, 1), 2);
show += String.fromCharCode(160) + "KiB";
break;
case "pb":
show += round(bytes / Math.pow(1000, 5), 2);
show += String.fromCharCode(160) + "PB";
break;
case "tb":
show += round(bytes / Math.pow(1000, 4), 2);
show += String.fromCharCode(160) + "TB";
break;
case "gb":
show += round(bytes / Math.pow(1000, 3), 2);
show += String.fromCharCode(160) + "GB";
break;
case "mb":
show += round(bytes / Math.pow(1000, 2), 2);
show += String.fromCharCode(160) + "MB";
break;
case "kb":
show += round(bytes / Math.pow(1000, 1), 2);
show += String.fromCharCode(160) + "kB";
break;
case "b":
show += bytes;
show += String.fromCharCode(160) + "B";
break;
case "auto_decimal":
if (bytes > Math.pow(1000, 5)) {
show += round(bytes / Math.pow(1000, 5), 2);
show += String.fromCharCode(160) + "PB";
}
else {
if (bytes > Math.pow(1000, 4)) {
show += round(bytes / Math.pow(1000, 4), 2);
show += String.fromCharCode(160) + "TB";
}
else {
if (bytes > Math.pow(1000, 3)) {
show += round(bytes / Math.pow(1000, 3), 2);
show += String.fromCharCode(160) + "GB";
}
else {
if (bytes > Math.pow(1000, 2)) {
show += round(bytes / Math.pow(1000, 2), 2);
show += String.fromCharCode(160) + "MB";
}
else {
if (bytes > Math.pow(1000, 1)) {
show += round(bytes / Math.pow(1000, 1), 2);
show += String.fromCharCode(160) + "kB";
}
else {
show += bytes;
show += String.fromCharCode(160) + "B";
}
}
}
}
}
break;
default:
if (bytes > Math.pow(1024, 5)) {
show += round(bytes / Math.pow(1024, 5), 2);
show += String.fromCharCode(160) + "PiB";
}
else {
if (bytes > Math.pow(1024, 4)) {
show += round(bytes / Math.pow(1024, 4), 2);
show += String.fromCharCode(160) + "TiB";
}
else {
if (bytes > Math.pow(1024, 3)) {
show += round(bytes / Math.pow(1024, 3), 2);
show += String.fromCharCode(160) + "GiB";
}
else {
if (bytes > Math.pow(1024, 2)) {
show += round(bytes / Math.pow(1024, 2), 2);
show += String.fromCharCode(160) + "MiB";
}
else {
if (bytes > Math.pow(1024, 1)) {
show += round(bytes / Math.pow(1024, 1), 2);
show += String.fromCharCode(160) + "KiB";
}
else {
show += bytes;
show += String.fromCharCode(160) + "B";
}
}
}
}
}
}
return show;
}
/**
* round a given value to the specified precision, difference to Math.round() is that there
* will be appended Zeros to the end if the precision is not reached (0.1 gets rounded to 0.100 when precision is set to 3)
* @param {Number} x value to round
* @param {Number} n precision
* @return {String}
*/
function round(x, n) {
var e = 0, k = "";
if (n < 0 || n > 14) {
return 0;
}
if (n === 0) {
return Math.round(x);
} else {
e = Math.pow(10, n);
k = (Math.round(x * e) / e).toString();
if (k.indexOf('.') === -1) {
k += '.';
}
k += e.toString().substring(1);
return k.substring(0, k.indexOf('.') + n + 1);
}
}