diff --git a/emhttp/plugins/dynamix/DashStats.page b/emhttp/plugins/dynamix/DashStats.page
index b9b6fdf7e..20e17c8d0 100644
--- a/emhttp/plugins/dynamix/DashStats.page
+++ b/emhttp/plugins/dynamix/DashStats.page
@@ -256,7 +256,7 @@ input[value=Edit]{margin:12px 0 0 0;padding:5px 10px}
|
- =_var($var,'SYS_MODEL')?>
+ =_var($var,'SYS_MODEL')?:'---'?>
Unraid OS =_var($var,'regTy')?>
@@ -745,6 +745,29 @@ String.prototype.md5 = function() {
}
return rh(a)+rh(b)+rh(c)+rh(d);
}
+jQuery.prototype.hideMe = function() {
+ var hidden = $.cookie('hidden_content');
+ hidden = hidden==null ? [] : hidden.split(';');
+ if (hidden.indexOf(this.attr('sort'))>=0) this.find('tr:gt(0)').hide();
+}
+jQuery.prototype.mixedView = function(s) {
+ if (s==0) {
+ this.find('tr:gt(0)').hide();
+ return;
+ }
+ this.find('tr:gt(0)').show();
+ if (this.attr('data')) {
+ setTimeout(this.attr('data'));
+ }
+ if (this.hasClass('mixed')) {
+ var select = this.find('select[name^="enter"]');
+ select = parseInt(select.val())+1;
+ this.find('tr:gt(0)').each(function(){
+ var names = ($(this).attr('class')||'').split(' ');
+ for (var n=0,name; name=names[n]; n++) if (/[0-9]/.test(name.slice(-1)) && name.slice(-1)!=select) $(this).hide();
+ });
+ }
+}
var ports = [=implode(',',array_map('escapestring',$ports))?>];
var cpu = [];
@@ -889,11 +912,9 @@ function loadlist(init) {
$.post('/webGui/include/DashboardApps.php',{display:'=$display['dashapps']?>',docker:'=$dockerd?>',vms:'=$libvirtd?>'},function(d) {
var data = d.split('\0');
$('#docker_view tr.updated').remove();
- $('#docker_view').append(data[0]);
- hideMe($('#docker_view'));
+ $('#docker_view').append(data[0]).hideMe();
$('#vm_view tr.updated').remove();
- $('#vm_view').append(data[1]);
- hideMe($('#vm_view'));
+ $('#vm_view').append(data[1]).hideMe();
if ($.cookie('my_apps')!=null) $('span.apps.stopped').hide(0,noApps());
if ($.cookie('my_vms')!=null) $('span.vms.stopped').hide(0,noVMs());
});
@@ -1189,24 +1210,6 @@ function setColor(l, t1, t2) {
case (t2 > 0 && l >= t2): return 'orangebar';
default: return '';}
}
-function hideMe(tbody) {
- var hidden = $.cookie('hidden_content');
- hidden = hidden==null ? [] : hidden.split(';');
- if (hidden.indexOf(tbody.attr('sort'))>=0) tbody.find('tr:gt(0)').hide();
-}
-function mixed(tbody) {
- if (tbody.attr('data')) {
- setTimeout(tbody.attr('data'));
- }
- if (tbody.hasClass('mixed')) {
- var select = tbody.find('select[name^="enter"]');
- select = parseInt(select.val())+1;
- tbody.find('tr:gt(0)').each(function(){
- var names = ($(this).attr('class')||'').split(' ');
- for (var n=0,name; name=names[n]; n++) if (/[0-9]/.test(name.slice(-1)) && name.slice(-1)!=select) $(this).hide();
- });
- }
-}
function openClose(button) {
var hidden = $.cookie('hidden_content');
hidden = hidden==null ? [] : hidden.split(';');
@@ -1215,12 +1218,11 @@ function openClose(button) {
var tbody = button.closest('tbody');
if (button.hasClass('fa-chevron-up')) {
button.removeClass('fa-chevron-up fa-chevron-down').addClass('fa-chevron-down');
- tbody.find('tr:gt(0)').hide();
+ tbody.mixedView(0);
hidden.push(tbody.attr('sort'));
} else {
button.removeClass('fa-chevron-up fa-chevron-down').addClass('fa-chevron-up');
- tbody.find('tr:gt(0)').show();
- mixed(tbody);
+ tbody.mixedView(1);
hidden.splice(hidden.indexOf(tbody.attr('sort')),1);
}
$.cookie('hidden_content',hidden.join(';'),{expires:3650});
@@ -1229,15 +1231,14 @@ function openClose(button) {
if (hidden.length==0) {
$('div.frame tbody').each(function(){
$(this).find('.openclose').removeClass('fa-chevron-up fa-chevron-down').addClass('fa-chevron-down');
- $(this).find('tr:gt(0)').hide();
+ $(this).mixedView(0);
hidden.push($(this).attr('sort'));
});
$.cookie('hidden_content',hidden.join(';'),{expires:3650});
} else {
$('div.frame tbody').each(function(){
$(this).find('.openclose').removeClass('fa-chevron-up fa-chevron-down').addClass('fa-chevron-up');
- $(this).find('tr:gt(0)').show();
- mixed($(this));
+ $(this).mixedView(1);
});
$.removeCookie('hidden_content');
}
@@ -1380,8 +1381,7 @@ dashboard.on('message',function(msg,meta) {
var info = moreInfo(data,"_(Array)_");
// array devices
$('#array_list tr.updated').remove();
- $('#array_list').append(data[0]);
- hideMe($('#array_list'));
+ $('#array_list').append(data[0]).hideMe();
$('#array_info').parent().css('display',info?'':'none');
$('#array_info').html(info);
smartMenu('#array_list');
@@ -1391,8 +1391,7 @@ dashboard.on('message',function(msg,meta) {
var data = t.split('\0');
var info = moreInfo(data,"_(Pool)_");
$('#pool_list'+i+' tr.updated').remove();
- $('#pool_list'+i).append(t);
- hideMe($('#pool_list'+i));
+ $('#pool_list'+i).append(t).hideMe();
$('#pool_info'+i).parent().css('display',info?'':'none');
$('#pool_info'+i).html(info);
smartMenu('#pool_list'+i);
@@ -1402,8 +1401,7 @@ dashboard.on('message',function(msg,meta) {
var data = part[2].split('\0');
var info = moreInfo(data,"_(Unassigned)_");
$('#devs_list tr.updated').remove();
- $('#devs_list').append(data[0]);
- hideMe($('#devs_list'));
+ $('#devs_list').append(data[0]).hideMe();
$('#devs_info').parent().css('display',info?'':'none');
$('#devs_info').html(info);
smartMenu('#devs_list');
diff --git a/emhttp/plugins/dynamix/WG0.page b/emhttp/plugins/dynamix/WG0.page
index cb9153452..0699423eb 100644
--- a/emhttp/plugins/dynamix/WG0.page
+++ b/emhttp/plugins/dynamix/WG0.page
@@ -130,7 +130,7 @@ $active = explode(' ',exec('wg show interfaces'));
$autostart = explode(' ',@file_get_contents("$etc/autostart")?:'');
$build = false;
$script = "$docroot/webGui/scripts/upnp_port";
-$services = "$docroot/webGui/scripts/reload_services";
+$services = "$docroot/webGui/scripts/update_services";
$template = "$docroot/webGui/WGX.page";
$tower = _var($var,'NAME');
$ethX = 'eth0';
diff --git a/emhttp/plugins/dynamix/nchan/update_1 b/emhttp/plugins/dynamix/nchan/update_1
index 3937a3830..057263bf9 100755
--- a/emhttp/plugins/dynamix/nchan/update_1
+++ b/emhttp/plugins/dynamix/nchan/update_1
@@ -24,7 +24,7 @@ while (true) {
exec("awk '/^c_max|^size/{print \$3}' /proc/spl/kstat/zfs/arcstats 2>/dev/null",$zfs);
[$total,$free] = $memory;
$used = $total-$free;
- $info = max(round(100*(1-$free/$total)),0)."%\0".round(100*($zfs[1]??0)/($zfs[0]??1))."%\0".implode("\0",$sys);
+ $info = max(round(100*(1-$free/$total)),0)."%\0".min(100,round(100*($zfs[1]??0)/($zfs[0]??1)))."%\0".implode("\0",$sys);
$rpms = count($rpms) ? implode(" RPM\0",$rpms).' RPM' : '';
$names = array_keys((array)parse_ini_file("$varroot/shares.ini"));
exec("LANG='en_US.UTF8' lsof -Owl /mnt/disk[0-9]* 2>/dev/null|awk '/^shfs/ && \$0!~/\.AppleD(B|ouble)/ && \$5==\"REG\"'|awk -F/ '{print \$4}'",$lsof);
diff --git a/emhttp/plugins/dynamix/scripts/reload_services b/emhttp/plugins/dynamix/scripts/reload_services
index 36361190e..f3750640e 100755
--- a/emhttp/plugins/dynamix/scripts/reload_services
+++ b/emhttp/plugins/dynamix/scripts/reload_services
@@ -1,5 +1,5 @@
#!/bin/bash
-SERVICES="sshd avahidaemon samba rpc nfsd ntpd nginx"
+SERVICES="rpc nfsd ntpd nginx sshd avahidaemon samba"
if [[ -n $1 ]]; then
[[ ! -e $1 ]] && touch $1 || exit 0
diff --git a/emhttp/plugins/dynamix/scripts/update_services b/emhttp/plugins/dynamix/scripts/update_services
new file mode 100755
index 000000000..8dc4b3ef2
--- /dev/null
+++ b/emhttp/plugins/dynamix/scripts/update_services
@@ -0,0 +1,6 @@
+#!/bin/bash
+lock=/tmp/atlock.tmp
+
+rm -f $lock
+echo "sleep ${1:-1};/usr/local/emhttp/webGui/scripts/reload_services $lock"|at -M now 2>/dev/null
+exit 0
diff --git a/etc/rc.d/rc.library.source b/etc/rc.d/rc.library.source
index 3e071f204..1daeac35d 100644
--- a/etc/rc.d/rc.library.source
+++ b/etc/rc.d/rc.library.source
@@ -140,12 +140,12 @@ check() {
while IFS='\n' read -r net; do
net=($net)
if [[ "avahi show" =~ $CALLER ]]; then
- [[ -n $net ]] && bind+=($net)
+ [[ -n $net && -z $(good $net) ]] && bind+=($net)
[[ -n ${net[1]} ]] && ipv4=yes
else
# exclude wireguard tunnels for ntp
[[ $CALLER == ntp ]] && name=$(show ${net[1]}) || name=
- [[ ${name:0:2} != wg && -n ${net[1]} ]] && ipv4=yes bind+=($(sub ${net[1]}))
+ [[ ${name:0:2} != wg && -n ${net[1]} && -z $(good ${net[1]}) ]] && ipv4=yes bind+=($(sub ${net[1]}))
fi
done <<< $(ip -br -4 addr|awk '/^(br|bond|eth|wg)[0-9]+(\.[0-9]+)?/ {print $1,$3}')
# active ipv6 interfaces (including wireguard)
@@ -157,7 +157,7 @@ check() {
else
# exclude wireguard tunnels for ntp
[[ $CALLER == ntp ]] && name=$(show ${net[1]}) || name=
- [[ ${name:0:2} != wg && -n ${net[1]} ]] && ipv6=yes bind+=($(sub ${net[1]}))
+ [[ ${name:0:2} != wg && -n ${net[1]} && -z $(good ${net[1]}) ]] && ipv6=yes bind+=($(sub ${net[1]}))
fi
done <<< $(ip -br -6 addr|awk '/^(br|bond|eth|wg)[0-9]+(\.[0-9]+)?/ && $3 !~ "^fe80" {print $1,$3}')
# add loopback interface
diff --git a/sbin/create_network_ini b/sbin/create_network_ini
index 1b9cc2fd3..9cdd051b0 100755
--- a/sbin/create_network_ini
+++ b/sbin/create_network_ini
@@ -11,8 +11,6 @@
ini=/var/local/emhttp/network.ini.new
cfg=/boot/config/network.cfg
-job=/tmp/atjob.tmp
-reload=/usr/local/emhttp/webGui/scripts/reload_services
declare -A VLANID USE_DHCP IPADDR NETMASK GATEWAY METRIC USE_DHCP6 IPADDR6 NETMASK6 GATEWAY6 PRIVACY6 METRIC6 DESCRIPTION PROTOCOL
@@ -222,8 +220,7 @@ done
/usr/bin/mv $ini ${ini%.*}
# delayed execution
-rm -f $job
-echo "sleep 35;$reload $job"|at -M now 2>/dev/null
+/usr/local/emhttp/webGui/scripts/update_services 35
# send update information
if [[ -n $interface && -n $data && -e /var/run/nginx.socket ]]; then
|