mirror of
https://github.com/coollabsio/coolify.git
synced 2026-11-06 13:10:37 -04:00
feat(metrics): add pressure threshold helper
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Support\Metrics;
|
||||
|
||||
class PressureLevel
|
||||
{
|
||||
public static function for(?float $percent, string $kind = 'default'): string
|
||||
{
|
||||
if ($percent === null) {
|
||||
return 'ok';
|
||||
}
|
||||
|
||||
[$warn, $error] = $kind === 'disk' ? [80.0, 90.0] : [70.0, 90.0];
|
||||
|
||||
return match (true) {
|
||||
$percent >= $error => 'error',
|
||||
$percent >= $warn => 'warning',
|
||||
default => 'ok',
|
||||
};
|
||||
}
|
||||
|
||||
public static function textClass(string $level): string
|
||||
{
|
||||
return match ($level) {
|
||||
'error' => 'text-red-500 dark:text-red-400',
|
||||
'warning' => 'text-orange-500 dark:text-warning',
|
||||
default => 'text-black dark:text-fg',
|
||||
};
|
||||
}
|
||||
|
||||
public static function barClass(string $level): string
|
||||
{
|
||||
return match ($level) {
|
||||
'error' => 'bg-red-500 dark:bg-red-400',
|
||||
'warning' => 'bg-orange-500 dark:bg-warning',
|
||||
default => 'bg-neutral-400 dark:bg-white/30',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
use App\Support\Metrics\PressureLevel;
|
||||
|
||||
it('classifies cpu/memory pressure at 70/90 cutoffs', function () {
|
||||
expect(PressureLevel::for(10, 'cpu'))->toBe('ok');
|
||||
expect(PressureLevel::for(70, 'cpu'))->toBe('warning');
|
||||
expect(PressureLevel::for(89.9, 'memory'))->toBe('warning');
|
||||
expect(PressureLevel::for(90, 'memory'))->toBe('error');
|
||||
});
|
||||
|
||||
it('classifies disk pressure at 80/90 cutoffs', function () {
|
||||
expect(PressureLevel::for(75, 'disk'))->toBe('ok');
|
||||
expect(PressureLevel::for(80, 'disk'))->toBe('warning');
|
||||
expect(PressureLevel::for(95, 'disk'))->toBe('error');
|
||||
});
|
||||
|
||||
it('treats a null percent as ok and maps levels to classes', function () {
|
||||
expect(PressureLevel::for(null, 'cpu'))->toBe('ok');
|
||||
expect(PressureLevel::textClass('error'))->toContain('text-red-500');
|
||||
expect(PressureLevel::barClass('warning'))->toContain('bg-orange-500');
|
||||
});
|
||||
Reference in New Issue
Block a user