diff options
author | Côme Chilliet <come.chilliet@nextcloud.com> | 2022-05-23 12:30:26 +0200 |
---|---|---|
committer | Côme Chilliet (Rebase PR Action) <come-nc@users.noreply.github.com> | 2022-07-11 09:46:23 +0000 |
commit | 3d0117990749bebe5394ff664d62494ae9a6fa1e (patch) | |
tree | 0eafa0b6fcc4d8d15654254ddd03db5209842996 /core/Command | |
parent | 0b7779b6ff7dcb603d1088f3ea8fbf42ce5a98c4 (diff) | |
download | nextcloud-server-3d0117990749bebe5394ff664d62494ae9a6fa1e.tar.gz nextcloud-server-3d0117990749bebe5394ff664d62494ae9a6fa1e.zip |
Add command to list jobs
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Diffstat (limited to 'core/Command')
-rw-r--r-- | core/Command/Background/ListCommand.php | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/core/Command/Background/ListCommand.php b/core/Command/Background/ListCommand.php new file mode 100644 index 00000000000..a0bf611606f --- /dev/null +++ b/core/Command/Background/ListCommand.php @@ -0,0 +1,95 @@ +<?php + +declare(strict_types=1); +/** + * @copyright Copyright (c) 2021, Joas Schilling <coding@schilljs.com> + * + * @author Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Core\Command\Background; + +use OC\Core\Command\Base; +use OCP\BackgroundJob\IJob; +use OCP\BackgroundJob\IJobList; +use OCP\ILogger; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class ListCommand extends Base { + /** @var IJobList */ + protected $jobList; + /** @var ILogger */ + protected $logger; + + public function __construct(IJobList $jobList, + ILogger $logger) { + parent::__construct(); + $this->jobList = $jobList; + $this->logger = $logger; + } + + protected function configure(): void { + $this + ->setName('background-job:list') + ->setDescription('List background jobs') + ->addOption( + 'class', + 'c', + InputOption::VALUE_OPTIONAL, + 'Job class to search for', + null + )->addOption( + 'limit', + 'l', + InputOption::VALUE_OPTIONAL, + 'Number of jobs to retrieve', + '10' + )->addOption( + 'offset', + 'o', + InputOption::VALUE_OPTIONAL, + 'Offset for retrieving jobs', + '0' + ) + ; + parent::configure(); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $jobs = $this->jobList->getJobs($input->getOption('class'), (int)$input->getOption('limit'), (int)$input->getOption('offset')); + $this->writeArrayInOutputFormat($input, $output, $this->formatJobs($jobs)); + return 0; + } + + protected function formatJobs(array $jobs): array { + return array_map( + fn($job) => [ + 'id' => $job->getId(), + 'class' => get_class($job), + 'last_run' => $job->getLastRun(), + 'argument' => json_encode($job->getArgument()), + ], + $jobs + ); + } +} |