Dashboard: add NVME power indicator

This commit is contained in:
bergware
2023-12-02 12:56:52 +01:00
parent 9663867b47
commit 28c58465da
4 changed files with 21 additions and 9 deletions

View File

@@ -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');?>

View File

@@ -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]+'");

View File

@@ -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>";

View File

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