summaryrefslogtreecommitdiffstats
path: root/modules-available/systemstatus/page.inc.php
diff options
context:
space:
mode:
authorSimon Rettberg2023-07-18 14:21:40 +0200
committerSimon Rettberg2023-07-18 14:21:40 +0200
commit19429b86af83129059f15dab00ee4bb8a7b54fc2 (patch)
tree0b82fbfa3b4375c7ada06af4192da4186221348c /modules-available/systemstatus/page.inc.php
parent[news] Fix install: Falsely reported UPDATE_DONE every time (diff)
downloadslx-admin-19429b86af83129059f15dab00ee4bb8a7b54fc2.tar.gz
slx-admin-19429b86af83129059f15dab00ee4bb8a7b54fc2.tar.xz
slx-admin-19429b86af83129059f15dab00ee4bb8a7b54fc2.zip
[systemstatus] Improve coloring of disk space indicator, js tweaks
Diffstat (limited to 'modules-available/systemstatus/page.inc.php')
-rw-r--r--modules-available/systemstatus/page.inc.php45
1 files changed, 28 insertions, 17 deletions
diff --git a/modules-available/systemstatus/page.inc.php b/modules-available/systemstatus/page.inc.php
index 96b2c5c9..c97f6172 100644
--- a/modules-available/systemstatus/page.inc.php
+++ b/modules-available/systemstatus/page.inc.php
@@ -173,11 +173,11 @@ class Page_SystemStatus extends Page
User::assertPermission("show.overview.diskstat");
if (!SystemStatus::diskStat($systemUsage, $storeUsage, $currentSource, $wantedSource))
return;
- $data = ['system' => $this->convertDiskStat($systemUsage)];
+ $data = ['system' => $this->convertDiskStat($systemUsage, 3000)];
if ($wantedSource === false) { // Not configured yet, nothing to display
$data['notConfigured'] = true;
} elseif ($wantedSource === $currentSource) { // Fine and dandy
- $data['store'] = $this->convertDiskStat($storeUsage);
+ $data['store'] = $this->convertDiskStat($storeUsage, 250000);
} elseif ($currentSource === false) { // No current source, nothing mounted
$data['storeMissing'] = true;
} else { // Something else mounted
@@ -251,13 +251,16 @@ class Page_SystemStatus extends Page
}
$info = $this->sysInfo();
if (isset($info['MemTotal']) && isset($info['MemFree']) && isset($info['SwapTotal'])) {
+ $avail = $info['MemAvailable'] ?? ($info['MemFree'] + $info['Buffers'] + $info['Cached']);
$data['memTotal'] = Util::readableFileSize($info['MemTotal'] * 1024);
- $data['memFree'] = Util::readableFileSize(($info['MemFree'] + $info['Buffers'] + $info['Cached']) * 1024);
- $data['memPercent'] = 100 - round((($info['MemFree'] + $info['Buffers'] + $info['Cached']) / $info['MemTotal']) * 100);
+ $data['memFree'] = Util::readableFileSize($avail * 1024);
+ $data['memPercent'] = 100 - round(($avail / $info['MemTotal']) * 100);
$data['swapTotal'] = Util::readableFileSize($info['SwapTotal'] * 1024);
$data['swapUsed'] = Util::readableFileSize(($info['SwapTotal'] - $info['SwapFree']) * 1024);
$data['swapPercent'] = 100 - round(($info['SwapFree'] / $info['SwapTotal']) * 100);
- $data['swapWarning'] = ($data['swapPercent'] > 50 || $info['SwapFree'] < 400000);
+ if ($data['swapTotal'] > 0 && $data['memPercent'] > 75) {
+ $data['swapWarning'] = ($data['swapPercent'] > 80 || $info['SwapFree'] < 400000);
+ }
}
if (isset($info['CpuIdle']) && isset($info['CpuSystem']) && isset($info['CpuTotal'])) {
$data['cpuLoad'] = 100 - round(($info['CpuIdle'] / $info['CpuTotal']) * 100);
@@ -482,31 +485,39 @@ class Page_SystemStatus extends Page
echo '<pre>', htmlspecialchars($data, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'), '</pre>';
}
- private function convertDiskStat($stat)
+ private function convertDiskStat(array $stat, int $minFreeMb): array
{
- if (!is_array($stat))
- return false;
return [
'percent' => $stat['usedPercent'],
'size' => Util::readableFileSize($stat['sizeKb'] * 1024),
'free' => Util::readableFileSize($stat['freeKb'] * 1024),
- 'color' => $this->usageColor($stat['usedPercent']),
+ 'color' => $this->usageColor($stat, $minFreeMb),
'filesystem' => $stat['fileSystem'],
];
}
- private function usageColor($percent)
+ private function usageColor(array $stat, int $minFreeMb): string
{
- if ($percent <= 50) {
- $r = $b = $percent / 3;
- $g = (100 - $percent * (50 / 80));
- } elseif ($percent <= 70) {
- $r = 55 + ($percent - 50) * (30 / 20);
+ $freeMb = round($stat['freeKb'] / 1024);
+ // All good is half space free, or 4x the min free amount, whatever is more
+ $okFreeMb = max($minFreeMb * 4, round($stat['sizeKb']) / (1024 * 2));
+ if ($freeMb > $okFreeMb) {
+ $usedPercent = 0;
+ } elseif ($freeMb < $minFreeMb) {
+ $usedPercent = 100;
+ } else {
+ $usedPercent = 100 - round(($freeMb - $minFreeMb) / ($okFreeMb - $minFreeMb) * 100);
+ }
+ if ($usedPercent <= 50) {
+ $r = $b = $usedPercent / 3;
+ $g = (100 - $usedPercent * (50 / 80));
+ } elseif ($usedPercent <= 70) {
+ $r = 55 + ($usedPercent - 50) * (30 / 20);
$g = 60;
$b = 0;
} else {
- $r = ($percent - 70) / 3 + 90;
- $g = (100 - $percent) * (60 / 30);
+ $r = ($usedPercent - 70) / 3 + 90;
+ $g = (100 - $usedPercent) * (60 / 30);
$b = 0;
}
$r = dechex(round($r * 2.55));