From c2b12019ee8d36a3c645853063fa8f0d7a8be162 Mon Sep 17 00:00:00 2001 From: Baptiste Langlade Date: Thu, 8 May 2025 14:58:45 +0200 Subject: [PATCH 1/5] remove duplicated code --- src/Server/Memory/Bytes.php | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/src/Server/Memory/Bytes.php b/src/Server/Memory/Bytes.php index ba7682b..2273bf5 100644 --- a/src/Server/Memory/Bytes.php +++ b/src/Server/Memory/Bytes.php @@ -3,6 +3,7 @@ namespace Innmind\Server\Status\Server\Memory; +use Innmind\IO\Stream\Size; use Innmind\Validation\Is; use Innmind\Immutable\{ Str, @@ -50,29 +51,7 @@ public function toInt(): int public function toString(): string { - return match (true) { - $this->value < self::BYTES => $this->value.'B', - $this->value < self::KILOBYTES => \sprintf( - '%sKB', - \round($this->value/self::BYTES, 3), - ), - $this->value < self::MEGABYTES => \sprintf( - '%sMB', - \round($this->value/self::KILOBYTES, 3), - ), - $this->value < self::GIGABYTES => \sprintf( - '%sGB', - \round($this->value/self::MEGABYTES, 3), - ), - $this->value < self::TERABYTES => \sprintf( - '%sTB', - \round($this->value/self::GIGABYTES, 3), - ), - $this->value < self::PETABYTES => \sprintf( - '%sPB', - \round($this->value/self::TERABYTES, 3), - ), - }; + return Size::of($this->value)->toString(); } /** From 5306f277b79b107b42f21fe984c4502010be1693 Mon Sep 17 00:00:00 2001 From: Baptiste Langlade Date: Thu, 8 May 2025 15:03:25 +0200 Subject: [PATCH 2/5] use promoted properties --- src/EnvironmentPath.php | 8 +++----- src/Facade/Cpu/LinuxFacade.php | 8 +++----- src/Facade/Cpu/OSXFacade.php | 8 +++----- src/Facade/Memory/LinuxFacade.php | 8 +++----- src/Facade/Memory/OSXFacade.php | 11 ++++------- src/Server/Disk/LoggerDisk.php | 11 ++++------- src/Server/Disk/UnixDisk.php | 8 +++----- src/Server/Processes/LoggerProcesses.php | 11 ++++------- src/Server/Processes/UnixProcesses.php | 11 ++++------- src/Servers/Logger.php | 11 ++++------- 10 files changed, 35 insertions(+), 60 deletions(-) diff --git a/src/EnvironmentPath.php b/src/EnvironmentPath.php index 83306fa..a59edbb 100644 --- a/src/EnvironmentPath.php +++ b/src/EnvironmentPath.php @@ -8,11 +8,9 @@ */ final class EnvironmentPath { - private string $value; - - private function __construct(string $value) - { - $this->value = $value; + private function __construct( + private string $value, + ) { } /** diff --git a/src/Facade/Cpu/LinuxFacade.php b/src/Facade/Cpu/LinuxFacade.php index 30749ab..4c35e87 100644 --- a/src/Facade/Cpu/LinuxFacade.php +++ b/src/Facade/Cpu/LinuxFacade.php @@ -25,11 +25,9 @@ */ final class LinuxFacade { - private Processes $processes; - - public function __construct(Processes $processes) - { - $this->processes = $processes; + public function __construct( + private Processes $processes, + ) { } /** diff --git a/src/Facade/Cpu/OSXFacade.php b/src/Facade/Cpu/OSXFacade.php index 3a09b94..b6d92a0 100644 --- a/src/Facade/Cpu/OSXFacade.php +++ b/src/Facade/Cpu/OSXFacade.php @@ -25,11 +25,9 @@ */ final class OSXFacade { - private Processes $processes; - - public function __construct(Processes $processes) - { - $this->processes = $processes; + public function __construct( + private Processes $processes, + ) { } /** diff --git a/src/Facade/Memory/LinuxFacade.php b/src/Facade/Memory/LinuxFacade.php index 3a8c7a4..942a8f4 100644 --- a/src/Facade/Memory/LinuxFacade.php +++ b/src/Facade/Memory/LinuxFacade.php @@ -32,11 +32,9 @@ final class LinuxFacade 'SwapCached' => 'swap', ]; - private Processes $processes; - - public function __construct(Processes $processes) - { - $this->processes = $processes; + public function __construct( + private Processes $processes, + ) { } /** diff --git a/src/Facade/Memory/OSXFacade.php b/src/Facade/Memory/OSXFacade.php index a094fab..32cb132 100644 --- a/src/Facade/Memory/OSXFacade.php +++ b/src/Facade/Memory/OSXFacade.php @@ -24,13 +24,10 @@ */ final class OSXFacade { - private Processes $processes; - private EnvironmentPath $path; - - public function __construct(Processes $processes, EnvironmentPath $path) - { - $this->processes = $processes; - $this->path = $path; + public function __construct( + private Processes $processes, + private EnvironmentPath $path, + ) { } /** diff --git a/src/Server/Disk/LoggerDisk.php b/src/Server/Disk/LoggerDisk.php index cc3bd7c..0368c0c 100644 --- a/src/Server/Disk/LoggerDisk.php +++ b/src/Server/Disk/LoggerDisk.php @@ -15,13 +15,10 @@ final class LoggerDisk implements Disk { - private Disk $disk; - private LoggerInterface $logger; - - private function __construct(Disk $disk, LoggerInterface $logger) - { - $this->disk = $disk; - $this->logger = $logger; + private function __construct( + private Disk $disk, + private LoggerInterface $logger, + ) { } /** diff --git a/src/Server/Disk/UnixDisk.php b/src/Server/Disk/UnixDisk.php index 2f180e0..4989123 100644 --- a/src/Server/Disk/UnixDisk.php +++ b/src/Server/Disk/UnixDisk.php @@ -34,11 +34,9 @@ final class UnixDisk implements Disk 'Mounted' => 'mountPoint', ]; - private Processes $processes; - - private function __construct(Processes $processes) - { - $this->processes = $processes; + private function __construct( + private Processes $processes, + ) { } /** diff --git a/src/Server/Processes/LoggerProcesses.php b/src/Server/Processes/LoggerProcesses.php index 88d7f46..2a7e808 100644 --- a/src/Server/Processes/LoggerProcesses.php +++ b/src/Server/Processes/LoggerProcesses.php @@ -17,13 +17,10 @@ final class LoggerProcesses implements Processes { - private Processes $processes; - private LoggerInterface $logger; - - private function __construct(Processes $processes, LoggerInterface $logger) - { - $this->processes = $processes; - $this->logger = $logger; + private function __construct( + private Processes $processes, + private LoggerInterface $logger, + ) { } /** diff --git a/src/Server/Processes/UnixProcesses.php b/src/Server/Processes/UnixProcesses.php index 2a79ff9..788641e 100644 --- a/src/Server/Processes/UnixProcesses.php +++ b/src/Server/Processes/UnixProcesses.php @@ -28,13 +28,10 @@ final class UnixProcesses implements Processes { - private Clock $clock; - private Control\Processes $processes; - - private function __construct(Clock $clock, Control\Processes $processes) - { - $this->clock = $clock; - $this->processes = $processes; + private function __construct( + private Clock $clock, + private Control\Processes $processes, + ) { } /** diff --git a/src/Servers/Logger.php b/src/Servers/Logger.php index bf33746..48295ed 100644 --- a/src/Servers/Logger.php +++ b/src/Servers/Logger.php @@ -14,13 +14,10 @@ final class Logger implements Server { - private Server $server; - private LoggerInterface $logger; - - private function __construct(Server $server, LoggerInterface $logger) - { - $this->server = $server; - $this->logger = $logger; + private function __construct( + private Server $server, + private LoggerInterface $logger, + ) { } public static function of(Server $server, LoggerInterface $logger): self From 00553f712df2b1a810929946168ef89c2014ea96 Mon Sep 17 00:00:00 2001 From: Baptiste Langlade Date: Thu, 8 May 2025 15:07:12 +0200 Subject: [PATCH 3/5] remove classes suffix --- src/Server/Disk/{LoggerDisk.php => Logger.php} | 2 +- src/Server/Disk/{UnixDisk.php => Unix.php} | 2 +- .../Processes/{LoggerProcesses.php => Logger.php} | 2 +- src/Server/Processes/{UnixProcesses.php => Unix.php} | 2 +- src/Servers/Linux.php | 10 ++++------ src/Servers/Logger.php | 4 ++-- src/Servers/OSX.php | 10 ++++------ tests/Server/Disk/LoggerDiskTest.php | 8 ++++---- tests/Server/Disk/UnixDiskTest.php | 4 ++-- tests/Server/Processes/LoggerProcessesTest.php | 8 ++++---- tests/Server/Processes/UnixProcessesTest.php | 4 ++-- tests/Servers/LoggerTest.php | 4 ++-- 12 files changed, 28 insertions(+), 32 deletions(-) rename src/Server/Disk/{LoggerDisk.php => Logger.php} (97%) rename src/Server/Disk/{UnixDisk.php => Unix.php} (99%) rename src/Server/Processes/{LoggerProcesses.php => Logger.php} (97%) rename src/Server/Processes/{UnixProcesses.php => Unix.php} (99%) diff --git a/src/Server/Disk/LoggerDisk.php b/src/Server/Disk/Logger.php similarity index 97% rename from src/Server/Disk/LoggerDisk.php rename to src/Server/Disk/Logger.php index 0368c0c..aafab47 100644 --- a/src/Server/Disk/LoggerDisk.php +++ b/src/Server/Disk/Logger.php @@ -13,7 +13,7 @@ }; use Psr\Log\LoggerInterface; -final class LoggerDisk implements Disk +final class Logger implements Disk { private function __construct( private Disk $disk, diff --git a/src/Server/Disk/UnixDisk.php b/src/Server/Disk/Unix.php similarity index 99% rename from src/Server/Disk/UnixDisk.php rename to src/Server/Disk/Unix.php index 4989123..0eeb671 100644 --- a/src/Server/Disk/UnixDisk.php +++ b/src/Server/Disk/Unix.php @@ -23,7 +23,7 @@ Monoid\Concat, }; -final class UnixDisk implements Disk +final class Unix implements Disk { private static array $columns = [ 'Size' => 'size', diff --git a/src/Server/Processes/LoggerProcesses.php b/src/Server/Processes/Logger.php similarity index 97% rename from src/Server/Processes/LoggerProcesses.php rename to src/Server/Processes/Logger.php index 2a7e808..7003528 100644 --- a/src/Server/Processes/LoggerProcesses.php +++ b/src/Server/Processes/Logger.php @@ -15,7 +15,7 @@ }; use Psr\Log\LoggerInterface; -final class LoggerProcesses implements Processes +final class Logger implements Processes { private function __construct( private Processes $processes, diff --git a/src/Server/Processes/UnixProcesses.php b/src/Server/Processes/Unix.php similarity index 99% rename from src/Server/Processes/UnixProcesses.php rename to src/Server/Processes/Unix.php index 788641e..2e770e8 100644 --- a/src/Server/Processes/UnixProcesses.php +++ b/src/Server/Processes/Unix.php @@ -26,7 +26,7 @@ Monoid\Concat, }; -final class UnixProcesses implements Processes +final class Unix implements Processes { private function __construct( private Clock $clock, diff --git a/src/Servers/Linux.php b/src/Servers/Linux.php index ee9d919..30dc344 100644 --- a/src/Servers/Linux.php +++ b/src/Servers/Linux.php @@ -9,9 +9,7 @@ Facade\Cpu\LinuxFacade as CpuFacade, Facade\Memory\LinuxFacade as MemoryFacade, Facade\LoadAverage\PhpFacade as LoadAverageFacade, - Server\Processes\UnixProcesses, Server\Disk, - Server\Disk\UnixDisk, }; use Innmind\Server\Control\Server as Control; use Innmind\TimeContinuum\Clock; @@ -22,17 +20,17 @@ final class Linux implements Server { private CpuFacade $cpu; private MemoryFacade $memory; - private UnixProcesses $processes; + private Processes\Unix $processes; private LoadAverageFacade $loadAverage; - private UnixDisk $disk; + private Disk\Unix $disk; private function __construct(Clock $clock, Control $control) { $this->cpu = new CpuFacade($control->processes()); $this->memory = new MemoryFacade($control->processes()); - $this->processes = UnixProcesses::of($clock, $control->processes()); + $this->processes = Processes\Unix::of($clock, $control->processes()); $this->loadAverage = new LoadAverageFacade; - $this->disk = UnixDisk::of($control->processes()); + $this->disk = Disk\Unix::of($control->processes()); } /** diff --git a/src/Servers/Logger.php b/src/Servers/Logger.php index 48295ed..ade1eb8 100644 --- a/src/Servers/Logger.php +++ b/src/Servers/Logger.php @@ -60,7 +60,7 @@ public function memory(): Attempt #[\Override] public function processes(): Processes { - return Processes\LoggerProcesses::of( + return Processes\Logger::of( $this->server->processes(), $this->logger, ); @@ -83,7 +83,7 @@ public function loadAverage(): Attempt #[\Override] public function disk(): Disk { - return Disk\LoggerDisk::of( + return Disk\Logger::of( $this->server->disk(), $this->logger, ); diff --git a/src/Servers/OSX.php b/src/Servers/OSX.php index b2eb503..aecf206 100644 --- a/src/Servers/OSX.php +++ b/src/Servers/OSX.php @@ -9,9 +9,7 @@ Facade\Cpu\OSXFacade as CpuFacade, Facade\Memory\OSXFacade as MemoryFacade, Facade\LoadAverage\PhpFacade as LoadAverageFacade, - Server\Processes\UnixProcesses, Server\Disk, - Server\Disk\UnixDisk, EnvironmentPath, }; use Innmind\Server\Control\Server as Control; @@ -23,17 +21,17 @@ final class OSX implements Server { private CpuFacade $cpu; private MemoryFacade $memory; - private UnixProcesses $processes; + private Processes\Unix $processes; private LoadAverageFacade $loadAverage; - private UnixDisk $disk; + private Disk\Unix $disk; private function __construct(Clock $clock, Control $control, EnvironmentPath $path) { $this->cpu = new CpuFacade($control->processes()); $this->memory = new MemoryFacade($control->processes(), $path); - $this->processes = UnixProcesses::of($clock, $control->processes()); + $this->processes = Processes\Unix::of($clock, $control->processes()); $this->loadAverage = new LoadAverageFacade; - $this->disk = UnixDisk::of($control->processes()); + $this->disk = Disk\Unix::of($control->processes()); } /** diff --git a/tests/Server/Disk/LoggerDiskTest.php b/tests/Server/Disk/LoggerDiskTest.php index e0e2bfb..77d43dd 100644 --- a/tests/Server/Disk/LoggerDiskTest.php +++ b/tests/Server/Disk/LoggerDiskTest.php @@ -4,7 +4,7 @@ namespace Tests\Innmind\Server\Status\Server\Disk; use Innmind\Server\Status\{ - Server\Disk\LoggerDisk, + Server\Disk\Logger, Server\Disk, Server\Disk\Volume, Server\Disk\Volume\MountPoint, @@ -23,7 +23,7 @@ class LoggerDiskTest extends TestCase { public function testInterface() { - $this->assertInstanceOf(Disk::class, LoggerDisk::of( + $this->assertInstanceOf(Disk::class, Logger::of( $this->disk(), new NullLogger, )); @@ -31,14 +31,14 @@ public function testInterface() public function testVolumes() { - $disk = LoggerDisk::of($this->disk(), new NullLogger); + $disk = Logger::of($this->disk(), new NullLogger); $this->assertInstanceOf(Set::class, $disk->volumes()); } public function testGet() { - $disk = LoggerDisk::of($this->disk(), new NullLogger); + $disk = Logger::of($this->disk(), new NullLogger); $this->assertInstanceOf(Volume::class, $disk->get(MountPoint::of('/'))->match( static fn($volume) => $volume, diff --git a/tests/Server/Disk/UnixDiskTest.php b/tests/Server/Disk/UnixDiskTest.php index 0806c57..d381420 100644 --- a/tests/Server/Disk/UnixDiskTest.php +++ b/tests/Server/Disk/UnixDiskTest.php @@ -4,7 +4,7 @@ namespace Tests\Innmind\Server\Status\Server\Disk; use Innmind\Server\Status\{ - Server\Disk\UnixDisk, + Server\Disk\Unix, Server\Disk, Server\Disk\Volume, Server\Disk\Volume\MountPoint, @@ -22,7 +22,7 @@ class UnixDiskTest extends TestCase public function setUp(): void { - $this->disk = UnixDisk::of( + $this->disk = Unix::of( Control::build( Clock::live(), IO::fromAmbientAuthority(), diff --git a/tests/Server/Processes/LoggerProcessesTest.php b/tests/Server/Processes/LoggerProcessesTest.php index 13f5d48..2e4b38c 100644 --- a/tests/Server/Processes/LoggerProcessesTest.php +++ b/tests/Server/Processes/LoggerProcessesTest.php @@ -4,7 +4,7 @@ namespace Tests\Innmind\Server\Status\Server\Processes; use Innmind\Server\Status\{ - Server\Processes\LoggerProcesses, + Server\Processes\Logger, Server\Processes, Server\Process, Server\Process\Pid, @@ -23,7 +23,7 @@ class LoggerProcessesTest extends TestCase { public function testInterface() { - $this->assertInstanceOf(Processes::class, LoggerProcesses::of( + $this->assertInstanceOf(Processes::class, Logger::of( $this->processes(), new NullLogger, )); @@ -31,14 +31,14 @@ public function testInterface() public function testAll() { - $processes = LoggerProcesses::of($this->processes(), new NullLogger); + $processes = Logger::of($this->processes(), new NullLogger); $this->assertInstanceOf(Set::class, $processes->all()); } public function testGet() { - $processes = LoggerProcesses::of($this->processes(), new NullLogger); + $processes = Logger::of($this->processes(), new NullLogger); $this->assertInstanceOf(Process::class, $processes->get(Pid::of(1))->match( static fn($process) => $process, diff --git a/tests/Server/Processes/UnixProcessesTest.php b/tests/Server/Processes/UnixProcessesTest.php index 992e671..f30eab6 100644 --- a/tests/Server/Processes/UnixProcessesTest.php +++ b/tests/Server/Processes/UnixProcessesTest.php @@ -4,7 +4,7 @@ namespace Tests\Innmind\Server\Status\Server\Processes; use Innmind\Server\Status\{ - Server\Processes\UnixProcesses, + Server\Processes\Unix, Server\Processes, Server\Process, Server\Process\Pid, @@ -25,7 +25,7 @@ class UnixProcessesTest extends TestCase public function setUp(): void { - $this->processes = UnixProcesses::of( + $this->processes = Unix::of( Clock::live(), Control::build( Clock::live(), diff --git a/tests/Servers/LoggerTest.php b/tests/Servers/LoggerTest.php index 0643f85..abbf52e 100644 --- a/tests/Servers/LoggerTest.php +++ b/tests/Servers/LoggerTest.php @@ -59,7 +59,7 @@ public function testProcesses() new NullLogger, ); - $this->assertInstanceOf(Processes\LoggerProcesses::class, $server->processes()); + $this->assertInstanceOf(Processes\Logger::class, $server->processes()); } public function testLoadAverage() @@ -76,7 +76,7 @@ public function testDisk() new NullLogger, ); - $this->assertInstanceOf(Disk\LoggerDisk::class, $server->disk()); + $this->assertInstanceOf(Disk\Logger::class, $server->disk()); } public function testTmp() From fc8550842f11a22d19401d299eb99cc07c418494 Mon Sep 17 00:00:00 2001 From: Baptiste Langlade Date: Thu, 8 May 2025 15:11:52 +0200 Subject: [PATCH 4/5] use fluent transformations instead of force unwrapping --- src/Server/Disk/Unix.php | 7 +++---- src/Server/Processes/Unix.php | 18 ++++++------------ 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/Server/Disk/Unix.php b/src/Server/Disk/Unix.php index 0eeb671..158e00a 100644 --- a/src/Server/Disk/Unix.php +++ b/src/Server/Disk/Unix.php @@ -66,10 +66,9 @@ public function volumes(): Set ->fold(new Concat), ) ->map($this->parse(...)) - ->match( - static fn($volumes) => $volumes, - static fn() => Set::of(), - ); + ->toSequence() + ->toSet() + ->flatMap(static fn($volumes) => $volumes); } #[\Override] diff --git a/src/Server/Processes/Unix.php b/src/Server/Processes/Unix.php index 2e770e8..b13ec89 100644 --- a/src/Server/Processes/Unix.php +++ b/src/Server/Processes/Unix.php @@ -51,10 +51,9 @@ public function all(): Set ->withShortOption('eo', $this->format()), ) ->map($this->parse(...)) - ->match( - static fn($processes) => $processes, - static fn() => Set::of(), - ); + ->toSequence() + ->toSet() + ->flatMap(static fn($processes) => $processes); } #[\Override] @@ -149,14 +148,9 @@ private function parse(Str $output): Set )); }); - /** @var Set */ - return $processes->reduce( - Set::of(), - static fn(Set $processes, Maybe $process): Set => $process->match( - static fn(Process $process) => ($processes)($process), - static fn() => $processes, - ), - ); + return $processes + ->flatMap(static fn($process) => $process->toSequence()) // discard process that failed to be parsed + ->toSet(); } private function format(): string From c41a8fb22744fa1fafdd1b05c884619c0284463f Mon Sep 17 00:00:00 2001 From: Baptiste Langlade Date: Thu, 8 May 2025 15:12:49 +0200 Subject: [PATCH 5/5] simplify process creation --- src/Server/Processes/Unix.php | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/Server/Processes/Unix.php b/src/Server/Processes/Unix.php index b13ec89..cb285dd 100644 --- a/src/Server/Processes/Unix.php +++ b/src/Server/Processes/Unix.php @@ -136,16 +136,12 @@ private function parse(Str $output): Set ->get(4) ->keep(Is::string()->nonEmpty()->asPredicate()) ->map(Command::of(...)); + $start = Maybe::just( + $this->clock->at($start, Format::of('D M j H:i:s Y')), + ); - return Maybe::all($user, $pid, $percentage, $memory, $command) - ->map(fn(User $user, Pid $pid, Percentage $percentage, Memory $memory, Command $command) => Process::of( - $pid, - $user, - $percentage, - $memory, - $this->clock->at($start, Format::of('D M j H:i:s Y')), - $command, - )); + return Maybe::all($pid, $user, $percentage, $memory, $start, $command) + ->map(Process::of(...)); }); return $processes