From 6e42686fc79ddf92ebd673ec4e309228a265d7a8 Mon Sep 17 00:00:00 2001 From: Rekryt Date: Sun, 22 Sep 2024 20:46:54 +0300 Subject: [PATCH] feat: make preloading of CIDR asynchronous at application startup --- src/App/Service/IPListService.php | 1 + src/Domain/Entity/Site.php | 19 +++++++++++++++++++ src/Domain/Factory/SiteFactory.php | 5 ----- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/App/Service/IPListService.php b/src/App/Service/IPListService.php index b0591cd..41668db 100644 --- a/src/App/Service/IPListService.php +++ b/src/App/Service/IPListService.php @@ -49,6 +49,7 @@ class IPListService { EventLoop::queue(function () { foreach ($this->sites as $siteEntity) { if ($siteEntity->timeout) { + $siteEntity->preload(); $siteEntity->reload(); delay(1); } diff --git a/src/Domain/Entity/Site.php b/src/Domain/Entity/Site.php index be74e38..2d0e3a0 100644 --- a/src/Domain/Entity/Site.php +++ b/src/Domain/Entity/Site.php @@ -44,6 +44,25 @@ final class Site { $this->dnsHelper = new DNSHelper($dns); } + /** + * @return void + */ + public function preload(): void { + $startTime = time(); + App::getLogger()->notice('Preloading for ' . $this->name, ['started']); + if ($this->timeout) { + $this->cidr4 = SiteFactory::normalize( + IP4Helper::processCIDR($this->ip4, SiteFactory::normalize($this->cidr4)), + true + ); + $this->cidr6 = SiteFactory::normalize( + IP6Helper::processCIDR($this->ip6, SiteFactory::normalize($this->cidr6)), + true + ); + } + App::getLogger()->notice('Preloaded for ' . $this->name, ['finished', time() - $startTime]); + } + /** * @return void */ diff --git a/src/Domain/Factory/SiteFactory.php b/src/Domain/Factory/SiteFactory.php index 7ccf29d..3bff1d7 100644 --- a/src/Domain/Factory/SiteFactory.php +++ b/src/Domain/Factory/SiteFactory.php @@ -77,11 +77,6 @@ class SiteFactory { $ip4 = self::normalize($ip4, true); $ip6 = self::normalize($ip6, true); - if ($timeout) { - $cidr4 = self::normalize(IP4Helper::processCIDR($ip4, self::normalize($cidr4)), true); - $cidr6 = self::normalize(IP6Helper::processCIDR($ip6, self::normalize($cidr6)), true); - } - return new Site($name, $group, $domains, $dns, $timeout, $ip4, $ip6, $cidr4, $cidr6, $external); }