//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 '' + " " +this["Distro"]; } }, LoadAvg: { html: function () { if (this["CPULoad"] !== undefined) { return '
'+this["LoadAvg"] + '
' + '
' + '
' + round(this["CPULoad"],0) + '%
'; } 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 '
' + '
' + '
' + round(this["Load"],0) + '%
'; } } }; 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+=""; html+="Machine"; html+=""; html+=""; html+=""; } 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+=""; html+="CPU"; html+="Number of processors:"; html+=""; html+=""; } html+=""; html+=""; html+=""; html+=""; html+=""; for (var proc_param in paramlist) { if (datas[i]["@attributes"][proc_param] !== undefined) { html+=""; html+=""; html+=""+ paramlist[proc_param]+""; html+=""; html+=""; } } } } 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+=""; html+="" + hw_type + ""; html+="Number of devices:"; html+=""; html+=""; } html+=""; html+=""; html+=""; html+=""; html+=""; } } 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 '
' + '
' + '
' + this["@attributes"]["Percent"] + '%
'; } else { var rest = parseInt(this["@attributes"]["Percent"]); var html = '
'; if ((this["Details"]["@attributes"]["AppPercent"] !== undefined) && (this["Details"]["@attributes"]["AppPercent"] > 0)) { html += '
'; rest -= parseInt(this["Details"]["@attributes"]["AppPercent"]); } if ((this["Details"]["@attributes"]["CachedPercent"] !== undefined) && (this["Details"]["@attributes"]["CachedPercent"] > 0)) { html += '
'; rest -= parseInt(this["Details"]["@attributes"]["CachedPercent"]); } if ((this["Details"]["@attributes"]["BuffersPercent"] !== undefined) && (this["Details"]["@attributes"]["BuffersPercent"] > 0)) { html += '
'; rest -= parseInt(this["Details"]["@attributes"]["BuffersPercent"]); } if (rest > 0) { html += '
'; } html += '
'; html += '
' + 'Total: ' + this["@attributes"]["Percent"] + '% ' + '('; 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 += ')
'; 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 '
' + '
' + '
' + this["Percent"] + '%
'; } }, Name: { html: function () { return this['Name'] + '
' + ((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) ? '
(' + this["MountOptions"] + ')' : ''); } }, Percent: { html: function () { return '
' + '
= parseInt(data["Options"]["@attributes"]["threshold"]))) ? 'progress-bar progress-bar-danger' : 'progress-bar progress-bar-info') + '" style="width: ' + this["Percent"] + '% ;">
' + '
' + '
' + this["Percent"] + '% ' + ((this["Inodes"] !== undefined) ? '(' + this["Inodes"] + '%)' : '') + '
'; } } }; 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+=""; html+=""; html+="Device"; html+="Receive"; html+="Sent"; html+="Err/" + String.fromCharCode(8203) +"Drop"; html+=""; html+=""; try { var network_data = []; var datas = items(data["Network"]["NetDevice"]); for (var i = 0; i < datas.length; i++) { html+=""; html+=""; html+=""; html+=""; html+=""; html+=""; 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 +="" + infos[j] + ""; } } } $("#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 '
' + '
' + '
' + round(this["LoadPercent"],0) + '%
'; } }, BatteryChargePercent: { html: function () { return '
' + '
' + '
' + round(this["BatteryChargePercent"],0) + '%
'; } } }; 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+=""; html+=""; html+=""; html+=""; for (var proc_param in paramlist) { if (datas[i]["@attributes"][proc_param] !== undefined) { html+=""; html+=""+ paramlist[proc_param]+""; html+=""; html+=""; } } } } catch (err) { } if ((data["UPSInfo"]["@attributes"] !== undefined) && (data["UPSInfo"]["@attributes"]["ApcupsdCgiLinks"] === "1")) { html+=""; html+="(Details)"; html+=""; html+=""; } $("#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("
  • "+datas[i]["@attributes"]["Function"]+" - "+datas[i]["@attributes"]["Message"].replace(/\n/g, "
    ")+"

  • "); } 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
    (" + round((((9 * degree) / 5) + 32), 1) + String.fromCharCode(160) + "F)"; case "f-c": return round((((9 * degree) / 5) + 32), 1) + String.fromCharCode(160) + "F
    (" + round(degree, 1) + String.fromCharCode(160) + "C)"; } } } /** * 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
    support is included * for binary and decimal output
    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); } }