From 4c3ec740138088aa0986bb3789301e1b9f258e71 Mon Sep 17 00:00:00 2001 From: Baptiste Langlade Date: Thu, 8 May 2025 14:36:50 +0200 Subject: [PATCH 1/3] make implementations constructors private --- src/Server/Disk/LoggerDisk.php | 7 ++++++- src/Server/Disk/UnixDisk.php | 7 ++++++- src/Server/Processes/LoggerProcesses.php | 7 ++++++- src/Server/Processes/UnixProcesses.php | 7 ++++++- src/ServerFactory.php | 4 ++-- src/Servers/Linux.php | 11 ++++++++--- src/Servers/Logger.php | 4 ++-- src/Servers/OSX.php | 11 ++++++++--- 8 files changed, 44 insertions(+), 14 deletions(-) diff --git a/src/Server/Disk/LoggerDisk.php b/src/Server/Disk/LoggerDisk.php index 7a6d09d..63f7605 100644 --- a/src/Server/Disk/LoggerDisk.php +++ b/src/Server/Disk/LoggerDisk.php @@ -18,12 +18,17 @@ final class LoggerDisk implements Disk private Disk $disk; private LoggerInterface $logger; - public function __construct(Disk $disk, LoggerInterface $logger) + private function __construct(Disk $disk, LoggerInterface $logger) { $this->disk = $disk; $this->logger = $logger; } + public static function of(Disk $disk, LoggerInterface $logger): self + { + return new self($disk, $logger); + } + #[\Override] public function volumes(): Set { diff --git a/src/Server/Disk/UnixDisk.php b/src/Server/Disk/UnixDisk.php index ff817db..912401b 100644 --- a/src/Server/Disk/UnixDisk.php +++ b/src/Server/Disk/UnixDisk.php @@ -36,11 +36,16 @@ final class UnixDisk implements Disk private Processes $processes; - public function __construct(Processes $processes) + private function __construct(Processes $processes) { $this->processes = $processes; } + public static function of(Processes $processes): self + { + return new self($processes); + } + #[\Override] public function volumes(): Set { diff --git a/src/Server/Processes/LoggerProcesses.php b/src/Server/Processes/LoggerProcesses.php index 43de14e..9209ab5 100644 --- a/src/Server/Processes/LoggerProcesses.php +++ b/src/Server/Processes/LoggerProcesses.php @@ -20,12 +20,17 @@ final class LoggerProcesses implements Processes private Processes $processes; private LoggerInterface $logger; - public function __construct(Processes $processes, LoggerInterface $logger) + private function __construct(Processes $processes, LoggerInterface $logger) { $this->processes = $processes; $this->logger = $logger; } + public static function of(Processes $processes, LoggerInterface $logger): self + { + return new self($processes, $logger); + } + #[\Override] public function all(): Set { diff --git a/src/Server/Processes/UnixProcesses.php b/src/Server/Processes/UnixProcesses.php index 8027daf..1aaad19 100644 --- a/src/Server/Processes/UnixProcesses.php +++ b/src/Server/Processes/UnixProcesses.php @@ -31,12 +31,17 @@ final class UnixProcesses implements Processes private Clock $clock; private Control\Processes $processes; - public function __construct(Clock $clock, Control\Processes $processes) + private function __construct(Clock $clock, Control\Processes $processes) { $this->clock = $clock; $this->processes = $processes; } + public static function of(Clock $clock, Control\Processes $processes): self + { + return new self($clock, $processes); + } + #[\Override] public function all(): Set { diff --git a/src/ServerFactory.php b/src/ServerFactory.php index a4c28c2..0f5376e 100644 --- a/src/ServerFactory.php +++ b/src/ServerFactory.php @@ -18,8 +18,8 @@ public static function build( EnvironmentPath $path, ): Server { return match (\PHP_OS) { - 'Darwin' => new OSX($clock, $control, $path), - 'Linux' => new Linux($clock, $control), + 'Darwin' => OSX::of($clock, $control, $path), + 'Linux' => Linux::of($clock, $control), default => throw new \LogicException('Unsupported operating system '.\PHP_OS), }; } diff --git a/src/Servers/Linux.php b/src/Servers/Linux.php index 110754f..275eb3d 100644 --- a/src/Servers/Linux.php +++ b/src/Servers/Linux.php @@ -26,13 +26,18 @@ final class Linux implements Server private LoadAverageFacade $loadAverage; private UnixDisk $disk; - public function __construct(Clock $clock, Control $control) + private function __construct(Clock $clock, Control $control) { $this->cpu = new CpuFacade($control->processes()); $this->memory = new MemoryFacade($control->processes()); - $this->processes = new UnixProcesses($clock, $control->processes()); + $this->processes = UnixProcesses::of($clock, $control->processes()); $this->loadAverage = new LoadAverageFacade; - $this->disk = new UnixDisk($control->processes()); + $this->disk = UnixDisk::of($control->processes()); + } + + public static function of(Clock $clock, Control $control): self + { + return new self($clock, $control); } #[\Override] diff --git a/src/Servers/Logger.php b/src/Servers/Logger.php index d74c917..1152585 100644 --- a/src/Servers/Logger.php +++ b/src/Servers/Logger.php @@ -58,7 +58,7 @@ public function memory(): Attempt #[\Override] public function processes(): Processes { - return new Processes\LoggerProcesses( + return Processes\LoggerProcesses::of( $this->server->processes(), $this->logger, ); @@ -81,7 +81,7 @@ public function loadAverage(): Attempt #[\Override] public function disk(): Disk { - return new Disk\LoggerDisk( + return Disk\LoggerDisk::of( $this->server->disk(), $this->logger, ); diff --git a/src/Servers/OSX.php b/src/Servers/OSX.php index a50b2ab..cdd1f01 100644 --- a/src/Servers/OSX.php +++ b/src/Servers/OSX.php @@ -27,13 +27,18 @@ final class OSX implements Server private LoadAverageFacade $loadAverage; private UnixDisk $disk; - public function __construct(Clock $clock, Control $control, EnvironmentPath $path) + private function __construct(Clock $clock, Control $control, EnvironmentPath $path) { $this->cpu = new CpuFacade($control->processes()); $this->memory = new MemoryFacade($control->processes(), $path); - $this->processes = new UnixProcesses($clock, $control->processes()); + $this->processes = UnixProcesses::of($clock, $control->processes()); $this->loadAverage = new LoadAverageFacade; - $this->disk = new UnixDisk($control->processes()); + $this->disk = UnixDisk::of($control->processes()); + } + + public static function of(Clock $clock, Control $control, EnvironmentPath $path): self + { + return new self($clock, $control, $path); } #[\Override] From cab6dceab3e80dcc1924659f4e79cad62bc577fc Mon Sep 17 00:00:00 2001 From: Baptiste Langlade Date: Thu, 8 May 2025 14:37:56 +0200 Subject: [PATCH 2/3] make logger constructor private --- CHANGELOG.md | 1 + src/Servers/Logger.php | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a00846b..f2e75e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - `Innmind\Server\Status\Server::cpu()` now returns `Innmind\Immutable\Attempt` - `Innmind\Server\Status\Server::memory()` now returns `Innmind\Immutable\Attempt` - `Innmind\Server\Status\Server::loadAverage()` now returns `Innmind\Immutable\Attempt` +- `Innmind\Server\Status\Server\Logger` constructor is now private, use `::of()` instead ### Removed diff --git a/src/Servers/Logger.php b/src/Servers/Logger.php index 1152585..bf33746 100644 --- a/src/Servers/Logger.php +++ b/src/Servers/Logger.php @@ -17,12 +17,17 @@ final class Logger implements Server private Server $server; private LoggerInterface $logger; - public function __construct(Server $server, LoggerInterface $logger) + private function __construct(Server $server, LoggerInterface $logger) { $this->server = $server; $this->logger = $logger; } + public static function of(Server $server, LoggerInterface $logger): self + { + return new self($server, $logger); + } + #[\Override] public function cpu(): Attempt { From 5ee4b58a1e97646790e9ef38dfa12d97f7faec17 Mon Sep 17 00:00:00 2001 From: Baptiste Langlade Date: Thu, 8 May 2025 14:41:56 +0200 Subject: [PATCH 3/3] fix tests --- tests/Server/Disk/LoggerDiskTest.php | 6 +++--- tests/Server/Disk/UnixDiskTest.php | 2 +- tests/Server/Processes/LoggerProcessesTest.php | 6 +++--- tests/Server/Processes/UnixProcessesTest.php | 2 +- tests/Servers/LinuxTest.php | 2 +- tests/Servers/LoggerTest.php | 14 +++++++------- tests/Servers/OSXTest.php | 2 +- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/tests/Server/Disk/LoggerDiskTest.php b/tests/Server/Disk/LoggerDiskTest.php index 3c377c4..e0e2bfb 100644 --- a/tests/Server/Disk/LoggerDiskTest.php +++ b/tests/Server/Disk/LoggerDiskTest.php @@ -23,7 +23,7 @@ class LoggerDiskTest extends TestCase { public function testInterface() { - $this->assertInstanceOf(Disk::class, new LoggerDisk( + $this->assertInstanceOf(Disk::class, LoggerDisk::of( $this->disk(), new NullLogger, )); @@ -31,14 +31,14 @@ public function testInterface() public function testVolumes() { - $disk = new LoggerDisk($this->disk(), new NullLogger); + $disk = LoggerDisk::of($this->disk(), new NullLogger); $this->assertInstanceOf(Set::class, $disk->volumes()); } public function testGet() { - $disk = new LoggerDisk($this->disk(), new NullLogger); + $disk = LoggerDisk::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 88fe325..0806c57 100644 --- a/tests/Server/Disk/UnixDiskTest.php +++ b/tests/Server/Disk/UnixDiskTest.php @@ -22,7 +22,7 @@ class UnixDiskTest extends TestCase public function setUp(): void { - $this->disk = new UnixDisk( + $this->disk = UnixDisk::of( Control::build( Clock::live(), IO::fromAmbientAuthority(), diff --git a/tests/Server/Processes/LoggerProcessesTest.php b/tests/Server/Processes/LoggerProcessesTest.php index c75bf7e..13f5d48 100644 --- a/tests/Server/Processes/LoggerProcessesTest.php +++ b/tests/Server/Processes/LoggerProcessesTest.php @@ -23,7 +23,7 @@ class LoggerProcessesTest extends TestCase { public function testInterface() { - $this->assertInstanceOf(Processes::class, new LoggerProcesses( + $this->assertInstanceOf(Processes::class, LoggerProcesses::of( $this->processes(), new NullLogger, )); @@ -31,14 +31,14 @@ public function testInterface() public function testAll() { - $processes = new LoggerProcesses($this->processes(), new NullLogger); + $processes = LoggerProcesses::of($this->processes(), new NullLogger); $this->assertInstanceOf(Set::class, $processes->all()); } public function testGet() { - $processes = new LoggerProcesses($this->processes(), new NullLogger); + $processes = LoggerProcesses::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 79ec228..992e671 100644 --- a/tests/Server/Processes/UnixProcessesTest.php +++ b/tests/Server/Processes/UnixProcessesTest.php @@ -25,7 +25,7 @@ class UnixProcessesTest extends TestCase public function setUp(): void { - $this->processes = new UnixProcesses( + $this->processes = UnixProcesses::of( Clock::live(), Control::build( Clock::live(), diff --git a/tests/Servers/LinuxTest.php b/tests/Servers/LinuxTest.php index c9dec45..3b98e54 100644 --- a/tests/Servers/LinuxTest.php +++ b/tests/Servers/LinuxTest.php @@ -25,7 +25,7 @@ class LinuxTest extends TestCase public function setUp(): void { - $this->server = new Linux( + $this->server = Linux::of( Clock::live(), Control::build( Clock::live(), diff --git a/tests/Servers/LoggerTest.php b/tests/Servers/LoggerTest.php index 8a3b3b9..0643f85 100644 --- a/tests/Servers/LoggerTest.php +++ b/tests/Servers/LoggerTest.php @@ -26,7 +26,7 @@ class LoggerTest extends TestCase { public function testInterface() { - $this->assertInstanceOf(Server::class, new Logger( + $this->assertInstanceOf(Server::class, Logger::of( $this->server(), new NullLogger, )); @@ -34,7 +34,7 @@ public function testInterface() public function testCpu() { - $server = new Logger($this->server(), new NullLogger); + $server = Logger::of($this->server(), new NullLogger); $this->assertInstanceOf(Cpu::class, $server->cpu()->match( static fn($cpu) => $cpu, @@ -44,7 +44,7 @@ public function testCpu() public function testMemory() { - $server = new Logger($this->server(), new NullLogger); + $server = Logger::of($this->server(), new NullLogger); $this->assertInstanceOf(Memory::class, $server->memory()->match( static fn($memory) => $memory, @@ -54,7 +54,7 @@ public function testMemory() public function testProcesses() { - $server = new Logger( + $server = Logger::of( $this->server(), new NullLogger, ); @@ -64,14 +64,14 @@ public function testProcesses() public function testLoadAverage() { - $server = new Logger($this->server(), new NullLogger); + $server = Logger::of($this->server(), new NullLogger); $this->assertInstanceOf(LoadAverage::class, $server->loadAverage()->unwrap()); } public function testDisk() { - $server = new Logger( + $server = Logger::of( $this->server(), new NullLogger, ); @@ -81,7 +81,7 @@ public function testDisk() public function testTmp() { - $server = new Logger($this->server(), new NullLogger); + $server = Logger::of($this->server(), new NullLogger); $this->assertInstanceOf(Path::class, $server->tmp()); } diff --git a/tests/Servers/OSXTest.php b/tests/Servers/OSXTest.php index 23d18a2..7c71fbd 100644 --- a/tests/Servers/OSXTest.php +++ b/tests/Servers/OSXTest.php @@ -26,7 +26,7 @@ class OSXTest extends TestCase public function setUp(): void { - $this->server = new OSX( + $this->server = OSX::of( Clock::live(), Control::build( Clock::live(),