Skip to content
Merged
2 changes: 0 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,3 @@ jobs:
uses: innmind/github-workflows/.github/workflows/psalm-matrix.yml@main
cs:
uses: innmind/github-workflows/.github/workflows/cs.yml@main
with:
php-version: '8.2'
12 changes: 12 additions & 0 deletions .github/workflows/extensive.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
name: Extensive CI

on:
push:
tags:
- '*'
paths:
- '.github/workflows/extensive.yml'

jobs:
blackbox:
uses: innmind/github-workflows/.github/workflows/extensive.yml@main
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
# Changelog

## [Unreleased]

### Changed

- Requires PHP `8.4`
- `Innmind\Server\Status\Server` is now a final class, all previous implementations are now flagged as internal
- `Innmind\Server\Status\Server\Processes::all()` now returns an `Innmind\Immutable\Sequence`
- `Innmind\Server\Status\Server\Disk::volumes()` now returns an `Innmind\Immutable\Sequence`
- `Innmind\Server\Status\Server\Disk` is now a final class
- `Innmind\Server\Status\Server\Processes` is now a final class
- Requires `innmind/time:~1.0`

## 5.0.0 - 2025-05-08

### Changed
Expand Down
4 changes: 4 additions & 0 deletions blackbox.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
};

Application::new($argv)
->when(
\getenv('BLACKBOX_SET_SIZE') !== false,
static fn(Application $app) => $app->scenariiPerProof((int) \getenv('BLACKBOX_SET_SIZE')),
)
->when(
\getenv('ENABLE_COVERAGE') !== false,
static fn(Application $app) => $app
Expand Down
14 changes: 7 additions & 7 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@
"issues": "http://github.com/Innmind/ServerStatus/issues"
},
"require": {
"php": "~8.2",
"innmind/immutable": "~5.14",
"innmind/time-continuum": "^4.1.1",
"innmind/url": "~4.0",
"php": "~8.4",
"innmind/immutable": "~6.0",
"innmind/time": "~1.0",
"innmind/url": "~5.0",
"psr/log": "~3.0",
"innmind/server-control": "~6.0",
"innmind/validation": "^2.0"
"innmind/server-control": "~7.0",
"innmind/validation": "~3.0"
},
"autoload": {
"psr-4": {
Expand All @@ -34,7 +34,7 @@
},
"require-dev": {
"innmind/black-box": "~6.1",
"innmind/static-analysis": "~1.2.1",
"innmind/static-analysis": "~1.3",
"innmind/coding-standard": "~2.0"
}
}
12 changes: 6 additions & 6 deletions src/Facade/Cpu/LinuxFacade.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@

namespace Innmind\Server\Status\Facade\Cpu;

use Innmind\Server\Status\{
Server\Cpu,
Server\Cpu\Percentage,
Server\Cpu\Cores,
use Innmind\Server\Status\Server\{
Cpu,
Cpu\Percentage,
Cpu\Cores,
};
use Innmind\Server\Control\Server\{
Processes,
Expand Down Expand Up @@ -53,7 +53,7 @@ public function __invoke(): Attempt
static fn($success) => $success
->output()
->map(static fn($chunk) => $chunk->data())
->fold(new Concat),
->fold(Concat::monoid),
)
->flatMap($this->parse(...));
}
Expand All @@ -80,7 +80,7 @@ private function parse(Str $output): Attempt
static fn($success) => $success
->output()
->map(static fn($chunk) => $chunk->data())
->fold(new Concat)
->fold(Concat::monoid)
->toString(),
)
->map(static fn($cores) => (int) $cores)
Expand Down
12 changes: 6 additions & 6 deletions src/Facade/Cpu/OSXFacade.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@

namespace Innmind\Server\Status\Facade\Cpu;

use Innmind\Server\Status\{
Server\Cpu,
Server\Cpu\Percentage,
Server\Cpu\Cores,
use Innmind\Server\Status\Server\{
Cpu,
Cpu\Percentage,
Cpu\Cores,
};
use Innmind\Server\Control\Server\{
Processes,
Expand Down Expand Up @@ -54,7 +54,7 @@ public function __invoke(): Attempt
static fn($success) => $success
->output()
->map(static fn($chunk) => $chunk->data())
->fold(new Concat),
->fold(Concat::monoid),
)
->flatMap($this->parse(...));
}
Expand Down Expand Up @@ -88,7 +88,7 @@ private function parse(Str $output): Attempt
static fn($success) => $success
->output()
->map(static fn($chunk) => $chunk->data())
->fold(new Concat),
->fold(Concat::monoid),
)
->map(static fn($output) => $output->trim())
->map(static fn($output) => $output->capture('~^hw.ncpu: (?P<cores>\d+)$~'))
Expand Down
8 changes: 4 additions & 4 deletions src/Facade/Memory/LinuxFacade.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@

