Some checks failed
🚀 Build & Deploy Image / Determine Build Necessity (push) Failing after 10m14s
🚀 Build & Deploy Image / Build Runtime Base Image (push) Has been skipped
🚀 Build & Deploy Image / Build Docker Image (push) Has been skipped
🚀 Build & Deploy Image / Run Tests & Quality Checks (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Staging (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Production (push) Has been skipped
Security Vulnerability Scan / Check for Dependency Changes (push) Failing after 11m25s
Security Vulnerability Scan / Composer Security Audit (push) Has been cancelled
- Remove middleware reference from Gitea Traefik labels (caused routing issues) - Optimize Gitea connection pool settings (MAX_IDLE_CONNS=30, authentication_timeout=180s) - Add explicit service reference in Traefik labels - Fix intermittent 504 timeouts by improving PostgreSQL connection handling Fixes Gitea unreachability via git.michaelschiemer.de
65 lines
2.1 KiB
PHP
65 lines
2.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Framework\Display\ValueObjectFormatters;
|
|
|
|
use App\Framework\Console\ConsoleColor;
|
|
use App\Framework\Console\ConsoleStyle;
|
|
use App\Framework\Core\ValueObjects\Byte;
|
|
use App\Framework\Display\ValueObjects\DisplayOptions;
|
|
|
|
/**
|
|
* Formatter for Byte Value Objects with human-readable formatting
|
|
*/
|
|
final readonly class ByteFormatter implements ValueObjectFormatterInterface
|
|
{
|
|
public function supports(object $valueObject): bool
|
|
{
|
|
return $valueObject instanceof Byte;
|
|
}
|
|
|
|
public function formatConsole(object $valueObject, DisplayOptions $options): string
|
|
{
|
|
if (! $valueObject instanceof Byte) {
|
|
return (string) $valueObject;
|
|
}
|
|
|
|
$humanReadable = $valueObject->toHumanReadable(2);
|
|
$bytes = $valueObject->toBytes();
|
|
|
|
// Color-code by size range
|
|
$color = match (true) {
|
|
$bytes < 1024 => ConsoleColor::WHITE, // Bytes
|
|
$bytes < 1024 * 1024 => ConsoleColor::GREEN, // KB
|
|
$bytes < 1024 * 1024 * 1024 => ConsoleColor::YELLOW, // MB
|
|
$bytes < 1024 * 1024 * 1024 * 1024 => ConsoleColor::BRIGHT_YELLOW, // GB
|
|
default => ConsoleColor::BRIGHT_RED, // TB+
|
|
};
|
|
|
|
return ConsoleStyle::create(color: $color)->apply($humanReadable);
|
|
}
|
|
|
|
public function formatHtml(object $valueObject, DisplayOptions $options): string
|
|
{
|
|
if (! $valueObject instanceof Byte) {
|
|
return htmlspecialchars((string) $valueObject);
|
|
}
|
|
|
|
$humanReadable = $valueObject->toHumanReadable(2);
|
|
$bytes = $valueObject->toBytes();
|
|
|
|
// CSS class based on size range
|
|
$cssClass = match (true) {
|
|
$bytes < 1024 => 'display-byte-size',
|
|
$bytes < 1024 * 1024 => 'display-kb-size',
|
|
$bytes < 1024 * 1024 * 1024 => 'display-mb-size',
|
|
$bytes < 1024 * 1024 * 1024 * 1024 => 'display-gb-size',
|
|
default => 'display-tb-size',
|
|
};
|
|
|
|
return '<span class="' . $cssClass . '">' . htmlspecialchars($humanReadable) . '</span>';
|
|
}
|
|
}
|
|
|