diff --git a/src/Environment/Parameters.yml b/src/Environment/Parameters.yml index 03a19581..894fa4a0 100644 --- a/src/Environment/Parameters.yml +++ b/src/Environment/Parameters.yml @@ -8,3 +8,4 @@ parameters: neighborhoods.kojo.environment.parameters.database_port: 0 neighborhoods.kojo.environment.parameters.database_name: '' neighborhoods.kojo.environment.parameters.lock_prefix: '' + neighborhoods.kojo.environment.parameters.kojospace_logging_levels.disabled_job_type: !php/const \Psr\Log\LogLevel::WARNING diff --git a/src/Scheduler.php b/src/Scheduler.php index 32c801c0..0a1fb3f3 100644 --- a/src/Scheduler.php +++ b/src/Scheduler.php @@ -21,6 +21,9 @@ class Scheduler implements SchedulerInterface use Semaphore\Resource\Factory\AwareTrait; use Logger\AwareTrait; + /** @var string */ + private $disabledJobTypeLogLevel; + public function scheduleStaticJobs(): SchedulerInterface { if ($this->_getSemaphoreResource(self::SEMAPHORE_RESOURCE_NAME_SCHEDULE)->testAndSetLock()) { @@ -46,13 +49,7 @@ protected function _scheduleStaticJobs(): SchedulerInterface $this->_getSchedulerJobCollection()->setReferenceDateTime($this->_getTime()->getNow()); foreach ($this->_getSchedulerJobTypeCollection()->getIterator() as $jobType) { if (!$jobType->getIsEnabled()) { - $this->_getLogger()->warning( - sprintf( - 'Scheduler skipping disabled job type [%s]', - $jobType->getCode() - ), - ['disabled_job_type_skipped' => $jobType->getCode()] - ); + $this->logDisabledJobTypeSkippedEvent($jobType->getCode()); continue; } $cronExpressionString = $jobType->getCronExpression(); @@ -76,4 +73,41 @@ protected function _scheduleStaticJobs(): SchedulerInterface return $this; } + + private function logDisabledJobTypeSkippedEvent(string $jobTypeCode) : SchedulerInterface + { + $logLevel = $this->getDisabledJobTypeLogLevel(); + + if (!method_exists(\Psr\Log\LoggerInterface::class, $logLevel)) { + throw new \UnexpectedValueException("Unexpected value for disabled job type log level [$logLevel]"); + } + + $this->_getLogger()->log( + $logLevel, + sprintf( + 'Scheduler skipping disabled job type [%s]', + $jobTypeCode + ), + ['disabled_job_type_skipped' => $jobTypeCode] + ); + + return $this; + } + + private function getDisabledJobTypeLogLevel() : string + { + if ($this->disabledJobTypeLogLevel === null) { + throw new \LogicException('Scheduler disabledJobTypeLogLevel has not been set.'); + } + return $this->disabledJobTypeLogLevel; + } + + public function setDisabledJobTypeLogLevel(string $disabledJobTypeLogLevel) : SchedulerInterface + { + if ($this->disabledJobTypeLogLevel !== null) { + throw new \LogicException('Scheduler disabledJobTypeLogLevel is already set.'); + } + $this->disabledJobTypeLogLevel = $disabledJobTypeLogLevel; + return $this; + } } diff --git a/src/Scheduler.yml b/src/Scheduler.yml index c33c8911..6de3cb5f 100644 --- a/src/Scheduler.yml +++ b/src/Scheduler.yml @@ -1,3 +1,5 @@ +parameters: + neighborhoods.kojo.scheduler.disabled_job_type_log_level: '%neighborhoods.kojo.environment.parameters.kojospace_logging_levels.disabled_job_type%' services: neighborhoods.kojo.scheduler: class: Neighborhoods\Kojo\Scheduler @@ -11,6 +13,7 @@ services: - [addSemaphoreResourceFactory, ['@semaphore.resource.factory-schedule']] - [setSchedulerCache, ['@scheduler.cache']] - [setLogger, ['@process.pool.logger']] + - [setDisabledJobTypeLogLevel, ['%neighborhoods.kojo.scheduler.disabled_job_type_log_level%']] scheduler: alias: neighborhoods.kojo.scheduler public: false diff --git a/src/SchedulerInterface.php b/src/SchedulerInterface.php index 08ed5d41..38f51c0b 100644 --- a/src/SchedulerInterface.php +++ b/src/SchedulerInterface.php @@ -11,5 +11,7 @@ interface SchedulerInterface public function setSchedulerCache(CacheInterface $schedulerCache); + public function setDisabledJobTypeLogLevel(string $disabledJobTypeLogLevel) : SchedulerInterface; + public function scheduleStaticJobs(): SchedulerInterface; -} \ No newline at end of file +}