From 424612d98df505db4345551a2bf5d201f44d0409 Mon Sep 17 00:00:00 2001 From: Eric Espie Date: Wed, 29 Apr 2026 17:09:51 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B09165=20-=20Moved=20ExecutionLimits?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/utils.inc.php | 26 ---------- .../src/Helper/ExecutionLimits.php | 32 ------------- .../src/Service/DataCleanupService.php | 7 +-- .../vendor/composer/autoload_classmap.php | 1 - .../vendor/composer/autoload_static.php | 1 - lib/autoload.php | 5 +- lib/composer/autoload_classmap.php | 1 + lib/composer/autoload_psr4.php | 2 +- lib/composer/autoload_static.php | 5 +- lib/composer/platform_check.php | 5 +- sources/Service/Limits/ExecutionLimits.php | 48 +++++++++++++++++++ 11 files changed, 58 insertions(+), 75 deletions(-) delete mode 100644 datamodels/2.x/combodo-data-feature-removal/src/Helper/ExecutionLimits.php create mode 100644 sources/Service/Limits/ExecutionLimits.php diff --git a/application/utils.inc.php b/application/utils.inc.php index 4fe8544130..915319c71b 100644 --- a/application/utils.inc.php +++ b/application/utils.inc.php @@ -3216,30 +3216,4 @@ TXT return (int)$sLimit; } } - - /** - * Check if execution should stop due to time limit or memory limit - * - * @param int $iMaxTime Absolute max time in seconds since epoch - * @param int $iMaxMemoryPercent Percent of memory usage allowed (0-100) - * - * @return bool true if execution should stop - */ - public static function ShouldStopExecution(int $iMaxTime = 0, int $iMaxMemoryPercent = 100): bool - { - if (($iMaxTime != 0) && (time() > $iMaxTime)) { - \IssueLog::Debug(__METHOD__.' timeout '.time()." (current) > $iMaxTime (max)"); - return true; - } - - $iMaxMemoryPercent = (int)min(max($iMaxMemoryPercent, 0), 100); - $iMemory = memory_get_usage(true); - $iMaxMemory = self::GetMemoryLimit() * $iMaxMemoryPercent / 100; - if ($iMemory > $iMaxMemory) { - \IssueLog::Debug(__METHOD__." Memory limit $iMemory (current) > $iMaxMemory (max)"); - return true; - } - - return false; - } } diff --git a/datamodels/2.x/combodo-data-feature-removal/src/Helper/ExecutionLimits.php b/datamodels/2.x/combodo-data-feature-removal/src/Helper/ExecutionLimits.php deleted file mode 100644 index 90f0b7e5b7..0000000000 --- a/datamodels/2.x/combodo-data-feature-removal/src/Helper/ExecutionLimits.php +++ /dev/null @@ -1,32 +0,0 @@ -iMaxTime = $iMaxTime; - $this->iMaxMemoryPercent = $iMaxMemoryPercent; - } - - public function ShouldStopExecution(): bool - { - return utils::ShouldStopExecution($this->iMaxTime, $this->iMaxMemoryPercent); - } - -} diff --git a/datamodels/2.x/combodo-data-feature-removal/src/Service/DataCleanupService.php b/datamodels/2.x/combodo-data-feature-removal/src/Service/DataCleanupService.php index 35cf36ea80..e2d3956b7a 100644 --- a/datamodels/2.x/combodo-data-feature-removal/src/Service/DataCleanupService.php +++ b/datamodels/2.x/combodo-data-feature-removal/src/Service/DataCleanupService.php @@ -3,12 +3,10 @@ namespace Combodo\iTop\DataFeatureRemoval\Service; use CMDBObjectSet; -use Combodo\iTop\DataFeatureRemoval\Helper\DataFeatureRemovalException; use Combodo\iTop\DataFeatureRemoval\Helper\DataFeatureRemovalLog; -use Combodo\iTop\DataFeatureRemoval\Helper\ExecutionLimits; +use Combodo\iTop\Service\Limits\ExecutionLimits; use DBObject; use DBObjectSearch; -use Dict; use MetaModel; class DataCleanupService @@ -20,8 +18,7 @@ class DataCleanupService public function __construct(int $iMaxExecutionTime = 30, int $iMaxMemoryPercent = 80) { DataFeatureRemovalLog::Enable(); - $iMaxTime = time() + $iMaxExecutionTime; - $this->oExecutionLimits = new ExecutionLimits($iMaxTime, $iMaxMemoryPercent); + $this->oExecutionLimits = new ExecutionLimits($iMaxExecutionTime, $iMaxMemoryPercent); } /** diff --git a/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_classmap.php b/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_classmap.php index eba8570f9b..8a38a84587 100644 --- a/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_classmap.php +++ b/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_classmap.php @@ -12,7 +12,6 @@ return array( 'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalException' => $baseDir . '/src/Helper/DataFeatureRemovalException.php', 'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalHelper' => $baseDir . '/src/Helper/DataFeatureRemovalHelper.php', 'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalLog' => $baseDir . '/src/Helper/DataFeatureRemovalLog.php', - 'Combodo\\iTop\\DataFeatureRemoval\\Helper\\ExecutionLimits' => $baseDir . '/src/Helper/ExecutionLimits.php', 'Combodo\\iTop\\DataFeatureRemoval\\Service\\DataCleanupService' => $baseDir . '/src/Service/DataCleanupService.php', 'Combodo\\iTop\\DataFeatureRemoval\\Service\\DataFeatureRemoverExtensionService' => $baseDir . '/src/Service/DataFeatureRemoverExtensionService.php', 'Combodo\\iTop\\DataFeatureRemoval\\Service\\ObjectService' => $baseDir . '/src/Service/ObjectService.php', diff --git a/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_static.php b/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_static.php index 9f42071251..94e5a3715f 100644 --- a/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_static.php +++ b/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_static.php @@ -27,7 +27,6 @@ class ComposerStaticInit4f96a7199e2c0d90e547333758b26464 'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalException' => __DIR__ . '/../..' . '/src/Helper/DataFeatureRemovalException.php', 'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalHelper' => __DIR__ . '/../..' . '/src/Helper/DataFeatureRemovalHelper.php', 'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalLog' => __DIR__ . '/../..' . '/src/Helper/DataFeatureRemovalLog.php', - 'Combodo\\iTop\\DataFeatureRemoval\\Helper\\ExecutionLimits' => __DIR__ . '/../..' . '/src/Helper/ExecutionLimits.php', 'Combodo\\iTop\\DataFeatureRemoval\\Service\\DataCleanupService' => __DIR__ . '/../..' . '/src/Service/DataCleanupService.php', 'Combodo\\iTop\\DataFeatureRemoval\\Service\\DataFeatureRemoverExtensionService' => __DIR__ . '/../..' . '/src/Service/DataFeatureRemoverExtensionService.php', 'Combodo\\iTop\\DataFeatureRemoval\\Service\\ObjectService' => __DIR__ . '/../..' . '/src/Service/ObjectService.php', diff --git a/lib/autoload.php b/lib/autoload.php index 1b6f5ac129..9861c4c24c 100644 --- a/lib/autoload.php +++ b/lib/autoload.php @@ -14,10 +14,7 @@ if (PHP_VERSION_ID < 50600) { echo $err; } } - trigger_error( - $err, - E_USER_ERROR - ); + throw new RuntimeException($err); } require_once __DIR__ . '/composer/autoload_real.php'; diff --git a/lib/composer/autoload_classmap.php b/lib/composer/autoload_classmap.php index 084c426979..50b73aabc9 100644 --- a/lib/composer/autoload_classmap.php +++ b/lib/composer/autoload_classmap.php @@ -625,6 +625,7 @@ return array( 'Combodo\\iTop\\Service\\Events\\iEventServiceSetup' => $baseDir . '/sources/Service/Events/iEventServiceSetup.php', 'Combodo\\iTop\\Service\\Import\\CSVImportPageProcessor' => $baseDir . '/sources/Service/Import/CSVImportPageProcessor.php', 'Combodo\\iTop\\Service\\InterfaceDiscovery\\InterfaceDiscovery' => $baseDir . '/sources/Service/InterfaceDiscovery/InterfaceDiscovery.php', + 'Combodo\\iTop\\Service\\Limits\\ExecutionLimits' => $baseDir . '/sources/Service/Limits/ExecutionLimits.php', 'Combodo\\iTop\\Service\\Links\\LinkSetDataTransformer' => $baseDir . '/sources/Service/Links/LinkSetDataTransformer.php', 'Combodo\\iTop\\Service\\Links\\LinkSetModel' => $baseDir . '/sources/Service/Links/LinkSetModel.php', 'Combodo\\iTop\\Service\\Links\\LinkSetRepository' => $baseDir . '/sources/Service/Links/LinkSetRepository.php', diff --git a/lib/composer/autoload_psr4.php b/lib/composer/autoload_psr4.php index 22fc9f0a3b..be2d5f112e 100644 --- a/lib/composer/autoload_psr4.php +++ b/lib/composer/autoload_psr4.php @@ -65,7 +65,7 @@ return array( 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), 'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'), 'Pelago\\Emogrifier\\' => array($vendorDir . '/pelago/emogrifier/src'), - 'League\\OAuth2\\Client\\' => array($vendorDir . '/league/oauth2-client/src', $vendorDir . '/league/oauth2-google/src'), + 'League\\OAuth2\\Client\\' => array($vendorDir . '/league/oauth2-google/src', $vendorDir . '/league/oauth2-client/src'), 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'), diff --git a/lib/composer/autoload_static.php b/lib/composer/autoload_static.php index 191491d7f0..738a3fe28a 100644 --- a/lib/composer/autoload_static.php +++ b/lib/composer/autoload_static.php @@ -360,8 +360,8 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685 ), 'League\\OAuth2\\Client\\' => array ( - 0 => __DIR__ . '/..' . '/league/oauth2-client/src', - 1 => __DIR__ . '/..' . '/league/oauth2-google/src', + 0 => __DIR__ . '/..' . '/league/oauth2-google/src', + 1 => __DIR__ . '/..' . '/league/oauth2-client/src', ), 'GuzzleHttp\\Psr7\\' => array ( @@ -1026,6 +1026,7 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685 'Combodo\\iTop\\Service\\Events\\iEventServiceSetup' => __DIR__ . '/../..' . '/sources/Service/Events/iEventServiceSetup.php', 'Combodo\\iTop\\Service\\Import\\CSVImportPageProcessor' => __DIR__ . '/../..' . '/sources/Service/Import/CSVImportPageProcessor.php', 'Combodo\\iTop\\Service\\InterfaceDiscovery\\InterfaceDiscovery' => __DIR__ . '/../..' . '/sources/Service/InterfaceDiscovery/InterfaceDiscovery.php', + 'Combodo\\iTop\\Service\\Limits\\ExecutionLimits' => __DIR__ . '/../..' . '/sources/Service/Limits/ExecutionLimits.php', 'Combodo\\iTop\\Service\\Links\\LinkSetDataTransformer' => __DIR__ . '/../..' . '/sources/Service/Links/LinkSetDataTransformer.php', 'Combodo\\iTop\\Service\\Links\\LinkSetModel' => __DIR__ . '/../..' . '/sources/Service/Links/LinkSetModel.php', 'Combodo\\iTop\\Service\\Links\\LinkSetRepository' => __DIR__ . '/../..' . '/sources/Service/Links/LinkSetRepository.php', diff --git a/lib/composer/platform_check.php b/lib/composer/platform_check.php index bb733000d3..f6cf0ea27c 100644 --- a/lib/composer/platform_check.php +++ b/lib/composer/platform_check.php @@ -36,8 +36,7 @@ if ($issues) { echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; } } - trigger_error( - 'Composer detected issues in your platform: ' . implode(' ', $issues), - E_USER_ERROR + throw new \RuntimeException( + 'Composer detected issues in your platform: ' . implode(' ', $issues) ); } diff --git a/sources/Service/Limits/ExecutionLimits.php b/sources/Service/Limits/ExecutionLimits.php new file mode 100644 index 0000000000..6ef3ed7b22 --- /dev/null +++ b/sources/Service/Limits/ExecutionLimits.php @@ -0,0 +1,48 @@ +iMaxTime = $iMaxDuration + time(); + $this->iMaxMemoryPercent = (int)min(max($iMaxMemoryPercent, 0), 100); + } + + /** + * @return bool true when duration is + */ + public function ShouldStopExecution(): bool + { + if (($this->iMaxTime != 0) && (time() > $this->iMaxTime)) { + \IssueLog::Debug(__METHOD__.' timeout '.time()." (current) > $this->iMaxTime (max)"); + return true; + } + + $iMaxMemoryPercent = (int)min(max($this->iMaxMemoryPercent, 0), 100); + $iMemory = memory_get_usage(true); + $iMaxMemory = utils::GetMemoryLimit() * $iMaxMemoryPercent / 100; + if ($iMemory > $iMaxMemory) { + \IssueLog::Debug(__METHOD__." Memory limit $iMemory (current) > $iMaxMemory (max)"); + return true; + } + + return false; + } + +}