From a0ec043c49e4965ece031b1c1aa92098c66a2d0e Mon Sep 17 00:00:00 2001 From: Jean-Yves <7360784+docjyJ@users.noreply.github.com> Date: Wed, 2 Oct 2024 15:00:13 +0200 Subject: [PATCH] Add Enum Signed-off-by: Jean-Yves <7360784+docjyJ@users.noreply.github.com> --- php/src/Container/Container.php | 9 ++- php/src/Container/State/IContainerState.php | 5 -- .../State/ImageDoesNotExistState.php | 6 -- .../Container/State/NotRestartingState.php | 6 -- php/src/Container/State/RestartingState.php | 6 -- php/src/Container/State/RunningState.php | 6 -- php/src/Container/State/StartingState.php | 6 -- php/src/Container/State/StoppedState.php | 6 -- .../Container/State/VersionDifferentState.php | 6 -- php/src/Container/State/VersionEqualState.php | 6 -- php/src/Container/VersionState.php | 8 +++ php/src/Container/WorkingState.php | 12 ++++ php/src/ContainerDefinitionFetcher.php | 1 - php/src/Controller/DockerController.php | 8 +-- php/src/Docker/DockerActionManager.php | 59 ++++++++----------- php/templates/containers.twig | 14 ++--- 16 files changed, 60 insertions(+), 104 deletions(-) delete mode 100644 php/src/Container/State/IContainerState.php delete mode 100644 php/src/Container/State/ImageDoesNotExistState.php delete mode 100644 php/src/Container/State/NotRestartingState.php delete mode 100644 php/src/Container/State/RestartingState.php delete mode 100644 php/src/Container/State/RunningState.php delete mode 100644 php/src/Container/State/StartingState.php delete mode 100644 php/src/Container/State/StoppedState.php delete mode 100644 php/src/Container/State/VersionDifferentState.php delete mode 100644 php/src/Container/State/VersionEqualState.php create mode 100644 php/src/Container/VersionState.php create mode 100644 php/src/Container/WorkingState.php diff --git a/php/src/Container/Container.php b/php/src/Container/Container.php index 24d94d6c..e2071362 100644 --- a/php/src/Container/Container.php +++ b/php/src/Container/Container.php @@ -2,7 +2,6 @@ namespace AIO\Container; -use AIO\Container\State\IContainerState; use AIO\Data\ConfigurationManager; use AIO\Docker\DockerActionManager; use AIO\ContainerDefinitionFetcher; @@ -113,19 +112,19 @@ readonly class Container { return $this->volumes; } - public function GetRunningState() : IContainerState { + public function GetRunningState() : WorkingState { return $this->dockerActionManager->GetContainerRunningState($this); } - public function GetRestartingState() : IContainerState { + public function GetRestartingState() : WorkingState { return $this->dockerActionManager->GetContainerRestartingState($this); } - public function GetUpdateState() : IContainerState { + public function GetUpdateState() : VersionState { return $this->dockerActionManager->GetContainerUpdateState($this); } - public function GetStartingState() : IContainerState { + public function GetStartingState() : WorkingState { return $this->dockerActionManager->GetContainerStartingState($this); } diff --git a/php/src/Container/State/IContainerState.php b/php/src/Container/State/IContainerState.php deleted file mode 100644 index d93dab65..00000000 --- a/php/src/Container/State/IContainerState.php +++ /dev/null @@ -1,5 +0,0 @@ -GetRunningState() instanceof RunningState) { + if ($container->GetRunningState() === WorkingState::Running) { error_log('Not starting ' . $id . ' because it was already started.'); return; } @@ -254,10 +254,10 @@ readonly class DockerController { $domaincheckContainer = $this->containerDefinitionFetcher->GetContainerById($id); $apacheContainer = $this->containerDefinitionFetcher->GetContainerById(self::TOP_CONTAINER); // Don't start if apache is already running - if ($apacheContainer->GetRunningState() instanceof RunningState) { + if ($apacheContainer->GetRunningState() === WorkingState::Running) { return; // Don't start if domaincheck is already running - } elseif ($domaincheckContainer->GetRunningState() instanceof RunningState) { + } elseif ($domaincheckContainer->GetRunningState() === WorkingState::Running) { $domaincheckWasStarted = apcu_fetch($cacheKey); // Start domaincheck again when 10 minutes are over by not returning here if($domaincheckWasStarted !== false && is_string($domaincheckWasStarted)) { diff --git a/php/src/Docker/DockerActionManager.php b/php/src/Docker/DockerActionManager.php index 5df9e6f4..89257df5 100644 --- a/php/src/Docker/DockerActionManager.php +++ b/php/src/Docker/DockerActionManager.php @@ -3,15 +3,8 @@ namespace AIO\Docker; use AIO\Container\Container; -use AIO\Container\State\IContainerState; -use AIO\Container\State\ImageDoesNotExistState; -use AIO\Container\State\StartingState; -use AIO\Container\State\RunningState; -use AIO\Container\State\RestartingState; -use AIO\Container\State\NotRestartingState; -use AIO\Container\State\VersionDifferentState; -use AIO\Container\State\StoppedState; -use AIO\Container\State\VersionEqualState; +use AIO\Container\VersionState; +use AIO\Container\WorkingState; use AIO\Data\ConfigurationManager; use GuzzleHttp\Client; use GuzzleHttp\Exception\RequestException; @@ -42,14 +35,14 @@ readonly class DockerActionManager { return $container->GetContainerName() . ':' . $tag; } - public function GetContainerRunningState(Container $container) : IContainerState + public function GetContainerRunningState(Container $container) : WorkingState { $url = $this->BuildApiUrl(sprintf('containers/%s/json', urlencode($container->GetIdentifier()))); try { $response = $this->guzzleClient->get($url); } catch (RequestException $e) { if ($e->getCode() === 404) { - return new ImageDoesNotExistState(); + return WorkingState::ImageDoesNotExist; } throw $e; } @@ -57,20 +50,20 @@ readonly class DockerActionManager { $responseBody = json_decode((string)$response->getBody(), true); if ($responseBody['State']['Running'] === true) { - return new RunningState(); + return WorkingState::Running; } else { - return new StoppedState(); + return WorkingState::Stopped; } } - public function GetContainerRestartingState(Container $container) : IContainerState + public function GetContainerRestartingState(Container $container) : WorkingState { $url = $this->BuildApiUrl(sprintf('containers/%s/json', urlencode($container->GetIdentifier()))); try { $response = $this->guzzleClient->get($url); } catch (RequestException $e) { if ($e->getCode() === 404) { - return new ImageDoesNotExistState(); + return WorkingState::ImageDoesNotExist; } throw $e; } @@ -78,13 +71,13 @@ readonly class DockerActionManager { $responseBody = json_decode((string)$response->getBody(), true); if ($responseBody['State']['Restarting'] === true) { - return new RestartingState(); + return WorkingState::Restarting; } else { - return new NotRestartingState(); + return WorkingState::NotRestarting; } } - public function GetContainerUpdateState(Container $container) : IContainerState + public function GetContainerUpdateState(Container $container) : VersionState { $tag = $container->GetImageTag(); if ($tag === '%AIO_CHANNEL%') { @@ -93,28 +86,26 @@ readonly class DockerActionManager { $runningDigests = $this->GetRepoDigestsOfContainer($container->GetIdentifier()); if ($runningDigests === null) { - return new VersionDifferentState(); + return VersionState::Different; } $remoteDigest = $this->dockerHubManager->GetLatestDigestOfTag($container->GetContainerName(), $tag); if ($remoteDigest === null) { - return new VersionEqualstate(); + return VersionState::Equal; } foreach($runningDigests as $runningDigest) { if ($runningDigest === $remoteDigest) { - return new VersionEqualState(); + return VersionState::Equal; } } - return new VersionDifferentState(); + return VersionState::Different; } - public function GetContainerStartingState(Container $container) : IContainerState + public function GetContainerStartingState(Container $container) : WorkingState { $runningState = $this->GetContainerRunningState($container); - if ($runningState instanceof StoppedState) { - return new StoppedState(); - } elseif ($runningState instanceof ImageDoesNotExistState) { - return new ImageDoesNotExistState(); + if ($runningState === WorkingState::Stopped || $runningState === WorkingState::ImageDoesNotExist) { + return $runningState; } $containerName = $container->GetIdentifier(); @@ -129,12 +120,12 @@ readonly class DockerActionManager { $connection = @fsockopen($containerName, (int)$internalPort, $errno, $errstr, 0.2); if ($connection) { fclose($connection); - return new RunningState(); + return WorkingState::Running; } else { - return new StartingState(); + return WorkingState::Starting; } } else { - return new RunningState(); + return WorkingState::Running; } } @@ -628,7 +619,7 @@ readonly class DockerActionManager { $container = $this->containerDefinitionFetcher->GetContainerById($id); $updateAvailable = ""; - if ($container->GetUpdateState() instanceof VersionDifferentState) { + if ($container->GetUpdateState() === VersionState::Different) { $updateAvailable = '1'; } foreach ($container->GetDependsOn() as $dependency) { @@ -789,7 +780,7 @@ readonly class DockerActionManager { public function sendNotification(Container $container, string $subject, string $message, string $file = '/notify.sh') : void { - if ($this->GetContainerStartingState($container) instanceof RunningState) { + if ($this->GetContainerStartingState($container) === WorkingState::Running) { $containerName = $container->GetIdentifier(); @@ -973,7 +964,7 @@ readonly class DockerActionManager { public function isLoginAllowed() : bool { $id = 'nextcloud-aio-apache'; $apacheContainer = $this->containerDefinitionFetcher->GetContainerById($id); - if ($this->GetContainerStartingState($apacheContainer) instanceof RunningState) { + if ($this->GetContainerStartingState($apacheContainer) === WorkingState::Running) { return false; } return true; @@ -982,7 +973,7 @@ readonly class DockerActionManager { public function isBackupContainerRunning() : bool { $id = 'nextcloud-aio-borgbackup'; $backupContainer = $this->containerDefinitionFetcher->GetContainerById($id); - if ($this->GetContainerRunningState($backupContainer) instanceof RunningState) { + if ($this->GetContainerRunningState($backupContainer) === WorkingState::Running) { return true; } return false; diff --git a/php/templates/containers.twig b/php/templates/containers.twig index 8a7012be..7a47460b 100644 --- a/php/templates/containers.twig +++ b/php/templates/containers.twig @@ -40,19 +40,19 @@ {% endif %} {% for container in containers %} - {% if container.GetDisplayName() != '' and class(container.GetRunningState()) == 'AIO\\Container\\State\\RunningState' %} + {% if container.GetDisplayName() != '' and container.GetRunningState().value == 'running' %} {% set isAnyRunning = true %} {% endif %} - {% if container.GetDisplayName() != '' and class(container.GetRestartingState()) == 'AIO\\Container\\State\\RestartingState' %} + {% if container.GetDisplayName() != '' and container.GetRestartingState().value == 'restarting' %} {% set isAnyRestarting = true %} {% endif %} - {% if container.GetIdentifier() == 'nextcloud-aio-watchtower' and class(container.GetRunningState()) == 'AIO\\Container\\State\\RunningState' %} + {% if container.GetIdentifier() == 'nextcloud-aio-watchtower' and (container.GetRunningState().value == 'running') %} {% set isWatchtowerRunning = true %} {% endif %} - {% if container.GetIdentifier() == 'nextcloud-aio-domaincheck' and class(container.GetRunningState()) == 'AIO\\Container\\State\\RunningState' %} + {% if container.GetIdentifier() == 'nextcloud-aio-domaincheck' and (container.GetRunningState().value == 'running' %} {% set isDomaincheckRunning = true %} {% endif %} - {% if container.GetIdentifier() == 'nextcloud-aio-apache' and class(container.GetStartingState()) == 'AIO\\Container\\State\\StartingState' %} + {% if container.GetIdentifier() == 'nextcloud-aio-apache' and container.GetStartingState().value == 'starting' %} {% set isApacheStarting = true %} {% endif %} {% endfor %} @@ -261,14 +261,14 @@ {% for container in containers %} {% if container.GetDisplayName() != '' %}