diff --git a/php/src/ContainerDefinitionFetcher.php b/php/src/ContainerDefinitionFetcher.php index 60e92305..6658d7d1 100644 --- a/php/src/ContainerDefinitionFetcher.php +++ b/php/src/ContainerDefinitionFetcher.php @@ -27,7 +27,7 @@ class ContainerDefinitionFetcher $this->container = $container; } - public function GetContainerById(string $id): ?Container + public function GetContainerById(string $id): Container { $containers = $this->FetchDefinition(); @@ -37,7 +37,7 @@ class ContainerDefinitionFetcher } } - return null; + throw new \Exception("The provided id " . $id . " was not found in the container definition."); } /** diff --git a/php/src/Controller/DockerController.php b/php/src/Controller/DockerController.php index c22dd0d8..3edf1901 100644 --- a/php/src/Controller/DockerController.php +++ b/php/src/Controller/DockerController.php @@ -163,22 +163,32 @@ class DockerController public function StartDomaincheckContainer() : void { # Don't start if domain is already set - if ($this->configurationManager->GetDomain() != '') { + if ($this->configurationManager->GetDomain() !== '' || $this->configurationManager->wasStartButtonClicked()) { return; } $id = 'nextcloud-aio-domaincheck'; - $container = $this->containerDefinitionFetcher->GetContainerById($id); - // don't start if the domaincheck is already running - if ($container->GetIdentifier() === $id && $container->GetRunningState() instanceof RunningState) { - return; - // don't start if apache is already running - } elseif ($container->GetIdentifier() === self::TOP_CONTAINER && $container->GetRunningState() instanceof RunningState) { + $cacheKey = 'domaincheckWasStarted'; + + $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) { return; + // Don't start if domaincheck is already running + } elseif ($domaincheckContainer->GetRunningState() instanceof RunningState) { + $domaincheckWasStarted = apcu_fetch($cacheKey); + // Start domaincheck again when 10 minutes are over by not returning here + if($domaincheckWasStarted !== false && is_string($domaincheckWasStarted)) { + return; + } } $this->PerformRecursiveContainerStart($id); + + // Cache the start for 10 minutes + apcu_add($cacheKey, '1', 600); } private function StopDomaincheckContainer() : void