From da649ab9ffb11fce27bc9d4d362616a895648671 Mon Sep 17 00:00:00 2001 From: Daniel Kesselberg Date: Sat, 5 Sep 2020 18:38:20 +0200 Subject: [PATCH] Normalize memory to MB Signed-off-by: Daniel Kesselberg --- lib/OperatingSystems/DefaultOs.php | 8 ++------ lib/OperatingSystems/FreeBSD.php | 8 ++++---- lib/Resources/Memory.php | 32 +++++++++++++++++++++++++++++- tests/lib/DefaultOsTest.php | 10 +++++----- tests/lib/FreeBSDTest.php | 12 +++++------ 5 files changed, 48 insertions(+), 22 deletions(-) diff --git a/lib/OperatingSystems/DefaultOs.php b/lib/OperatingSystems/DefaultOs.php index e69c7f74..2c09091e 100644 --- a/lib/OperatingSystems/DefaultOs.php +++ b/lib/OperatingSystems/DefaultOs.php @@ -50,12 +50,8 @@ public function getMemory(): Memory { } foreach ($matches['Key'] as $i => $key) { - $value = (int)$matches['Value'][$i]; - $unit = $matches['Unit'][$i]; - - if ($unit === 'kB') { - $value *= 1024; - } + // Value is always in KB: https://github.com/torvalds/linux/blob/c70672d8d316ebd46ea447effadfe57ab7a30a50/fs/proc/meminfo.c#L58-L60 + $value = (int)$matches['Value'][$i] / 1024; switch ($key) { case 'MemTotal': diff --git a/lib/OperatingSystems/FreeBSD.php b/lib/OperatingSystems/FreeBSD.php index 4c27c6c5..bfca6a6d 100644 --- a/lib/OperatingSystems/FreeBSD.php +++ b/lib/OperatingSystems/FreeBSD.php @@ -53,8 +53,8 @@ public function getMemory(): Memory { $result = preg_match_all($pattern, $swapinfo, $matches); if ($result === 1) { - $data->setSwapTotal((int)$matches['Avail'][0]); - $data->setSwapFree($data->getSwapTotal() - (int)$matches['Used'][0]); + $data->setSwapTotal((int)$matches['Avail'][0] / 1024); + $data->setSwapFree(($data->getSwapTotal() - (int)$matches['Used'][0]) / 1024); } unset($matches, $result); @@ -67,8 +67,8 @@ public function getMemory(): Memory { $lines = explode("\n", $meminfo); if (count($lines) > 4) { - $data->setMemTotal((int)$lines[0]); - $data->setMemAvailable((int)$lines[1] * ((int)$lines[2] + (int)$lines[3] + (int)$lines[4])); + $data->setMemTotal((int)$lines[0] / 1024 / 1024); + $data->setMemAvailable(((int)$lines[1] * ((int)$lines[2] + (int)$lines[3] + (int)$lines[4])) / 1024 / 1024); } unset($lines); diff --git a/lib/Resources/Memory.php b/lib/Resources/Memory.php index 71bd6036..8123f5b2 100644 --- a/lib/Resources/Memory.php +++ b/lib/Resources/Memory.php @@ -32,42 +32,72 @@ class Memory { private $swapTotal = -1; private $swapFree = -1; + /** + * @return int in MB + */ public function getMemTotal(): int { return $this->memTotal; } + /** + * @param int $memTotal in MB + */ public function setMemTotal(int $memTotal): void { $this->memTotal = $memTotal; } + /** + * @return int in MB + */ public function getMemFree(): int { return $this->memFree; } + /** + * @param int $memFree in MB + */ public function setMemFree(int $memFree): void { $this->memFree = $memFree; } + /** + * @return int in MB + */ public function getMemAvailable(): int { return $this->memAvailable; } + /** + * @param int $memAvailable in MB + */ public function setMemAvailable(int $memAvailable): void { $this->memAvailable = $memAvailable; } + /** + * @return int in MB + */ public function getSwapTotal(): int { return $this->swapTotal; } + /** + * @param int $swapTotal in MB + */ public function setSwapTotal(int $swapTotal): void { $this->swapTotal = $swapTotal; } + /** + * @return int in MB + */ public function getSwapFree(): int { return $this->swapFree; } - + + /** + * @param int $swapFree in MB + */ public function setSwapFree(int $swapFree): void { $this->swapFree = $swapFree; } diff --git a/tests/lib/DefaultOsTest.php b/tests/lib/DefaultOsTest.php index 15de15b5..c2faf5bf 100644 --- a/tests/lib/DefaultOsTest.php +++ b/tests/lib/DefaultOsTest.php @@ -58,11 +58,11 @@ public function testGetMemory(): void { $memory = $this->os->getMemory(); - $this->assertEquals(16330252 * 1024, $memory->getMemTotal()); - $this->assertEquals(2443908 * 1024, $memory->getMemFree()); - $this->assertEquals(7675276 * 1024, $memory->getMemAvailable()); - $this->assertEquals(999420 * 1024, $memory->getSwapTotal()); - $this->assertEquals(917756 * 1024, $memory->getSwapFree()); + $this->assertEquals(15947, $memory->getMemTotal()); + $this->assertEquals(2386, $memory->getMemFree()); + $this->assertEquals(7495, $memory->getMemAvailable()); + $this->assertEquals(975, $memory->getSwapTotal()); + $this->assertEquals(896, $memory->getSwapFree()); } public function testGetMemoryNoData(): void { diff --git a/tests/lib/FreeBSDTest.php b/tests/lib/FreeBSDTest.php index 1b4c20ea..29286cb6 100644 --- a/tests/lib/FreeBSDTest.php +++ b/tests/lib/FreeBSDTest.php @@ -59,11 +59,11 @@ public function testGetMemory(): void { $memory = $this->os->getMemory(); - $this->assertEquals(68569628672, $memory->getMemTotal()); + $this->assertEquals(65393, $memory->getMemTotal()); $this->assertEquals(-1, $memory->getMemFree()); - $this->assertEquals(15809376256, $memory->getMemAvailable()); - $this->assertEquals(3744300, $memory->getSwapTotal()); - $this->assertEquals(3744300, $memory->getSwapFree()); + $this->assertEquals(15076, $memory->getMemAvailable()); + $this->assertEquals(3656, $memory->getSwapTotal()); + $this->assertEquals(3656, $memory->getSwapFree()); } public function testGetMemoryNoSwapinfo(): void { @@ -79,9 +79,9 @@ public function testGetMemoryNoSwapinfo(): void { $memory = $this->os->getMemory(); - $this->assertEquals(68569628672, $memory->getMemTotal()); + $this->assertEquals(65393, $memory->getMemTotal()); $this->assertEquals(-1, $memory->getMemFree()); - $this->assertEquals(15809376256, $memory->getMemAvailable()); + $this->assertEquals(15076, $memory->getMemAvailable()); $this->assertEquals(-1, $memory->getSwapTotal()); $this->assertEquals(-1, $memory->getSwapFree()); }