diff --git a/emhttp/plugins/dynamix/ArrayDevices.page b/emhttp/plugins/dynamix/ArrayDevices.page index 030b130a2..1547821a6 100644 --- a/emhttp/plugins/dynamix/ArrayDevices.page +++ b/emhttp/plugins/dynamix/ArrayDevices.page @@ -68,7 +68,7 @@ $('#tab1').bind({click:function() {$('i.toggle').show('slow');}}); - +
_(Device)__(Identification)__(Temp)_._(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
_(Device)__(Identification)__(Temp)_ / _(Power)__(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
- +";?> diff --git a/emhttp/plugins/dynamix/CacheDevices.page b/emhttp/plugins/dynamix/CacheDevices.page index dad31fdda..43362c0c7 100644 --- a/emhttp/plugins/dynamix/CacheDevices.page +++ b/emhttp/plugins/dynamix/CacheDevices.page @@ -137,7 +137,7 @@ $('#tab2').bind({click:function() {$('i.toggle').show('slow');}});
_(Device)__(Identification)__(Temp)_._(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
_(Device)__(Identification)__(Temp)_ / _(Power)__(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
 
- +"?> diff --git a/emhttp/plugins/dynamix/OpenDevices.page b/emhttp/plugins/dynamix/OpenDevices.page index 1fdd64548..975c22788 100644 --- a/emhttp/plugins/dynamix/OpenDevices.page +++ b/emhttp/plugins/dynamix/OpenDevices.page @@ -25,7 +25,7 @@ $('').bind({click:function() {$('i.toggle').show('slow');}});
_(Device)__(Identification)__(Temp)_._(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
_(Device)__(Identification)__(Temp)_ / _(Power)__(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
 
- +=0 ? $disk['maxTemp'] : ($nvme => 0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0)); + $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme>=0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0)); $nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['wctemp'] : -1; - $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme => 0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0)); + $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme>=0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0)); $top = $_POST['top'] ?? 120; $empty = true; exec("smartctl -n standby -A $type ".escapeshellarg("/dev/$port"),$output); diff --git a/emhttp/plugins/dynamix/include/Wrappers.php b/emhttp/plugins/dynamix/include/Wrappers.php index be649cd79..8355a2ca2 100644 --- a/emhttp/plugins/dynamix/include/Wrappers.php +++ b/emhttp/plugins/dynamix/include/Wrappers.php @@ -114,31 +114,23 @@ function isSubpool($name) { return in_array($subpool,$subpools) ? $subpool : false; } function get_nvme_powerstate($device) { - global $display; - $nvme = []; - $number = _var($display,'number','.,'); - exec("nvme id-ctrl /dev/$device | grep -E '^(ps|[wc]ctemp) '",$rows); + $nvme = []; + $state = hexdec(my_explode(':',exec("nvme get-feature /dev/$device -f 2"),3)[2]); + exec("nvme id-ctrl /dev/$device | grep -E '^ps $state |[wc]ctemp '",$rows); foreach ($rows as $row) { if (!$row) continue; $value = my_explode(':',$row,3); - $entry = str_replace(' ','',trim($value[0])); + $entry = trim($value[0]); switch ($entry){ case 'wctemp': case 'cctemp': $nvme[$entry] = $value[1] - 273; // kelvin -> celsius break; - case 'ps0': - case 'ps1': - case 'ps2': - case 'ps3': - case 'ps4': - case 'ps5': - $nvme[$entry] = number_format(strtok($value[2],'W'),2,$number[0]).' W'; + default: + $nvme['power'] = strtok($value[2],'W'); break; } } - $nvme['powerstate'] = hexdec(my_explode(':',exec("nvme get-feature /dev/$device -f 2"),3)[2]); - $nvme['powerstatevalue'] = _var($nvme,'ps'.$nvme['powerstate']); return $nvme; } // convert strftime to date format diff --git a/emhttp/plugins/dynamix/nchan/device_list b/emhttp/plugins/dynamix/nchan/device_list index bbb890d16..4966bd7f9 100755 --- a/emhttp/plugins/dynamix/nchan/device_list +++ b/emhttp/plugins/dynamix/nchan/device_list @@ -33,11 +33,16 @@ require_once "$docroot/webGui/include/Translations.php"; $locale_init = $locale; function initSum() { - return ['count'=>0, 'temp'=>0, 'fsSize'=>0, 'fsUsed'=>0, 'fsFree'=>0, 'ioReads'=>0, 'ioWrites'=>0, 'numReads'=>0, 'numWrites'=>0, 'numErrors'=>0]; + return ['count'=>0, 'temp'=>0, 'power'=>0, 'fsSize'=>0, 'fsUsed'=>0, 'fsFree'=>0, 'ioReads'=>0, 'ioWrites'=>0, 'numReads'=>0, 'numWrites'=>0, 'numErrors'=>0]; } function model($id) { return substr($id,0,strrpos($id,'_')); } +function power($power) { + global $display; + $number = _var($display,'number','.,'); + return $power ? ' / '.number_format($power,2,$number[0]).' W' : ''; +} function device_info(&$disk,$online) { global $pools, $var, $crypto; if (!$online || _var($disk,'fsStatus')!='Mounted' || (in_array(_var($disk,'type'),['Parity','Cache']) && (!in_array(_var($disk,'name'),$pools) || isSubpool(_var($disk,'name'))))) { @@ -115,12 +120,7 @@ function device_desc(&$disk) { $log = _var($var,'fsState')=='Started' ? ""._('Disk Log Information')."" : ""; - $powerstatevalue = ""; - if (_var($var,'fsState',)=='Started' && _var($disk,'transport')=='nvme') { - $nvme = get_nvme_powerstate(_var($disk,'device')); - $powerstatevalue = ' • '._var($nvme,'powerstatevalue','? W'); - } - return $log."".my_id(_var($disk,'id'))." - $size $unit ("._var($disk,'device').$powerstatevalue.")"; + return $log."".my_id(_var($disk,'id'))." - $size $unit ("._var($disk,'device').")"; } function assignment(&$disk) { global $var, $devs; @@ -180,6 +180,7 @@ function my_diskio($data) { } function array_offline(&$disk, $pool='') { global $var, $disks; + $disk['power'] ??= (_var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['power'] : 0); $echo = []; $warning = ''; $status = ['DISK_DSBL','DISK_INVALID','DISK_DSBL_NEW','DISK_NEW','DISK_WRONG']; $text = ""._('All existing data on this device will be OVERWRITTEN when array is Started').""; @@ -214,7 +215,7 @@ function array_offline(&$disk, $pool='') { case 'DISK_NEW': $echo[] = ""; $echo[] = ""; - $echo[] = ""; + $echo[] = ""; if ($warning) { $echo[] = ""; } else { @@ -241,6 +242,7 @@ function array_offline(&$disk, $pool='') { } function array_online(&$disk, $fstype='') { global $pools, $sum, $diskio; + $disk['power'] ??= (_var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['power'] : 0); $echo = []; $data = [0,0]; if (_var($disk,'device')) { @@ -253,6 +255,7 @@ function array_online(&$disk, $fstype='') { $sum['count']++; $sum['temp'] += $disk['temp']; } + $sum['power'] += _var($disk,'power',0); $sum['numReads'] += _var($disk,'numReads',0); $sum['numWrites'] += _var($disk,'numWrites',0); $sum['numErrors'] += _var($disk,'numErrors',0); @@ -281,7 +284,7 @@ function array_online(&$disk, $fstype='') { default: $echo[] = ""; $echo[] = ""; - $echo[] = ""; + $echo[] = ""; $echo[] = ""; $echo[] = ""; $echo[] = ""; @@ -293,6 +296,7 @@ function array_online(&$disk, $fstype='') { } function show_totals($text,$array,$name) { global $var, $display, $sum, $locale; + $number = _var($display,'number','.,'); $ctrl1 = "onclick=\"toggle_state('Device','$name','down')\""; $ctrl2 = "onclick=\"toggle_state('Device','$name','up')\""; $help1 = _('Spin Down').' '._(ucfirst(substr($name,0,-1))); @@ -301,7 +305,7 @@ function show_totals($text,$array,$name) { $echo[] = ""; $echo[] = ""; $echo[] = ""; - $echo[] = ""; + $echo[] = ""; $echo[] = ""; $echo[] = ""; $echo[] = ""; diff --git a/emhttp/plugins/dynamix/nchan/update_2 b/emhttp/plugins/dynamix/nchan/update_2 index 1a1fa8d9d..fe38056ee 100755 --- a/emhttp/plugins/dynamix/nchan/update_2 +++ b/emhttp/plugins/dynamix/nchan/update_2 @@ -160,9 +160,9 @@ function device_temp(&$disk, &$red, &$orange) { $spin = strpos(_var($disk,'color'),'blink')===false; $temp = _var($disk,'temp','*'); $nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['cctemp'] : -1; - $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme => 0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0)); + $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme>=0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0)); $nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['wctemp'] : -1; - $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme => 0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0)); + $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme>=0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0)); $top = $display['top'] ?? 120; $heat = false; $color = 'green'; if (exceed($temp,$max,$top)) { diff --git a/emhttp/plugins/dynamix/scripts/monitor b/emhttp/plugins/dynamix/scripts/monitor index 8ed8efbbc..e7e67878e 100755 --- a/emhttp/plugins/dynamix/scripts/monitor +++ b/emhttp/plugins/dynamix/scripts/monitor @@ -48,9 +48,9 @@ function check_temp(&$disk,$text,$info) { $named = no_tilde($name); $temp = _var($disk,'temp','*'); $nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['cctemp'] : -1; - $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme => 0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0)); + $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme>=0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0)); $nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['wctemp'] : -1; - $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme => 0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0)); + $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme>=0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0)); $warn = exceed($temp,$max,$top) ? 'alert' : (exceed($temp,$hot,$top) ? 'warning' : false); $item = 'temp'; $last = $saved[$item][$named] ?? 0; diff --git a/emhttp/plugins/dynamix/scripts/statuscheck b/emhttp/plugins/dynamix/scripts/statuscheck index e54fd7b18..fc7361513 100755 --- a/emhttp/plugins/dynamix/scripts/statuscheck +++ b/emhttp/plugins/dynamix/scripts/statuscheck @@ -95,9 +95,9 @@ function my_array(&$disk) { global $data,$display,$error0,$error1,$error2,$error3; $name = _var($disk,'name'); $nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['cctemp'] : -1; - $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme => 0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0)); + $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme>=0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0)); $nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['wctemp'] : -1; - $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme => 0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0)); + $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme>=0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0)); if (strpos(_var($disk,'status'),'_NP')!==false) return false; $temp = _var($disk,'temp'); if ($max>0 && $temp>=$max) {
_(Device)__(Identification)__(Temp)_._(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
_(Device)__(Identification)__(Temp)_ / _(Power)__(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
".device_info($disk,false)."".assignment($disk)."".my_temp(_var($disk,'temp','*'))."".my_temp(_var($disk,'temp','*')).power($disk['power'])."$warning".device_info($disk,true)."".device_desc($disk)."".my_temp(_var($disk,'temp','*'))."".my_temp(_var($disk,'temp','*')).power($disk['power'])."".my_diskio($data[0])."".my_number(_var($disk,'numReads',0))."".my_diskio($data[1])."".my_number(_var($disk,'numWrites',0))."".my_number(_var($disk,'numErrors',0))."
$help1$help2$text".($sum['count']>0 ? my_temp(round($sum['temp']/$sum['count'],1)) : '*')."".($sum['count']>0 ? my_temp(round($sum['temp']/$sum['count'],1)) : '*').power($sum['power'])."".my_diskio($sum['ioReads'])."".my_number($sum['numReads'])."".my_diskio($sum['ioWrites'])."".my_number($sum['numWrites'])."".my_number($sum['numErrors'])."