diff options
| author | Andrew Dolgov <fox@fakecake.org> | 2025-05-04 17:40:13 +0000 |
|---|---|---|
| committer | Andrew Dolgov <fox@fakecake.org> | 2025-05-04 17:40:13 +0000 |
| commit | 6d11acc713d4f95375b06a6ee94d72d5bd0218cf (patch) | |
| tree | 71619a17b544390cc675fbae6fbcdfbae5006e18 /classes/Scheduler.php | |
| parent | d4faf2d3690592e64bd40c2d15d69897a63600a0 (diff) | |
| parent | 4cc40ddaa4552b2be9b696dc7b74e5c5c64fa372 (diff) | |
Merge branch 'plugin-cringe' into 'master'
expose scheduled tasks to plugins, switch cache_starred_images plugin to use...
See merge request tt-rss/tt-rss!129
Diffstat (limited to 'classes/Scheduler.php')
| -rw-r--r-- | classes/Scheduler.php | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/classes/Scheduler.php b/classes/Scheduler.php index 13d8e94ea..b5df8f3fe 100644 --- a/classes/Scheduler.php +++ b/classes/Scheduler.php @@ -3,16 +3,23 @@ class Scheduler { private static ?Scheduler $instance = null; const TASK_RC_EXCEPTION = -100; + const DEFAULT_NAME = 'Default Scheduler'; /** @var array<string, mixed> */ private array $scheduled_tasks = []; - function __construct() { - $this->add_scheduled_task('purge_orphaned_scheduled_tasks', '@weekly', - function() { - return $this->purge_orphaned_tasks(); - } - ); + private string $name; + + function __construct(string $name = self::DEFAULT_NAME) { + $this->set_name($name); + + if ($name === self::DEFAULT_NAME) { + $this->add_scheduled_task('purge_orphaned_scheduled_tasks', '@weekly', + function() { + return $this->purge_orphaned_tasks(); + } + ); + } } public static function getInstance(): Scheduler { @@ -22,6 +29,11 @@ class Scheduler { return self::$instance; } + /** Sets specific identifier for this instance of Scheduler used in debug logging */ + public function set_name(string $name) : void { + $this->name = $name; + } + /** * Adds a backend scheduled task which will be executed by updater (if due) during housekeeping. * @@ -42,13 +54,13 @@ class Scheduler { $task_name = strtolower($task_name); if (isset($this->scheduled_tasks[$task_name])) { - user_error("Attempted to override already registered scheduled task $task_name", E_USER_WARNING); + user_error("[$this->name] Attempted to override already registered scheduled task $task_name", E_USER_WARNING); return false; } else { try { $cron = new Cron\CronExpression($cron_expression); } catch (InvalidArgumentException $e) { - user_error("Attempt to register scheduled task $task_name failed: " . $e->getMessage(), E_USER_WARNING); + user_error("[$this->name] Attempt to register scheduled task $task_name failed: " . $e->getMessage(), E_USER_WARNING); return false; } @@ -64,7 +76,7 @@ class Scheduler { * Execute scheduled tasks which are due to run and record last run timestamps. */ function run_due_tasks() : void { - Debug::log('Processing all scheduled tasks...'); + Debug::log("[$this->name] Processing all scheduled tasks..."); $tasks_succeeded = 0; $tasks_failed = 0; @@ -89,7 +101,7 @@ class Scheduler { try { $rc = (int) $task['callback'](); } catch (Exception $e) { - user_error("Scheduled task $task_name failed with exception: " . $e->getMessage(), E_USER_WARNING); + user_error("[$this->name] Scheduled task $task_name failed with exception: " . $e->getMessage(), E_USER_WARNING); $rc = self::TASK_RC_EXCEPTION; } @@ -108,6 +120,7 @@ class Scheduler { $task_record->last_run = Db::NOW(); $task_record->last_duration = $task_duration; $task_record->last_rc = $rc; + $task_record->last_cron_expression = $task['cron']->getExpression(); $task_record->save(); } else { @@ -118,6 +131,7 @@ class Scheduler { 'last_duration' => $task_duration, 'last_rc' => $rc, 'last_run' => Db::NOW(), + 'last_cron_expression' => $task['cron']->getExpression() ]); $task_record->save(); @@ -125,7 +139,7 @@ class Scheduler { } } - Debug::log("Processing scheduled tasks finished with $tasks_succeeded tasks succeeded and $tasks_failed tasks failed."); + Debug::log("[$this->name] Processing scheduled tasks finished with $tasks_succeeded tasks succeeded and $tasks_failed tasks failed."); } /** |