Files
panel-pelican-dev/app/Enums/ContainerStatus.php

114 lines
3.5 KiB
PHP
Raw Permalink Normal View History

2024-04-15 02:15:06 -04:00
<?php
namespace App\Enums;
2026-01-27 11:36:07 +01:00
use BackedEnum;
use Filament\Support\Contracts\HasColor;
use Filament\Support\Contracts\HasIcon;
use Filament\Support\Contracts\HasLabel;
enum ContainerStatus: string implements HasColor, HasIcon, HasLabel
2024-04-15 02:15:06 -04:00
{
2024-05-07 19:59:27 -04:00
// Docker Based
2024-04-15 02:15:06 -04:00
case Created = 'created';
case Starting = 'starting';
2024-04-15 02:15:06 -04:00
case Running = 'running';
case Restarting = 'restarting';
case Exited = 'exited';
case Paused = 'paused';
case Dead = 'dead';
case Removing = 'removing';
case Stopping = 'stopping';
case Offline = 'offline';
2024-05-07 19:59:27 -04:00
// HTTP Based
2024-04-18 03:48:30 -04:00
case Missing = 'missing';
2026-01-27 11:36:07 +01:00
public function getIcon(): BackedEnum
2024-04-18 03:48:30 -04:00
{
return match ($this) {
2026-01-27 11:36:07 +01:00
self::Created => TablerIcon::HeartPlus,
self::Starting => TablerIcon::HeartUp,
self::Running => TablerIcon::Heartbeat,
self::Restarting => TablerIcon::HeartBolt,
self::Exited => TablerIcon::HeartExclamation,
self::Paused => TablerIcon::HeartPause,
self::Dead, self::Offline => TablerIcon::HeartX,
self::Removing => TablerIcon::HeartDown,
self::Missing => TablerIcon::HeartSearch,
self::Stopping => TablerIcon::HeartMinus,
2024-04-18 03:48:30 -04:00
};
}
public function getColor(bool $hex = false): string
2024-04-18 03:48:30 -04:00
{
if ($hex) {
return match ($this) {
self::Created, self::Restarting => '#2563EB',
self::Starting, self::Paused, self::Removing, self::Stopping => '#D97706',
self::Running => '#22C55E',
self::Exited, self::Missing, self::Dead, self::Offline => '#EF4444',
};
}
2024-04-18 03:48:30 -04:00
return match ($this) {
self::Created => 'primary',
self::Starting => 'warning',
2024-04-18 03:48:30 -04:00
self::Running => 'success',
self::Restarting => 'info',
self::Exited => 'danger',
self::Paused => 'warning',
self::Dead => 'danger',
self::Removing => 'warning',
2024-04-19 22:32:20 -04:00
self::Missing => 'danger',
self::Stopping => 'warning',
self::Offline => 'danger',
2024-04-18 03:48:30 -04:00
};
}
public function getLabel(): string
{
return trans('server/console.status.' . $this->value);
}
public function isOffline(): bool
{
return in_array($this, [ContainerStatus::Offline, ContainerStatus::Missing]);
}
public function isStartingOrRunning(): bool
{
return in_array($this, [ContainerStatus::Starting, ContainerStatus::Running]);
}
public function isStartingOrStopping(): bool
{
return in_array($this, [ContainerStatus::Starting, ContainerStatus::Stopping, ContainerStatus::Restarting]);
}
public function isStartable(): bool
{
2025-06-12 08:54:00 +02:00
return !in_array($this, [ContainerStatus::Running, ContainerStatus::Starting, ContainerStatus::Stopping, ContainerStatus::Restarting, ContainerStatus::Missing]);
}
public function isRestartable(): bool
{
if ($this->isStartable()) {
return true;
}
2025-06-12 08:54:00 +02:00
return !in_array($this, [ContainerStatus::Offline, ContainerStatus::Missing]);
}
public function isStoppable(): bool
{
2025-06-12 08:54:00 +02:00
return !in_array($this, [ContainerStatus::Starting, ContainerStatus::Stopping, ContainerStatus::Restarting, ContainerStatus::Exited, ContainerStatus::Offline, ContainerStatus::Missing]);
}
public function isKillable(): bool
{
2025-06-12 08:54:00 +02:00
return !in_array($this, [ContainerStatus::Offline, ContainerStatus::Running, ContainerStatus::Exited, ContainerStatus::Missing]);
}
2024-04-15 02:15:06 -04:00
}