More enhancements and fixes based on feedback

- Disk settings: Separate SSD temperature thresholds
- Dashboard: more descriptive system resources + tooltip
- Wrappers: fix NVME power value retrieval
This commit is contained in:
bergware
2023-12-04 20:29:42 +01:00
parent 8b72f51544
commit 8dd6e6dd1b
15 changed files with 65 additions and 26 deletions
+16 -7
View File
@@ -263,13 +263,20 @@ foreach ($cpus as $pair) {
<span id="head_ram">_(RAM)_:<span class="head_bar"><span class='_sys0_ load'>0%</span><div class='usage-disk sys'><span id='_sys0_'></span><span></span></div></span></span><br></div>
<a href='/Dashboard/Tools/Processes' title="_(View Running Processes)_"><i class='fa fa-fw fa-info-circle control'></i></a>
</td></tr>
<tr><td><span class='w36'><i class='ups fa fa-compress'></i>_(Usable size)_: <?=my_scale($total,$unit,1,null,1024)." $unit"?></span><i class='ups fa fa-expand'></i>_(Maximum size)_: <?="$memory_maximum $unit"?><?=$low?'*':''?></td></tr>
<tr><td>
<span class='w26'><?if($zfs):?><div class='zfs'><i class='ups fa fa-fw fa-shield'></i>_(ZFS)_: <span id='zfs'></span></div><?else:?>&nbsp;<?endif;?></span>
<span class='w18 center'><span class='center'>_(RAM)_</span><div class='pie' id='sys0'><span class='sys0'></span><span class='var0'></span></div></span>
<span class='w18 center'><span class='center'>_(Flash)_</span><div class='pie' id='sys1'><span class='sys1'></span><span class='var1'></span></div></span>
<span class='w18 center'><span class='center'>_(Log)_</span><div class='pie' id='sys2'><span class='sys2'></span><span class='var2'></span></div></span>
<span class='w18 center'><span class='center'>_(Docker)_</span><div class='pie' id='sys3'><span class='sys3'></span><span class='var3'></span></div></span>
<span class='w26'><div class='more'>
<i class='ups fa fa-compress'></i>_(Usable size)_: <?=my_scale($total,$unit,1,null,1024)." $unit"?><br>
<i class='ups fa fa-expand'></i>_(Maximum size)_: <?="$memory_maximum $unit"?><?=$low?'*':''?><br><br>
<i class='ups fa fa-circle used'></i>_(Services)_: <span id='used'></span><br>
<?if($zfs):?>
<i class='ups fa fa-circle zfs'></i>_(ZFS cache)_: <span id='zfs'></span><br>
<?endif;?>
<i class='ups fa fa-circle free'></i>_(Free)_: <span id='free'></span><br>
</div></span>
<span class='w18 center'><span class='center'><a class='info hand none'>_(RAM)_<br>_(usage)_<span>_(Percentage of total used memory)_</span></a></span><div class='pie' id='sys0'><span class='sys0'></span><span class='var0'></span></div></span>
<span class='w18 center'><span class='center'><a class='info hand none'>_(Flash)_<br>_(device)_<span>_(Percentage usage of flash device)_</span></a></span><div class='pie' id='sys1'><span class='sys1'></span><span class='var1'></span></div></span>
<span class='w18 center'><span class='center'><a class='info hand none'>_(Log)_<br>_(filesystem)_<span>_(Percentage usage of LOG file system)_</span></a></span><div class='pie' id='sys2'><span class='sys2'></span><span class='var2'></span></div></span>
<span class='w18 center'><span class='center'><a class='info hand none'>_(Docker)_<br>_(vDisk)_<span>_(Percentage usage of Docker image)_</span></a></span><div class='pie' id='sys3'><span class='sys3'></span><span class='var3'></span></div></span>
</td></tr>
</tbody>
@@ -1484,8 +1491,10 @@ dashboard.on('message',function(msg,meta) {
var load = v[0].slice(0,-1);
$('.sys'+k).text(v[0]).css({color:fontColor(load,<?=$display['critical']?>,<?=$display['warning']?>)});
if (k == 0) {
$('#used').text(v[4]);
$('#free').text(v[5]);
<?if ($zfs):?>
$('#zfs').text(v[4]+' ('+v[3]+')');
$('#zfs').text(v[6]);
<?endif;?>
var color = setColor(load,<?=$display['critical']?>,<?=$display['warning']?>);
$('._sys0_').text(v[0]);
+13 -1
View File
@@ -96,7 +96,7 @@ function makeTemp(&$disk, $zone) {
case 'hot': $nvme = 'wctemp'; break;
case 'max': $nvme = 'cctemp'; break;
}
return _var($disk,'transport')=='nvme' ? get_nvme_info(_var($disk,'device'),$nvme) : (_var($disk,'rotational',1)==0 && $display[$zone]>0 ? $display[$zone]+$display['ssd'] : $display[$zone]);
return _var($disk,'transport')=='nvme' ? get_nvme_info(_var($disk,'device'),$nvme) : (_var($disk,'rotational',1)==0 && $display["{$zone}ssd"]>=0 ? $display["{$zone}ssd"] : $display[$zone]);
}
function maintenance_mode() {
global $var;
@@ -1186,12 +1186,24 @@ _(xfs_repair status)_:
<input type="hidden" name="#cleanup" value="true">
<input type="hidden" name="smEvents" value="">
<input type="hidden" name="smGlue" value="<?=_var($var,'smGlue')?>">
<?if (_var($disk,'rotational',1)==1):?>
_(Warning disk temperature threshold)_ (&deg;<?=_var($display,'unit','C')?>):
<?elseif (_var($disk,'transport')=='nvme'):?>
_(Warning NVME temperature threshold)_ (&deg;<?=_var($display,'unit','C')?>):
<?else:?>
_(Warning SSD temperature threshold)_ (&deg;<?=_var($display,'unit','C')?>):
<?endif;?>
: <input type="number" min="0" max="300" name="hotTemp" class="narrow" value="<?=displayTemp(_var($disk,'hotTemp'))?>" placeholder="<?=displayTemp(makeTemp($disk,'hot'))?>">
:info_warning_temp_help:
<?if (_var($disk,'rotational',1)==1):?>
_(Critical disk temperature threshold)_ (&deg;<?=_var($display,'unit','C')?>):
<?elseif (_var($disk,'transport')=='nvme'):?>
_(Critical NVME temperature threshold)_ (&deg;<?=_var($display,'unit','C')?>):
<?else:?>
_(Critical SSD temperature threshold)_ (&deg;<?=_var($display,'unit','C')?>):
<?endif;?>
: <input type="number" min="0" max="300" name="maxTemp" class="narrow" value="<?=displayTemp(_var($disk,'maxTemp'))?>" placeholder="<?=displayTemp(makeTemp($disk,'max'))?>">
:info_critical_temp_help:
+8 -3
View File
@@ -244,10 +244,15 @@ _(Default critical disk temperature threshold)_ (&deg;<?=_var($display,'unit','C
:disk_default_critical_temperature_help:
_(Default SSD offset temperature)_ (&deg;<?=_var($display,'unit','C')?>):
: <input type="number" min="0" max="300" name="display_ssd" class="narrow" value="<?=displayTemp($display['ssd'])?>" placeholder="<?=displayTemp($default['display']['ssd'])?>">
_(Default warning SSD temperature threshold)_ (&deg;<?=_var($display,'unit','C')?>):
: <input type="number" min="0" max="300" name="display_hotssd" class="narrow" value="<?=displayTemp($display['hotssd'])?>" placeholder="<?=displayTemp($default['display']['hotssd'])?>">
:ssd_default_disk_offset_temperature_help:
:ssd_default_warning_temperature_help:
_(Default critical SSD temperature threshold)_ (&deg;<?=_var($display,'unit','C')?>):
: <input type="number" min="0" max="300" name="display_maxssd" class="narrow" value="<?=displayTemp($display['maxssd'])?>" placeholder="<?=displayTemp($default['display']['maxssd'])?>">
:ssd_default_critical_temperature_help:
&nbsp;
: <input type="submit" name="changeDisk" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()">
+2 -1
View File
@@ -24,7 +24,8 @@ warning="70"
critical="90"
hot="45"
max="55"
ssd="15"
hotssd="60"
maxssd="70"
theme="white"
locale=""
raw=""
+2 -2
View File
@@ -59,8 +59,8 @@ case "attributes":
$events = explode('|',get_value($disk,'smEvents',$numbers));
extract(parse_plugin_cfg('dynamix',true));
[$hotNVME,$maxNVME] = _var($disk,'transport')=='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']));
$hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($hotNVME>=0 ? $hotNVME : (_var($disk,'rotational',1)==0 && $display['hotssd']>=0 ? $display['hotssd'] : $display['hot']));
$max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($maxNVME>=0 ? $maxNVME : (_var($disk,'rotational',1)==0 && $display['maxssd']>=0 ? $display['maxssd'] : $display['max']));
$top = $_POST['top'] ?? 120;
$empty = true;
exec("smartctl -n standby -A $type ".escapeshellarg("/dev/$port"),$output);
+2 -2
View File
@@ -133,10 +133,10 @@ function get_nvme_info($device, $info) {
case 'wctemp':
return exec("nvme id-ctrl /dev/$device 2>/dev/null | grep -Pom1 '^wctemp +: \K\d+'")-273;
case 'state':
$state = hexdec(exec("nvme get-feature /dev/$device -f2 2>/dev/null | grep -Pom1 'value:\K\S+'"));
$state = exec("nvme get-feature /dev/$device -f2 2>/dev/null | grep -Pom1 'value:.+\K.$'");
return exec("nvme id-ctrl /dev/$device 2>/dev/null | grep -Pom1 '^ps +$state : mp:\K\S+ \S+'");
case 'power':
$state = hexdec(exec("nvme get-feature /dev/$device -f2 2>/dev/null | grep -Pom1 'value:\K\S+'"));
$state = exec("nvme get-feature /dev/$device -f2 2>/dev/null | grep -Pom1 'value:.+\K.$'");
return exec("smartctl -c /dev/$device 2>/dev/null | grep -Pom1 '^ *$state [+-] +\K[^W]+'");
}
}
+5 -3
View File
@@ -31,10 +31,12 @@ while (true) {
exec("sensors -uA 2>/dev/null|grep -Po 'fan\d_input: \K\d+'",$fans);
$zfs = exec("awk '/^size/{print \$3;exit}' /proc/spl/kstat/zfs/arcstats 2>/dev/null")?:0;
[$total,$free] = $memory;
$meminfo[] = max(round(100*(1-$free/$total)),0)."%";
$meminfo[] = round(100*(1-$free/$total))."%";
$meminfo[] = my_scale($total-$free,$unit,null,-1,1024)." $unit";
$meminfo[] = max(round(100*($total-$free-$zfs)/$total),0)."%";
$meminfo[] = min(round(100*$zfs/$total),100)."%";
$meminfo[] = round(100*($total-$free-$zfs)/$total)."%";
$meminfo[] = round(100*$zfs/$total)."%";
$meminfo[] = my_scale($total-$free-$zfs,$unit,null,-1,1024)." $unit";
$meminfo[] = my_scale($free,$unit,null,-1,1024)." $unit";
$meminfo[] = my_scale($zfs,$unit,null,-1,1024)." $unit\0";
foreach ($df as $data) {
[$pcent,$used] = explode(' ',$data);
+2 -2
View File
@@ -166,8 +166,8 @@ function device_temp(&$disk, &$red, &$orange) {
$dev = _var($disk,'device');
$nvme = _var($disk,'transport')=='nvme';
[$hotNVME,$maxNVME] = $nvme ? get_nvme_info($dev,'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']));
$hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($hotNVME>=0 ? $hotNVME : (_var($disk,'rotational',1)==0 && $display['hotssd']>=0 ? $display['hotssd'] : $display['hot']));
$max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($maxNVME>=0 ? $maxNVME : (_var($disk,'rotational',1)==0 && $display['maxssd']>=0 ? $display['maxssd'] : $display['max']));
$top = $display['top'] ?? 120;
$color= 'green';
if (exceed($temp,$max,$top)) {
+2 -2
View File
@@ -48,8 +48,8 @@ function check_temp(&$disk,$text,$info) {
$named = no_tilde($name);
$temp = _var($disk,'temp','*');
[$hotNVME,$maxNVME] = _var($disk,'transport')=='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']));
$hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($hotNVME>=0 ? $hotNVME : (_var($disk,'rotational',1)==0 && $display['hotssd']>=0 ? $display['hotssd'] : $display['hot']));
$max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($maxNVME>=0 ? $maxNVME : (_var($disk,'rotational',1)==0 && $display['maxssd']>=0 ? $display['maxssd'] : $display['max']));
$warn = exceed($temp,$max,$top) ? 'alert' : (exceed($temp,$hot,$top) ? 'warning' : false);
$item = 'temp';
$last = $saved[$item][$named] ?? 0;
+2 -2
View File
@@ -95,8 +95,8 @@ function my_array(&$disk) {
global $data,$display,$error0,$error1,$error2,$error3;
$name = _var($disk,'name');
[$hotNVME,$maxNVME] = _var($disk,'transport')=='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']));
$hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($hotNVME>=0 ? $hotNVME : (_var($disk,'rotational',1)==0 && $display['hotssd']>=0 ? $display['hotssd'] : $display['hot']));
$max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($maxNVME>=0 ? $maxNVME : (_var($disk,'rotational',1)==0 && $display['maxssd']>=0 ? $display['maxssd'] : $display['max']));
if (strpos(_var($disk,'status'),'_NP')!==false) return false;
$temp = _var($disk,'temp');
if ($max>0 && $temp>=$max) {
@@ -1,2 +1,4 @@
div.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(580px,1fr));column-gap:20px}
div.pie::after{background-color:#d7dbdd}
i.free{color:#eceaec}
i.used{color:#606e7f}
@@ -1,2 +1,4 @@
div.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(610px,1fr));column-gap:20px}
div.pie::after{background-color:#262626}
i.free{color:#444444}
i.used{color:#787878}
@@ -1,2 +1,4 @@
div.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(580px,1fr));column-gap:20px}
div.pie::after{background-color:#212f3d}
i.free{color:#232523}
i.used{color:#606e7f}
@@ -1,2 +1,4 @@
div.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(610px,1fr));column-gap:20px}
div.pie::after{background-color:#f7f9f9}
i.free{color:#dcdcdc}
i.used{color:#a8a8a8}
+3 -1
View File
@@ -35,6 +35,7 @@ span.w26{min-width:26%;max-width:26%;display:inline-block;float:left;overflow:hi
span.w36{min-width:36%;max-width:36%;display:inline-block;float:left;overflow:hidden;text-overflow:ellipsis}
span.w44{min-width:44%;max-width:44%;display:inline-block;float:left;overflow:hidden;text-overflow:ellipsis}
span.w72{min-width:72%;max-width:72%;display:inline-block;float:left;overflow:hidden;text-overflow:ellipsis}
span.w18:hover{overflow:visible}
span.center{display:block;width:96px;text-align:center;margin:4px 0 8px 0}
select#cpuline,select#netline{border:none;padding:0 12px 0 0}
select[name=enter_share],select[name=enter_user]{margin-top:0;float:none}
@@ -70,5 +71,6 @@ table.snapshot{margin-top:0}
div.pie{height:96px;width:96px;border-radius:50%;display:flex;justify-content:center;align-items:center}
div.pie::after{content:'';position:absolute;height:72px;width:72px;border-radius:50%}
div.pie span{z-index:2;font-size:1.6rem;font-weight:bold}
div.zfs{margin-top:74px;color:#d4ac0d;text-align:right;padding-right:30px}
div.more{margin-top:8px}
i.zfs{color:#d4ac0d}
.var0,.var1,.var2,.var3{display:none;font-size:1.3rem!important}