From 7b06f101932bb923c18521da8649ea8b29c9c883 Mon Sep 17 00:00:00 2001 From: bergware Date: Mon, 4 Dec 2023 13:28:00 +0100 Subject: [PATCH] Dashboard: add hover feature to system resources --- emhttp/plugins/dynamix/DashStats.page | 19 ++++---- .../plugins/dynamix/include/DashboardApps.php | 13 ------ emhttp/plugins/dynamix/nchan/update_1 | 46 +++++++++++++++---- emhttp/plugins/dynamix/sheets/DashStats.css | 7 +-- 4 files changed, 51 insertions(+), 34 deletions(-) diff --git a/emhttp/plugins/dynamix/DashStats.page b/emhttp/plugins/dynamix/DashStats.page index 1c3a2e7be..4e6963d5c 100644 --- a/emhttp/plugins/dynamix/DashStats.page +++ b/emhttp/plugins/dynamix/DashStats.page @@ -266,10 +266,10 @@ foreach ($cpus as $pair) { _(Usable size)_: _(Maximum size)_:
_(ZFS)_:
 
-_(RAM)_
-_(Flash)_
-_(Log)_
-_(Docker)_
+_(RAM)_
+_(Flash)_
+_(Log)_
+_(Docker)_
@@ -1185,6 +1185,10 @@ function addProperties() { $(this).find('td:first').prepend(""); }); $('div.frame tr').attr('title',''); + $('div#sys0').hover(function(){$('.sys0').hide();$('.var0').show();},function(){$('.sys0').show();$('.var0').hide();}); + $('div#sys1').hover(function(){$('.sys1').hide();$('.var1').show();},function(){$('.sys1').show();$('.var1').hide();}); + $('div#sys2').hover(function(){$('.sys2').hide();$('.var2').show();},function(){$('.sys2').show();$('.var2').hide();}); + $('div#sys3').hover(function(){$('.sys3').hide();$('.var3').show();},function(){$('.sys3').show();$('.var3').hide();}); } function showContent() { var count = {'db-box1':$('table#db-box1 tbody').length, 'db-box2':$('table#db-box2 tbody').length, 'db-box3':$('table#db-box3 tbody').length} @@ -1480,17 +1484,16 @@ dashboard.on('message',function(msg,meta) { $('.sys'+k).text(v[0]).css({color:fontColor(v[0].slice(0,-1),,)}); if (k == 0) { - $('#zfs').text(v[2]); + $('#zfs').text(v[3]); var color = setColor(v[0].slice(0,-1),,); - // header $('._sys0_').text(v[0]); $('#_sys0_').finish().animate({width:v[0]},{step:function(){$('#_sys0_').css('overflow','visible').removeClass().addClass(color);}}); - // body - $('#sys0').css({background:'conic-gradient( 0% '+v[1]+', '+v[1]+' '+v[0]+', '+v[0]+' 100%'}); + $('#sys0').css({background:'conic-gradient( 0% '+v[2]+', '+v[2]+' '+v[0]+', '+v[0]+' 100%'}); } else { $('#sys'+k).css({background:'conic-gradient( 0% '+v[0]+', '+v[0]+' 100%'}); } + $('.var'+k).text(v[1]); }); // fans rpm diff --git a/emhttp/plugins/dynamix/include/DashboardApps.php b/emhttp/plugins/dynamix/include/DashboardApps.php index 7f9b7fe33..813178a3f 100644 --- a/emhttp/plugins/dynamix/include/DashboardApps.php +++ b/emhttp/plugins/dynamix/include/DashboardApps.php @@ -21,19 +21,6 @@ require_once "$docroot/plugins/dynamix.vm.manager/include/libvirt_helpers.php"; $_SERVER['REQUEST_URI'] = 'dashboard'; require_once "$docroot/webGui/include/Translations.php"; -if (isset($_POST['sys'])) { - switch ($_POST['sys']) { - case 0: $size = exec("awk '/^MemTotal/{t=$2}/^MemAvailable/{a=$2}END{print (t-a)*1024}' /proc/meminfo 2>/dev/null"); break; - case 1: $size = exec("awk '/^size/{print \$3;exit}' /proc/spl/kstat/zfs/arcstats 2>/dev/null"); break; - case 2: $size = exec("df --output=used /boot 2>/dev/null|awk '$1!=\"Used\" {print $1*1024}'"); break; - case 3: $size = exec("df --output=used /var/log 2>/dev/null|awk '$1!=\"Used\" {print $1*1024}'"); break; - case 4: $size = exec("df --output=used /var/lib/docker 2>/dev/null|awk '$1!=\"Used\" {print $1*1024}'"); break; - default: $size = 0; - } - extract(parse_plugin_cfg('dynamix',true)); - die(my_scale($size,$unit,null,-1,1024)." $unit"); -} - if ($_POST['docker']) { $user_prefs = $dockerManPaths['user-prefs']; $DockerClient = new DockerClient(); diff --git a/emhttp/plugins/dynamix/nchan/update_1 b/emhttp/plugins/dynamix/nchan/update_1 index 0f11a4d6a..7e92633c4 100755 --- a/emhttp/plugins/dynamix/nchan/update_1 +++ b/emhttp/plugins/dynamix/nchan/update_1 @@ -14,25 +14,37 @@ /dev/null|grep -Po 'fan\d_input: \K\d+'",$rpms); - $zfs = (exec("awk '/^size/{print \$3;exit}' /proc/spl/kstat/zfs/arcstats 2>/dev/null")?:0)/1024; + unset($memory,$df,$zfs,$fans,$lsof,$meminfo,$sysinfo); + exec("awk '/^Mem(Total|Available)/{print $2*1024}' /proc/meminfo",$memory); + exec("df --output=pcent,used /boot /var/log /var/lib/docker|awk '(NR>1){print $1,$2*1024}'",$df); + 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; - $info = max(round(100*(1-$free/$total)),0)."%;".max(round(100*($total-$free-$zfs)/$total),0)."%;".min(round(100*$zfs/$total),100)."%\0".implode("\0",$sys); - $rpms = count($rpms) ? implode(" RPM\0",$rpms).' RPM' : ''; + $meminfo[] = max(round(100*(1-$free/$total)),0)."%"; + $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)."%\0"; + foreach ($df as $data) { + [$pcent,$used] = explode(' ',$data); + $sysinfo[] = $pcent.';'.my_scale($used,$unit,null,-1,1024)." $unit"; + } + $fans = count($fans) ? implode(" RPM\0",$fans).' RPM' : ''; $name = array_keys((array)parse_ini_file("$varroot/shares.ini")); exec("LANG='en_US.UTF8' lsof -Owl /mnt/disk[0-9]* 2>/dev/null|awk '/^shfs/ && \$0!~/\.AppleD(B|ouble)/ && \$5==\"REG\"'|awk -F/ '{print \$4}'",$lsof); $counts = array_count_values($lsof); $count = []; foreach ($name as $share) $count[] = $counts[$share] ?? 0; - $count = implode("\0",$count); - - $echo = "$info\1$rpms\1$count"; + $echo = implode(";",$meminfo).implode("\0",$sysinfo)."\1$fans\1".implode("\0",$count); $md5_new = md5($echo,true); if ($md5_new !== $md5_old) { publish('update1', $echo); @@ -41,3 +53,17 @@ while (true) { sleep(5); } ?> + +if (isset($_POST['sys'])) { + switch ($_POST['sys']) { + case 0: $size = exec("awk '/^MemTotal/{t=$2}/^MemAvailable/{a=$2}END{print (t-a)*1024}' /proc/meminfo 2>/dev/null"); break; + case 1: $size = exec("awk '/^size/{print \$3;exit}' /proc/spl/kstat/zfs/arcstats 2>/dev/null"); break; + case 2: $size = exec("df --output=used /boot 2>/dev/null|awk '$1!=\"Used\" {print $1*1024}'"); break; + case 3: $size = exec("df --output=used /var/log 2>/dev/null|awk '$1!=\"Used\" {print $1*1024}'"); break; + case 4: $size = exec("df --output=used /var/lib/docker 2>/dev/null|awk '$1!=\"Used\" {print $1*1024}'"); break; + default: $size = 0; + } + extract(parse_plugin_cfg('dynamix',true)); + die(my_scale($size,$unit,null,-1,1024)." $unit"); +} + diff --git a/emhttp/plugins/dynamix/sheets/DashStats.css b/emhttp/plugins/dynamix/sheets/DashStats.css index 1509096fa..2a518af42 100644 --- a/emhttp/plugins/dynamix/sheets/DashStats.css +++ b/emhttp/plugins/dynamix/sheets/DashStats.css @@ -67,7 +67,8 @@ input[value=Edit]{margin:12px 0 0 0;padding:5px 10px} #current_date{font-size:1.3rem;margin-left:18px} table.snapshot{margin-top:0} .switch-button-background{margin-top:4px!important} -div.pie{height:90px;width:90px;border-radius:50%;display:flex;justify-content:center;align-items:center} -div.pie::after{content:'';position:absolute;height:66px;width:66px;border-radius:50%} +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:70px;color:#d4ac0d;text-align:right;padding-right:30px} +div.zfs{margin-top:74px;color:#d4ac0d;text-align:right;padding-right:30px} +.var0,.var1,.var2,.var3{display:none;font-size:1.3rem!important}