diff --git a/php/src/Container/Container.php b/php/src/Container/Container.php index 24d94d6c48a..0f9e9de575d 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 @@ public function GetVolumes() : ContainerVolumes { return $this->volumes; } - public function GetRunningState() : IContainerState { + public function GetRunningState() : ContainerState { return $this->dockerActionManager->GetContainerRunningState($this); } - public function GetRestartingState() : IContainerState { + public function GetRestartingState() : ContainerState { 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() : ContainerState { return $this->dockerActionManager->GetContainerStartingState($this); } diff --git a/php/src/Container/ContainerState.php b/php/src/Container/ContainerState.php new file mode 100644 index 00000000000..f6481027fdd --- /dev/null +++ b/php/src/Container/ContainerState.php @@ -0,0 +1,12 @@ +GetRunningState() instanceof RunningState) { + if ($container->GetRunningState() === ContainerState::Running) { error_log('Not starting ' . $id . ' because it was already started.'); return; } @@ -254,10 +254,10 @@ public function StartDomaincheckContainer() : void $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() === ContainerState::Running) { return; // Don't start if domaincheck is already running - } elseif ($domaincheckContainer->GetRunningState() instanceof RunningState) { + } elseif ($domaincheckContainer->GetRunningState() === ContainerState::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 5df9e6f4ee8..12a641e0869 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\ContainerState; use AIO\Data\ConfigurationManager; use GuzzleHttp\Client; use GuzzleHttp\Exception\RequestException; @@ -42,14 +35,14 @@ private function BuildImageName(Container $container) : string { return $container->GetContainerName() . ':' . $tag; } - public function GetContainerRunningState(Container $container) : IContainerState + public function GetContainerRunningState(Container $container) : ContainerState { $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 ContainerState::ImageDoesNotExist; } throw $e; } @@ -57,20 +50,20 @@ public function GetContainerRunningState(Container $container) : IContainerState $responseBody = json_decode((string)$response->getBody(), true); if ($responseBody['State']['Running'] === true) { - return new RunningState(); + return ContainerState::Running; } else { - return new StoppedState(); + return ContainerState::Stopped; } } - public function GetContainerRestartingState(Container $container) : IContainerState + public function GetContainerRestartingState(Container $container) : ContainerState { $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 ContainerState::ImageDoesNotExist; } throw $e; } @@ -78,13 +71,13 @@ public function GetContainerRestartingState(Container $container) : IContainerSt $responseBody = json_decode((string)$response->getBody(), true); if ($responseBody['State']['Restarting'] === true) { - return new RestartingState(); + return ContainerState::Restarting; } else { - return new NotRestartingState(); + return ContainerState::NotRestarting; } } - public function GetContainerUpdateState(Container $container) : IContainerState + public function GetContainerUpdateState(Container $container) : VersionState { $tag = $container->GetImageTag(); if ($tag === '%AIO_CHANNEL%') { @@ -93,28 +86,26 @@ public function GetContainerUpdateState(Container $container) : IContainerState $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) : ContainerState { $runningState = $this->GetContainerRunningState($container); - if ($runningState instanceof StoppedState) { - return new StoppedState(); - } elseif ($runningState instanceof ImageDoesNotExistState) { - return new ImageDoesNotExistState(); + if ($runningState === ContainerState::Stopped || $runningState === ContainerState::ImageDoesNotExist) { + return $runningState; } $containerName = $container->GetIdentifier(); @@ -129,12 +120,12 @@ public function GetContainerStartingState(Container $container) : IContainerStat $connection = @fsockopen($containerName, (int)$internalPort, $errno, $errstr, 0.2); if ($connection) { fclose($connection); - return new RunningState(); + return ContainerState::Running; } else { - return new StartingState(); + return ContainerState::Starting; } } else { - return new RunningState(); + return ContainerState::Running; } } @@ -628,7 +619,7 @@ private function isContainerUpdateAvailable(string $id) : string $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 @@ public function IsMastercontainerUpdateAvailable() : bool public function sendNotification(Container $container, string $subject, string $message, string $file = '/notify.sh') : void { - if ($this->GetContainerStartingState($container) instanceof RunningState) { + if ($this->GetContainerStartingState($container) === ContainerState::Running) { $containerName = $container->GetIdentifier(); @@ -973,7 +964,7 @@ public function GetDatabasecontainerExitCode() : int public function isLoginAllowed() : bool { $id = 'nextcloud-aio-apache'; $apacheContainer = $this->containerDefinitionFetcher->GetContainerById($id); - if ($this->GetContainerStartingState($apacheContainer) instanceof RunningState) { + if ($this->GetContainerStartingState($apacheContainer) === ContainerState::Running) { return false; } return true; @@ -982,7 +973,7 @@ public function isLoginAllowed() : bool { public function isBackupContainerRunning() : bool { $id = 'nextcloud-aio-borgbackup'; $backupContainer = $this->containerDefinitionFetcher->GetContainerById($id); - if ($this->GetContainerRunningState($backupContainer) instanceof RunningState) { + if ($this->GetContainerRunningState($backupContainer) === ContainerState::Running) { return true; } return false; diff --git a/php/templates/containers.twig b/php/templates/containers.twig index 8a7012be8f9..df6d5f4c47f 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() != '' %}
  • - {% if class(container.GetStartingState()) == 'AIO\\Container\\State\\StartingState' %} + {% if container.GetStartingState().value == 'starting' %} {{ container.GetDisplayName() }} (Starting) {% if container.GetDocumentation() != '' %} (docs) {% endif %} - {% elseif class(container.GetRunningState()) == 'AIO\\Container\\State\\RunningState' %} + {% elseif container.GetRunningState().value == 'running' %} {{ container.GetDisplayName() }} (Running) {% if container.GetDocumentation() != '' %}