namespace Innmind\Server\Status\Facade\Memory;

use Innmind\Server\Status\{
Server\Memory,
Server\Memory\Bytes,
use Innmind\Server\Status\Server\{
Memory,
Memory\Bytes,
};
use Innmind\Server\Control\Server\{
Processes,
Expand Down Expand Up @@ -56,7 +56,7 @@ public function __invoke(): Attempt
static fn($success) => $success
->output()
->map(static fn($chunk) => $chunk->data())
->fold(new Concat),
->fold(Concat::monoid),
)
->flatMap($this->parse(...));
}
Expand Down
2 changes: 1 addition & 1 deletion src/Facade/Memory/OSXFacade.php
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,6 @@ private function run(Command $command): Str
->toSequence()
->flatMap(static fn($success) => $success->output())
->map(static fn($chunk) => $chunk->data())
->fold(new Concat);
->fold(Concat::monoid);
}
}
82 changes: 69 additions & 13 deletions src/Server.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,89 @@

namespace Innmind\Server\Status;

use Innmind\Server\Status\Server\{
Cpu,
Memory,
Processes,
LoadAverage,
Disk,
use Innmind\Server\Status\{
Servers\Implementation,
Servers\OSX,
Servers\Linux,
Servers\Logger,
Server\Cpu,
Server\Memory,
Server\Processes,
Server\LoadAverage,
Server\Disk,
};
use Innmind\Server\Control\Server as Control;
use Innmind\Time\Clock;
use Innmind\Url\Path;
use Innmind\Immutable\Attempt;
use Psr\Log\LoggerInterface;

interface Server
final class Server
{
private function __construct(
private Implementation $implementation,
) {
}

public static function osx(
Clock $clock,
Control $control,
EnvironmentPath $path,
): self {
return new self(OSX::of($clock, $control, $path));
}

public static function linux(
Clock $clock,
Control $control,
): self {
return new self(Linux::of($clock, $control));
}

public static function logger(self $server, LoggerInterface $logger): self
{
return new self(Logger::of(
$server->implementation,
$logger,
));
}

/**
* @return Attempt<Cpu>
*/
public function cpu(): Attempt;
public function cpu(): Attempt
{
return $this->implementation->cpu();
}

/**
* @return Attempt<Memory>
*/
public function memory(): Attempt;
public function processes(): Processes;
public function memory(): Attempt
{
return $this->implementation->memory();
}

public function processes(): Processes
{
return $this->implementation->processes();
}

/**
* @return Attempt<LoadAverage>
*/
public function loadAverage(): Attempt;
public function disk(): Disk;
public function tmp(): Path;
public function loadAverage(): Attempt
{
return $this->implementation->loadAverage();
}

public function disk(): Disk
{
return $this->implementation->disk();
}

public function tmp(): Path
{
return Path::of(\rtrim(\sys_get_temp_dir(), '/').'/');
}
}
45 changes: 40 additions & 5 deletions src/Server/Disk.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,58 @@
namespace Innmind\Server\Status\Server;

use Innmind\Server\Status\Server\Disk\{
Implementation,
Unix,
Logger,
Volume,
Volume\MountPoint,
};
use Innmind\Server\Control\Server\Processes;
use Innmind\Immutable\{
Set,
Sequence,
Maybe,
};
use Psr\Log\LoggerInterface;

interface Disk
final class Disk
{
private function __construct(
private Implementation $implementation,
) {
}

/**
* @internal
*/
public static function of(Processes $processes): self
{
return new self(Unix::of($processes));
}

/**
* @internal
*/
public static function logger(self $disk, LoggerInterface $logger): self
{
return new self(Logger::of(
$disk->implementation,
$logger,
));
}

/**
* @return Set<Volume>
* @return Sequence<Volume>
*/
public function volumes(): Set;
public function volumes(): Sequence
{
return $this->implementation->volumes();
}

/**
* @return Maybe<Volume>
*/
public function get(MountPoint $point): Maybe;
public function get(MountPoint $point): Maybe
{
return $this->implementation->get($point);
}
}
26 changes: 26 additions & 0 deletions src/Server/Disk/Implementation.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php
declare(strict_types = 1);

namespace Innmind\Server\Status\Server\Disk;

use Innmind\Server\Status\Server\Disk\Volume\MountPoint;
use Innmind\Immutable\{
Sequence,
Maybe,
};

/**
* @internal
*/
interface Implementation
{
/**
* @return Sequence<Volume>
*/
public function volumes(): Sequence;

/**
* @return Maybe<Volume>
*/
public function get(MountPoint $point): Maybe;
}
Loading