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
| |