From e45092340909a064e8f848c798e2c2286bf76df1 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Wed, 6 Nov 2019 21:38:08 -0700 Subject: [PATCH] Ability to force-run a Scheduled job #2720 --- CHANGELOG.md | 6 ++++ .../src/Grav/Common/Scheduler/Scheduler.php | 17 +++++++++++ .../src/Grav/Console/Cli/SchedulerCommand.php | 30 +++++++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 496f0f892..f01f46e3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# v1.7.0-rc.1 +## mm/dd/2019 + +1. [](#new) + * Added new `-r ` option for Schduler CLI command to force-run a job [#2720](https://github.com/getgrav/grav/issues/2720) + # v1.7.0-rc.1 ## 11/06/2019 diff --git a/system/src/Grav/Common/Scheduler/Scheduler.php b/system/src/Grav/Common/Scheduler/Scheduler.php index 8adf2b0e2..e2ee7deef 100644 --- a/system/src/Grav/Common/Scheduler/Scheduler.php +++ b/system/src/Grav/Common/Scheduler/Scheduler.php @@ -123,6 +123,23 @@ class Scheduler return array_merge($background, $foreground); } + /** + * Get a specific Job based on id + * + * @param $jobid + * @return Job|null + */ + public function getJob($jobid) + { + $all = $this->getAllJobs(); + foreach ($all as $job) { + if ($jobid == $job->getId()) { + return $job; + } + } + return null; + } + /** * Queues a PHP function execution. * diff --git a/system/src/Grav/Console/Cli/SchedulerCommand.php b/system/src/Grav/Console/Cli/SchedulerCommand.php index 96af69f29..a0068ed6b 100644 --- a/system/src/Grav/Console/Cli/SchedulerCommand.php +++ b/system/src/Grav/Console/Cli/SchedulerCommand.php @@ -11,6 +11,7 @@ namespace Grav\Console\Cli; use Cron\CronExpression; use Grav\Common\Grav; +use Grav\Common\Scheduler\Job; use Grav\Common\Utils; use Grav\Common\Scheduler\Scheduler; use Grav\Console\ConsoleCommand; @@ -43,6 +44,12 @@ class SchedulerCommand extends ConsoleCommand InputOption::VALUE_NONE, 'Show Job Details' ) + ->addOption( + 'run', + 'r', + InputOption::VALUE_REQUIRED, + 'Force run a job with a specific Job ID' + ) ->setDescription('Run the Grav Scheduler. Best when integrated with system cron') ->setHelp("Running without any options will force the Scheduler to run through it's jobs and process them"); } @@ -149,6 +156,29 @@ class SchedulerCommand extends ConsoleCommand $table->setRows($rows); $table->render(); + } elseif ($jobid = $this->input->getOption('run')) { + $io->title('Force Run Job: ' . $jobid); + + /** @var Job $job */ + $job = $scheduler->getJob($jobid); + + if ($job) { + $job->inForeground()->run(); + + if ($job->isSuccessful()) { + $io->success('Job ran successfully...'); + } else { + $io->error('Job failed to run successfully...'); + } + + $output = $job->getOutput(); + + if ($output) { + $this->output->write($output); + } + } else { + $io->error('Could not find a job with id: ' . $jobid); + } } elseif ($this->input->getOption('install')) { $io->title('Install Scheduler');