Merge branch '6.4-wip' of github.com:limetech/webgui into 6.4-wip

This commit is contained in:
Tom Mortensen
2017-11-07 10:09:45 -08:00
8 changed files with 121 additions and 134 deletions
+2 -2
View File
@@ -100,7 +100,7 @@ function stopParity(form,text) {
form.submit();
<?endif;?>
}
function shutdown(form,cmd) {
function shutdown_now(form,cmd) {
$(form).append('<input type="hidden" name="cmd" value="'+cmd+'">');
<?if ($confirm['down']):?>
swal({title:'Proceed?',text:'This will '+cmd+' the system',type:'warning',showCancelButton:true},function(p){if (p) form.submit(); else $('input[name="cmd"]').remove();});
@@ -490,7 +490,7 @@ $(function(){
<?endif;?>
<form name="shutdownOps" method="POST" action="/webGui/include/Boot.php">
<table class="array_status">
<tr><td></td><td><input type="button" name="reboot" value="Reboot" onclick="shutdown(this.form,'reboot')"><input type="button" name="shutdown" value="Power down" onclick="shutdown(this.form,'shutdown')"></td>
<tr><td></td><td><input type="button" name="reboot" value="Reboot" onclick="shutdown_now(this.form,'reboot')"><input type="button" name="shutdown" value="Power down" onclick="shutdown_now(this.form,'shutdown')"></td>
<td><strong>Reboot</strong> will activate a <em>clean</em> system reset.<br><strong>Power down</strong> will activate a <em>clean</em> power down.</td></tr>
</table>
</form>
+20 -45
View File
@@ -123,6 +123,11 @@ $slots = count($disks) + count($devs);
<?if ($slots<30):?>
<style>
table.share_status.fixed td:nth-child(<?=$slots+1?>)~td{visibility:hidden}
<?if ($display['theme']=='white'):?>
table.share_status.fixed td:nth-child(<?=$slots+1?>){border-right:1px solid #E8E8E8}
<?elseif ($display['theme']=='black'):?>
table.share_status.fixed td:nth-child(<?=$slots+1?>){border-right:1px solid #202020}
<?endif;?>
</style>
<?endif;?>
<table class='share_status fixed'>
@@ -552,35 +557,20 @@ function toggle_net(init) {
$('.net_closed').show();
}
}
function parseINI(data){
var regex = {
section: /^\s*\[\s*\"*([^\]]*)\s*\"*\]\s*$/,
param: /^\s*([^=]+?)\s*=\s*\"*(.*?)\s*\"*$/,
comment: /^\s*;.*$/
};
var value = {};
var lines = data.split(/[\r\n]+/);
var section = null;
lines.forEach(function(line){
if(regex.comment.test(line)){
return;
}else if(regex.param.test(line)){
var match = line.match(regex.param);
if(section){
value[section][match[1]] = match[2];
}else{
value[match[1]] = match[2];
}
}else if(regex.section.test(line)){
var match = line.match(regex.section);
value[match[1]] = {};
section = match[1];
}else if(line.length == 0 && section){
section = null;
};
});
return value;
}
var cpuload = new NchanSubscriber('/sub/cpuload');
cpuload.on('message',function(message) {
// message should be something like: {"cpuload": {"cpu":[0,0],"cpu0":[0,0],"cpu1":[0,0],"cpu2":[0,0],"cpu3":[0,0]}}
// The array values are [<load-percentage>,<guest-percentage>]. guest-percentage is that part of load-percentage that is being consumed by VM guests
// var json = $.parseJSON(message);
// $.each(json["cpuload"],function(k,v) {
// $('#'+k).animate({width:v[0]+'%'},{step:function(){$('#'+k).css('overflow','visible');}}).text(v[0]+'%');
// });
// message is the cpuload.ini file contents
var ini = parseINI(message);
$.each(ini,function(k,v) {
$('#'+k).animate({width:v['host']+'%'},{step:function(){$('#'+k).css('overflow','visible');}}).text(v['host']+'%');
});
});
$(function() {
dropdown('enter_share');
dropdown('enter_view');
@@ -591,21 +581,6 @@ $(function() {
update30();
update15();
context.init({preventDoubleContext:false});
var cpuload_sub = new NchanSubscriber('/sub/cpuload');
cpuload_sub.on("message", function(message, message_metadata) {
// message should be something like: {"cpuload": {"cpu":[0,0],"cpu0":[0,0],"cpu1":[0,0],"cpu2":[0,0],"cpu3":[0,0]}}
// The array values are [<load-percentage>,<guest-percentage>]. guest-percentage is that part of load-percentage that is being consumed by VM guests
// var json = $.parseJSON(message);
// $.each(json["cpuload"],function(k,v) {
// $('#'+k).animate({width:v[0]+'%'},{step:function(){$('#'+k).css('overflow','visible');}}).text(v[0]+'%');
// });
// message is the cpuload.ini file contents
var ini = parseINI(message);
$.each(ini,function(k,v) {
$('#'+k).animate({width:v['host']+'%'},{step:function(){$('#'+k).css('overflow','visible');}}).text(v['host']+'%');
});
});
cpuload_sub.start();
cpuload.start();
});
</script>
-1
View File
@@ -242,7 +242,6 @@ Critical disk utilization threshold (%):
> A value of zero will disable the critical threshold (including notifications).
<?endif;?>
&nbsp;
: <input type="submit" name="changeDisk" value="Apply"><input type="button" value="Done" onclick="done()">
</form>
+15
View File
@@ -467,6 +467,11 @@ IP address assignment:
IPv4 address:
: <input type="text" name="IPADDR:<?=$i?>" maxlength="15" value="<?=$eth0["IPADDR:$i"]?>" class="narrow" pattern="<?=$validIP4?>" title="IPv4 address A.B.C.D">/ <select name="NETMASK:<?=$i?>" size="1" class="slim">
<?=mk_option($eth0["NETMASK:$i"], "255.255.0.0", "16");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.128.0", "17");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.192.0", "18");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.224.0", "19");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.240.0", "20");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.248.0", "21");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.252.0", "22");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.254.0", "23");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.255.0", "24", $eth0["IPADDR:$i"]?"":"selected");?>
@@ -613,6 +618,11 @@ IP address assignment:
IPv4 address:
: <input type="text" name="IPADDR:<?=$i?>" maxlength="15" value="<?=$eth0["IPADDR:$i"]?>" class="narrow" pattern="<?=$validIP4?>" title="IPv4 address A.B.C.D">/ <select name="NETMASK:<?=$i?>" size="1" class="slim">
<?=mk_option($eth0["NETMASK:$i"], "255.255.0.0", "16");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.128.0", "17");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.192.0", "18");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.224.0", "19");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.240.0", "20");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.248.0", "21");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.252.0", "22");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.254.0", "23");?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.255.0", "24", $eth0["IPADDR:$i"]?"":"selected");?>
@@ -695,6 +705,11 @@ IP address assignment:
IPv4 address:
: <input type="text" name="IPADDR:INDEX" maxlength="15" value="<?=$eth0["IPADDR:INDEX"]?>" class="narrow" pattern="<?=$validIP4?>" title="IPv4 address A.B.C.D">/ <select name="NETMASK:INDEX" size="1" class="slim">
<?=mk_option($eth0["NETMASK:INDEX"], "255.255.0.0", "16");?>
<?=mk_option($eth0["NETMASK:INDEX"], "255.255.128.0", "17");?>
<?=mk_option($eth0["NETMASK:INDEX"], "255.255.192.0", "18");?>
<?=mk_option($eth0["NETMASK:INDEX"], "255.255.224.0", "19");?>
<?=mk_option($eth0["NETMASK:INDEX"], "255.255.240.0", "20");?>
<?=mk_option($eth0["NETMASK:INDEX"], "255.255.248.0", "21");?>
<?=mk_option($eth0["NETMASK:INDEX"], "255.255.252.0", "22");?>
<?=mk_option($eth0["NETMASK:INDEX"], "255.255.254.0", "23");?>
<?=mk_option($eth0["NETMASK:INDEX"], "255.255.255.0", "24", "selected");?>
+15
View File
@@ -187,6 +187,11 @@ IP address assignment:
IPv4 address:
: <input type="text" name="IPADDR:<?=$i?>" maxlength="15" value="<?=$ethX["IPADDR:$i"]?>" class="narrow" pattern="<?=$validIP4?>" title="IPv4 address A.B.C.D">/ <select name="NETMASK:<?=$i?>" size="1" class="slim">
<?=mk_option($ethX["NETMASK:$i"], "255.255.0.0", "16");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.128.0", "17");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.192.0", "18");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.224.0", "19");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.240.0", "20");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.248.0", "21");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.252.0", "22");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.254.0", "23");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.255.0", "24", $ethX["IPADDR:$i"]?"":"selected");?>
@@ -276,6 +281,11 @@ IP address assignment:
IPv4 address:
: <input type="text" name="IPADDR:<?=$i?>" maxlength="15" value="<?=$ethX["IPADDR:$i"]?>" class="narrow" pattern="<?=$validIP4?>" title="IPv4 address A.B.C.D">/ <select name="NETMASK:<?=$i?>" size="1" class="slim">
<?=mk_option($ethX["NETMASK:$i"], "255.255.0.0", "16");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.128.0", "17");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.192.0", "18");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.224.0", "19");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.240.0", "20");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.248.0", "21");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.252.0", "22");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.254.0", "23");?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.255.0", "24", $ethX["IPADDR:$i"]?"":"selected");?>
@@ -358,6 +368,11 @@ IP address assignment:
IPv4 address:
: <input type="text" name="IPADDR:INDEX" maxlength="15" value="<?=$ethX["IPADDR:INDEX"]?>" class="narrow" pattern="<?=$validIP4?>" title="IPv4 address A.B.C.D">/ <select name="NETMASK:INDEX" size="1" class="slim">
<?=mk_option($ethX["NETMASK:INDEX"], "255.255.0.0", "16");?>
<?=mk_option($ethX["NETMASK:INDEX"], "255.255.128.0", "17");?>
<?=mk_option($ethX["NETMASK:INDEX"], "255.255.192.0", "18");?>
<?=mk_option($ethX["NETMASK:INDEX"], "255.255.224.0", "19");?>
<?=mk_option($ethX["NETMASK:INDEX"], "255.255.240.0", "20");?>
<?=mk_option($ethX["NETMASK:INDEX"], "255.255.248.0", "21");?>
<?=mk_option($ethX["NETMASK:INDEX"], "255.255.252.0", "22");?>
<?=mk_option($ethX["NETMASK:INDEX"], "255.255.254.0", "23");?>
<?=mk_option($ethX["NETMASK:INDEX"], "255.255.255.0", "24", "selected");?>
-3
View File
@@ -188,9 +188,6 @@ case 'sys':
$mem = max(round((1-$memory[1]/$memory[0])*100),0);
echo "{$mem}%#".implode('#',$sys);
break;
case 'cpu':
echo @file_get_contents('state/cpuload.ini');
break;
case 'fan':
exec("sensors -uA 2>/dev/null|grep -Po 'fan\d_input: \K\d+'",$rpms);
if ($rpms) echo implode(' RPM#',$rpms).' RPM';
+68 -82
View File
@@ -30,7 +30,6 @@
.upgrade_notice{position:fixed;top:1px;left:0;width:100%;height:40px;line-height:40px;color:#E68A00;background:#FEEFB3;border-bottom:#E68A00 1px solid;text-align:center;font-size:15px;z-index:999}
.upgrade_notice i{margin:14px;float:right;cursor:pointer}
.dynamix_back-to-top {background: none;margin: 0;position: fixed;bottom: 30px;right: 0;width: 30px;height: 30px;z-index: 100;display: none;text-decoration: none;color: #ffffff;}
<?
$banner = '/boot/config/plugins/dynamix/banner.png';
echo "#header.image{background-image:url(";
@@ -374,10 +373,7 @@ foreach ($pages as $page) {
echo "<div class=\"Panel\"><a href=\"$link\" onclick=\"$.cookie('one','tab1',{path:'/'})\">$icon<div class=\"PanelText\">$title</div></a></div>";
}
}
$text = $page['text'];
if (!isset($page['Markdown']) || $page['Markdown'] == 'true') {
$text = Markdown($text);
}
$text = empty($page['Markdown']) || $page['Markdown']=='true' ? Markdown($page['text']) : $page['text'];
eval("?>$text");
if ($close) echo "</div></div>";
}
@@ -399,10 +395,6 @@ default:
}
echo "</span></span><span id='countdown'></span><span id='user-notice' class='red-text'></span>";
echo "<span id='copyright'>unRAID&reg; webGui &copy;2017, Lime Technology, Inc.";
if (isset($myPage['Author'])) {
echo " | Page author: {$myPage['Author']}";
if (isset($myPage['Version'])) echo ", version: {$myPage['Version']}";
}
echo " <a href='http://lime-technology.com/wiki/index.php/Official_Documentation' target='_blank' title='Online manual'><i class='fa fa-book'></i> manual</a>";
echo "</span></div>";
?>
@@ -411,34 +403,75 @@ echo "</span></div>";
if (typeof InstallTrigger!=='undefined') $('#nav-block').addClass('mozilla');
function parseINI(data){
var regex = {
section: /^\s*\[\s*\"*([^\]]*)\s*\"*\]\s*$/,
param: /^\s*([^=]+?)\s*=\s*\"*(.*?)\s*\"*$/,
comment: /^\s*;.*$/
var regex = {
section: /^\s*\[\s*\"*([^\]]*)\s*\"*\]\s*$/,
param: /^\s*([^=]+?)\s*=\s*\"*(.*?)\s*\"*$/,
comment: /^\s*;.*$/
};
var value = {};
var lines = data.split(/[\r\n]+/);
var section = null;
lines.forEach(function(line) {
if (regex.comment.test(line)) {
return;
} else if (regex.param.test(line)) {
var match = line.match(regex.param);
if (section) {
value[section][match[1]] = match[2];
} else {
value[match[1]] = match[2];
}
} else if (regex.section.test(line)) {
var match = line.match(regex.section);
value[match[1]] = {};
section = match[1];
} else if (line.length==0 && section) {
section = null;
};
var value = {};
var lines = data.split(/[\r\n]+/);
var section = null;
lines.forEach(function(line){
if(regex.comment.test(line)){
return;
}else if(regex.param.test(line)){
var match = line.match(regex.param);
if(section){
value[section][match[1]] = match[2];
}else{
value[match[1]] = match[2];
}
}else if(regex.section.test(line)){
var match = line.match(regex.section);
value[match[1]] = {};
section = match[1];
}else if(line.length == 0 && section){
section = null;
};
});
return value;
});
return value;
}
var watchdog = new NchanSubscriber('/sub/var');
watchdog.on('message', function(data) {
var ini = parseINI(data);
var state = ini['fsState'];
var progress = ini['fsProgress'];
var status;
if (state=='Stopped') {
status = "<span class='red strong'>Array Stopped</span>";
} else if (state=='Started') {
status = "<span class='green strong'>Array Started</span>";
} else if (state=='Formatting') {
status = "<span class='green strong'>Array Started</span>&bullet;<span class='orange strong'>Formatting device(s)</span>";
} else {
status = "<span class='orange strong'>Array "+state+"</span>";
}
if (ini['mdResync']>0) {
var action;
if (ini['mdResyncAction'].indexOf("recon")>=0) action = "Parity-Sync / Data-Rebuild";
else if (ini['mdResyncAction'].indexOf("clear")>=0) action = "Clearing";
else if (ini['mdResyncAction']=="check") action = "Read-Check";
else if (ini['mdResyncAction'].indexOf("check")>=0) action = "Parity-Check";
action += " "+(ini['mdResyncPos']/(ini['mdResync']/100+1)).toFixed(1)+" %";
status += "&bullet;<span class='orange strong'>"+action.replace('.','<?=$display['number'][0]?>')+"</span>";
}
if (progress) status += "&bullet;<span class='blue strong'>"+progress+"</span>";
$('#statusbar').html(status);
});
var backtotopoffset = 250;
var backtotopduration = 500;
$(window).scroll(function() {
if ($(this).scrollTop() > backtotopoffset) {
$('.dynamix_back-to-top').fadeIn(backtotopduration);
} else {
$('.dynamix_back-to-top').fadeOut(backtotopduration);
}
});
$('.dynamix_back-to-top').click(function(event) {
event.preventDefault();
$('html,body').animate({scrollTop:0},backtotopduration);
return false;
});
$(function() {
<?if ($notify['entity'] & 1 == 1):?>
$.post('/webGui/include/Notify.php',{cmd:'init'},function(){timers.notifier = setTimeout(notifier,0);});
@@ -512,56 +545,9 @@ $(function() {
});
});
}
$('form').append($('<input>').attr({type:'hidden', name:'csrf_token', value:'<?=$var['csrf_token']?>'}));
var watchdog = new NchanSubscriber('/sub/var');
watchdog.on('message', function(data){
var ini=parseINI(data);
var state=ini['fsState'];
var progress=ini['fsProgress'];
var status;
if (state=="Stopped") {
status="<span class='red strong'>Array Stopped</span>";
} else if (state=="Started") {
status="<span class='green strong'>Array Started</span>";
} else if (state=="Formatting") {
status="<span class='green strong'>Array Started</span>&bullet;<span class='orange strong'>Formatting device(s)</span>";
} else {
status="<span class='orange strong'>Array "+state+"</span>";
}
if (ini['mdResync'] > 0) {
var action;
if (ini['mdResyncAction'].indexOf("recon")>=0) action="Parity-Sync / Data-Rebuild";
else if (ini['mdResyncAction'].indexOf("clear")>=0) action="Clearing";
else if (ini['mdResyncAction'] == "check") action="Read-Check";
else if (ini['mdResyncAction'].indexOf("check")>=0) action="Parity-Check";
action+=" "+(ini['mdResyncPos']/(ini['mdResync']/100+1)).toFixed(1)+" %";
status+="&bullet;<span class='orange strong'>"+action.replace('.','<?=$display['number'][0]?>')+"</span>";
}
if (progress)
status+="&bullet;<span class='blue strong'>"+progress+"</span>";
$('#statusbar').html(status);
});
watchdog.start();
});
var backtotopoffset = 250;
var backtotopduration = 500;
$(window).scroll(function() {
if ($(this).scrollTop() > backtotopoffset) {
$('.dynamix_back-to-top').fadeIn(backtotopduration);
} else {
$('.dynamix_back-to-top').fadeOut(backtotopduration);
}
});
$('.dynamix_back-to-top').click(function(event) {
event.preventDefault();
$('html, body').animate({scrollTop: 0},backtotopduration);
return false;
});
</script>
</body>
</html>