diff --git a/emhttp/plugins/dynamix/nchan/device_list b/emhttp/plugins/dynamix/nchan/device_list index 6302f04fb4..e997372424 100755 --- a/emhttp/plugins/dynamix/nchan/device_list +++ b/emhttp/plugins/dynamix/nchan/device_list @@ -216,19 +216,19 @@ function array_offline(&$disk, $pool='') { case 'DISK_NP': $echo[] = "".device_info($disk,false).""; $echo[] = "".assignment($disk).""; - $echo[] = ""; + $echo[] = ""; break; case 'DISK_NP_MISSING': $echo[] = "".device_info($disk,false)."
"._('Missing').""; $echo[] = "".assignment($disk)."{$disk['idSb']}"; - $echo[] = ""; + $echo[] = ""; $echo[] = "".vfs_type($disk,false).""; $echo[] = ""; break; case 'DISK_NP_DSBL': $echo[] = "".device_info($disk,false).""; $echo[] = "".assignment($disk).""; - $echo[] = ""; + $echo[] = ""; $echo[] = "".vfs_type($disk,false).""; $echo[] = ""; break; @@ -241,9 +241,9 @@ function array_offline(&$disk, $pool='') { $echo[] = "".assignment($disk).""; $echo[] = "".my_power($disk['power']).my_temp(_var($disk,'temp','*')).""; if ($warning) { - $echo[] = "$warning"; + $echo[] = "$warning"; } else { - $echo[] = ""; + $echo[] = ""; $echo[] = "".vfs_type($disk,false).""; $echo[] = ""; } @@ -253,9 +253,9 @@ function array_offline(&$disk, $pool='') { $echo[] = "".assignment($disk)."{$disk['idSb']}"; $echo[] = "".my_temp(_var($disk,'temp','*')).""; if ($warning) { - $echo[] = "$warning"; + $echo[] = "$warning"; } else { - $echo[] = ""; + $echo[] = ""; $echo[] = "".vfs_type($disk,false).""; $echo[] = ""; } @@ -269,10 +269,10 @@ function array_online(&$disk, $fstype='') { global $pools, $sum, $diskio; $disk['power'] ??= (_var($disk,'transport')=='nvme' ? get_nvme_info(_var($disk,'device'),'power') : 0); $echo = []; - $data = [0,0]; + $data = [0,0,0]; if (_var($disk,'device')) { $dev = $disk['device']; - $data = explode(' ',$diskio[$dev] ?? '0 0'); + $data = explode(' ',$diskio[$dev] ?? '0 0 0 0 0'); $sum['ioReads'] += $data[0]; $sum['ioWrites'] += $data[1]; } @@ -295,7 +295,7 @@ function array_online(&$disk, $fstype='') { if (in_array(_var($disk,'name'),$pools) || $fstype=='zfs') { $echo[] = "".device_info($disk,true).""; $echo[] = "".($fstype=='zfs' ? _('Not present') : _('Not installed')).""; - $echo[] = ""; + $echo[] = ""; $echo[] = fs_info($disk,true); } break; @@ -312,6 +312,7 @@ function array_online(&$disk, $fstype='') { $echo[] = "".my_power($disk['power']).my_temp(_var($disk,'temp','*')).""; $echo[] = "".my_diskio($data[0])."".my_number(_var($disk,'numReads',0)).""; $echo[] = "".my_diskio($data[1])."".my_number(_var($disk,'numWrites',0)).""; + $echo[] = "" . (_var($data, 4, 0)) . " %"; $echo[] = "".my_number(_var($disk,'numErrors',0)).""; $echo[] = fs_info($disk,true); break; @@ -334,6 +335,7 @@ function show_totals($text,$array,$name) { $echo[] = "".my_power($sum['power']).($sum['count']>0 ? my_temp(round($sum['temp']/$sum['count'])) : '*').""; $echo[] = "".my_diskio($sum['ioReads'])."".my_number($sum['numReads']).""; $echo[] = "".my_diskio($sum['ioWrites'])."".my_number($sum['numWrites']).""; + $echo[] = "-"; $echo[] = "".my_number($sum['numErrors']).""; $echo[] = ""; if ($array && _var($var,'startMode')=='Normal') { @@ -351,7 +353,7 @@ function show_totals($text,$array,$name) { $echo[] = "
".my_scale($sum['fsFree']*1024,$unit)." $unit
"; } } else { - $echo[] = ""; + $echo[] = ""; } $echo[] = ""; return implode($echo); @@ -468,7 +470,7 @@ while (true) { $echo[$a][] = ""; foreach ($Data as $disk) $echo[$a][] = array_offline($disk); } - $echo[$a][] = ""._('Slots').":".array_slots().""; + $echo[$a][] = ""._('Slots').":".array_slots().""; } else { if (!$poolsOnly) { foreach ($Parity as $disk) if ($disk['status']!='DISK_NP_DSBL') $echo[$a][] = array_online($disk); @@ -480,7 +482,7 @@ while (true) { $a = 'boot_device'; $echo[$a] = []; - $data = explode(' ',$diskio[_var($Flash,'device')] ?? '0 0'); + $data = explode(' ',$diskio[_var($Flash,'device')] ?? '0 0 0 0 0'); $flash = &$sec['flash']; $share = (_var($var,'shareSMBEnabled')=='yes' && _var($flash,'export')=='e' && _var($flash,'security')=='public') ? " "._('Flash device is set as public share')."
"._('Please change share SMB security')."
"._('Click on **FLASH** above this message')."
" @@ -491,6 +493,7 @@ while (true) { $echo[$a][] = "*"; $echo[$a][] = "".my_diskio($data[0])."".my_number(_var($Flash,'numReads',0)).""; $echo[$a][] = "".my_diskio($data[1])."".my_number(_var($Flash,'numWrites',0)).""; + $echo[$a][] = "" . (_var($data, 4, 0)) . " %"; $echo[$a][] = "".my_number(_var($Flash,'numErrors',0)).""; $echo[$a][] = fs_info($Flash,true); $echo[$a][] = ""; @@ -516,7 +519,7 @@ while (true) { $data = []; foreach ($log as $key => $value) $data[] = "$key=\"$value\""; $off &= !empty(_var($Cache[$root],'uuid')); file_put_contents($pool_log,implode("\n",$data)); - $echo[$a][] = ""._('Slots').":".cache_slots($off,$pool,_var($Cache[$pool],'devicesSb'),_var($Cache[$pool],'slots',0)).""; + $echo[$a][] = ""._('Slots').":".cache_slots($off,$pool,_var($Cache[$pool],'devicesSb'),_var($Cache[$pool],'slots',0)).""; $zfsPool = strstr(_var($Cache[$pool],'fsType'),'zfs') && !isSubpool($pool); if ($zfsPool) { $current_subpools = array_filter($pools, function($element) use ($pool,$_tilde_) {return str_contains($element,"{$pool}{$_tilde_}");}); @@ -543,7 +546,7 @@ while (true) { $echo[$a] = []; foreach ($devs as $disk) { $dev = _var($disk,'device'); - $data = explode(' ',$diskio[$dev] ?? '0 0 0 0'); + $data = explode(' ', $diskio[$dev] ?? '0 0 0 0 0'); $disk['type'] = 'New'; $disk['color'] = $disk['spundown']=="0" ? 'blue-on' : 'blue-blink'; $echo[$a][] = ""; @@ -552,13 +555,14 @@ while (true) { $echo[$a][] = "".my_temp($disk['temp']).""; $echo[$a][] = "".my_diskio($data[0])."".my_number(_var($disk,'numReads',0)).""; $echo[$a][] = "".my_diskio($data[1])."".my_number(_var($disk,'numWrites',0)).""; + $echo[$a][] = "" . (_var($data, 4, 0)) . " %"; $echo[$a][] = "".my_number(_var($disk,'numErrors',0)).""; if (file_exists("/tmp/preclear_stat_$dev")) { $text = exec("cut -d'|' -f3 /tmp/preclear_stat_$dev|sed 's:\^n:\:g'"); if (!str_contains($text,'Total time')) $text = _('Preclear in progress').'... '.$text; - $echo[$a][] = "$text"; + $echo[$a][] = "$text"; } else { - $echo[$a][] = ""; + $echo[$a][] = ""; } $echo[$a][] = ""; } diff --git a/emhttp/plugins/dynamix/nchan/disk_load b/emhttp/plugins/dynamix/nchan/disk_load index daf1e1b6bb..005fab30ff 100755 --- a/emhttp/plugins/dynamix/nchan/disk_load +++ b/emhttp/plugins/dynamix/nchan/disk_load @@ -1,30 +1,34 @@ #!/bin/bash ini=/var/local/emhttp/diskload.ini tmp=/var/local/emhttp/diskload.tmp -declare -a reads writes +declare -a reads writes use_time # t = poll interval in seconds t=2 # initialize array values upon first start -stats=($(awk '/(sd[a-z]*|nvme[0-9]*n1|vd[a-z]*) /{print $3,$6,$10,$4,$8}' /proc/diskstats)) +stats=($(awk '/(sd[a-z]*|nvme[0-9]*n1|vd[a-z]*) /{print $3,$6,$10,$4,$8,$13}' /proc/diskstats)) c=0; s=${#stats[@]} -for ((i=0;i>$tmp + util=$((((stats[i+5]-use_time[c])*100)/(t*1000))) + if [ $util -gt 100 ]; then util=100; fi + echo ${stats[i]}=$((reads[c]*512/t)) $((writes[c]*512/t)) ${stats[i+3]} ${stats[i+4]} $util >>$tmp reads[c]=${stats[i+1]} writes[c]=${stats[i+2]} + use_time[c]=${stats[i+5]} ((c++)) done mv -f $tmp $ini