mirror of
https://github.com/unraid/webgui.git
synced 2026-02-22 10:21:39 -06:00
Dashboard: add NVME power indicator
This commit is contained in:
@@ -562,7 +562,7 @@ if (!$group) {
|
||||
<a href='/Dashboard/Settings/DiskSettings' title="_(Go to disk settings)_"><i class='fa fa-fw fa-cog control'></i></a>
|
||||
</td></tr>
|
||||
<tr><td id='array_info'></td></tr>
|
||||
<tr class='header'><td><span class='w26'>_(Device)_</span><span class='w18'>_(Status)_</span><span class='w18'>_(Temp)_</span><span class='w18'>_(SMART)_</span><span class='w18'>_(Utilization)_</span></td></tr>
|
||||
<tr class='header'><td><span class='w26'>_(Device)_</span><span class='w18'>_(Status)_</span><span class='w18'>_(Temp)_ / _(Power)_</span><span class='w18'>_(SMART)_</span><span class='w18'>_(Utilization)_</span></td></tr>
|
||||
</tbody>
|
||||
|
||||
<?$i=0?>
|
||||
@@ -573,7 +573,7 @@ if (!$group) {
|
||||
<a href='/Dashboard/Settings/Device?name=<?=$pool?>' title="_(Go to disk settings)_"><i class='fa fa-fw fa-cog control'></i></a>
|
||||
</td></tr>
|
||||
<tr><td id='pool_info<?=$i++?>'></td></tr>
|
||||
<tr class='header'><td><span class='w26'>_(Device)_</span><span class='w18'>_(Status)_</span><span class='w18'>_(Temp)_</span><span class='w18'>_(SMART)_</span><span class='w18'>_(Utilization)_</span></td></tr>
|
||||
<tr class='header'><td><span class='w26'>_(Device)_</span><span class='w18'>_(Status)_</span><span class='w18'>_(Temp)_ / _(Power)_</span><span class='w18'>_(SMART)_</span><span class='w18'>_(Utilization)_</span></td></tr>
|
||||
</tbody>
|
||||
<?endforeach;?>
|
||||
|
||||
@@ -584,7 +584,7 @@ if (!$group) {
|
||||
<a href='/Dashboard/Settings/DiskSettings' title="_(Go to disk settings)_"><i class='fa fa-fw fa-cog control'></i></a>
|
||||
</td></tr>
|
||||
<tr><td id='devs_info'></td></tr>
|
||||
<tr class='header'><td><span class='w26'>_(Device)_</span><span class='w18'>_(Status)_</span><span class='w18'>_(Temp)_</span><span class='w18'>_(SMART)_</span><span class='w18'>_(Utilization)_</span></td></tr>
|
||||
<tr class='header'><td><span class='w26'>_(Device)_</span><span class='w18'>_(Status)_</span><span class='w18'>_(Temp)_ / _(Power)_</span><span class='w18'>_(SMART)_</span><span class='w18'>_(Utilization)_</span></td></tr>
|
||||
</tbody>
|
||||
<?endif;?>
|
||||
<?customTiles('column3');?>
|
||||
|
||||
@@ -132,6 +132,9 @@ function get_nvme_info($device, $info) {
|
||||
return exec("nvme id-ctrl /dev/$device | grep -Pom1 '^cctemp +: \K\d+'")-273;
|
||||
case 'wctemp':
|
||||
return exec("nvme id-ctrl /dev/$device | grep -Pom1 '^wctemp +: \K\d+'")-273;
|
||||
case 'state':
|
||||
$state = hexdec(exec("nvme get-feature /dev/$device -f2 | grep -Pom1 'value:\K0x\d+'"));
|
||||
return exec("nvme id-ctrl /dev/$device | grep -Pom1 '^ps +$state : \S+ \K\S+'");
|
||||
case 'power':
|
||||
$state = hexdec(exec("nvme get-feature /dev/$device -f2 | grep -Pom1 'value:\K0x\d+'"));
|
||||
return exec("smartctl -c /dev/$device | grep -Pom1 '^ *$state [+-] +\K[^W]+'");
|
||||
|
||||
@@ -38,7 +38,7 @@ function initSum() {
|
||||
function model($id) {
|
||||
return substr($id,0,strrpos($id,'_'));
|
||||
}
|
||||
function power($power) {
|
||||
function my_power($power) {
|
||||
global $display;
|
||||
$number = _var($display,'number','.,');
|
||||
return $power ? ' / '.number_format($power,2,$number[0]).' W' : '';
|
||||
@@ -215,7 +215,7 @@ function array_offline(&$disk, $pool='') {
|
||||
case 'DISK_NEW':
|
||||
$echo[] = "<td>".device_info($disk,false)."</td>";
|
||||
$echo[] = "<td>".assignment($disk)."</td>";
|
||||
$echo[] = "<td>".my_temp(_var($disk,'temp','*')).power($disk['power'])."</td>";
|
||||
$echo[] = "<td>".my_temp(_var($disk,'temp','*')).my_power($disk['power'])."</td>";
|
||||
if ($warning) {
|
||||
$echo[] = "<td colspan='7'>$warning</td>";
|
||||
} else {
|
||||
@@ -284,7 +284,7 @@ function array_online(&$disk, $fstype='') {
|
||||
default:
|
||||
$echo[] = "<td>".device_info($disk,true)."</td>";
|
||||
$echo[] = "<td>".device_desc($disk)."</td>";
|
||||
$echo[] = "<td>".my_temp(_var($disk,'temp','*')).power($disk['power'])."</td>";
|
||||
$echo[] = "<td>".my_temp(_var($disk,'temp','*')).my_power($disk['power'])."</td>";
|
||||
$echo[] = "<td><span class='diskio'>".my_diskio($data[0])."</span><span class='number'>".my_number(_var($disk,'numReads',0))."</span></td>";
|
||||
$echo[] = "<td><span class='diskio'>".my_diskio($data[1])."</span><span class='number'>".my_number(_var($disk,'numWrites',0))."</span></td>";
|
||||
$echo[] = "<td>".my_number(_var($disk,'numErrors',0))."</td>";
|
||||
@@ -305,7 +305,7 @@ function show_totals($text,$array,$name) {
|
||||
$echo[] = "<tr class='tr_last'>";
|
||||
$echo[] = "<td><a class='info'><i class='fa fa-fw fa-toggle-down control' $ctrl1></i><span>$help1</span></a><a class='info'><i class='fa fa-fw fa-toggle-up control' $ctrl2></i><span>$help2</span></a></td>";
|
||||
$echo[] = "<td><a class='static'><i class='icon-disks icon'></i></a><span></span>$text</td>";
|
||||
$echo[] = "<td>".($sum['count']>0 ? my_temp(round($sum['temp']/$sum['count'],1)) : '*').power($sum['power'])."</td>";
|
||||
$echo[] = "<td>".($sum['count']>0 ? my_temp(round($sum['temp']/$sum['count'],1)) : '*').my_power($sum['power'])."</td>";
|
||||
$echo[] = "<td><span class='diskio'>".my_diskio($sum['ioReads'])."</span><span class='number'>".my_number($sum['numReads'])."</span></td>";
|
||||
$echo[] = "<td><span class='diskio'>".my_diskio($sum['ioWrites'])."</span><span class='number'>".my_number($sum['numWrites'])."</span></td>";
|
||||
$echo[] = "<td>".my_number($sum['numErrors'])."</td>";
|
||||
|
||||
@@ -30,6 +30,12 @@ require_once "$docroot/webGui/include/Translations.php";
|
||||
// remember current language
|
||||
$locale_init = $locale;
|
||||
|
||||
function my_power($device, $power) {
|
||||
global $display;
|
||||
$number = _var($display,'number','.,');
|
||||
$state = strtr(get_nvme_info($device,'state'),['non-operational' => 'green', 'operational' => 'orange']);
|
||||
return " / <span class='$state'>".number_format($power,2,$number[0])." W</span>";
|
||||
}
|
||||
function my_clock($time) {
|
||||
if (!$time) return _('less than a minute');
|
||||
$days = floor($time/1440);
|
||||
@@ -156,7 +162,8 @@ function device_temp(&$disk, &$red, &$orange) {
|
||||
global $display;
|
||||
$spin = strpos(_var($disk,'color'),'blink')===false;
|
||||
$temp = _var($disk,'temp','*');
|
||||
[$hotNVME,$maxNVME] = _var($disk,'transport')=='nvme' ? get_nvme_info(_var($disk,'device'),'temp') : [-1,-1];
|
||||
$nvme = _var($disk,'transport')=='nvme';
|
||||
[$hotNVME,$maxNVME] = $nvme ? get_nvme_info(_var($disk,'device'),'temp') : [-1,-1];
|
||||
$hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($hotNVME>=0 ? $hotNVME : (_var($disk,'rotational',1)==0 && $display['hot']>0 ? $display['hot']+$display['ssd'] : $display['hot']));
|
||||
$max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($maxNVME>=0 ? $maxNVME : (_var($disk,'rotational',1)==0 && $display['max']>0 ? $display['max']+$display['ssd'] : $display['max']));
|
||||
$top = $display['top'] ?? 120;
|
||||
@@ -166,7 +173,9 @@ function device_temp(&$disk, &$red, &$orange) {
|
||||
} elseif (exceed($temp,$hot,$top)) {
|
||||
$heat = 'fire'; $color = 'orange'; $orange++;
|
||||
}
|
||||
return ($spin && $temp>0) ? "<span class='$color-text'>".my_temp($temp)."</span>".($heat ? "<i class='fa fa-$heat $color-text heat'></i>" : "") : "*";
|
||||
$device = _var($disk,'device');
|
||||
$power = $disk['power'] ?? ($nvme ? get_nvme_info($device,'power') : 0);
|
||||
return (($spin && $temp>0) ? "<span class='$color-text'>".my_temp($temp)."</span>".($heat ? "<i class='fa fa-$heat $color-text heat'></i>" : "") : "*").($nvme ? my_power($device, $power) : "");
|
||||
}
|
||||
function device_smart(&$disk, &$fail, &$smart) {
|
||||
global $numbers,$saved;
|
||||
|
||||
Reference in New Issue
Block a user