Run ID: job identifier as found in database (Snowflake ID) - Class: class of the job - Started at: start time of the job - Server ID: server ID as defined in config.php (see `serverid`). Highlighted if it’s running on current server. - PID: PID of process executing the job - Duration: human readable duration - Memory usage: human readable memory usage peak EOF; $this ->setName('background-job:history') ->setDescription('Show currently running jobs') ->setHelp($help) ->addOption('limit', 'l', InputOption::VALUE_REQUIRED, 'Maximum number of results returned by the command', 200) ->addOption('class', 'c', InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Filter by class name', []) ->addOption('status', 's', InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Filter by status', []); } #[Override] protected function execute(InputInterface $input, OutputInterface $output): int { $limit = (int)$input->getOption('limit'); $classesId = $input->getOption('class'); try { $statuses = array_map(fn (string $value) => JobStatus::from((int)$value), $input->getOption('status')); } catch (ValueError $e) { $output->writeln('Invalid status provided'); $output->writeln($e->getMessage()); return Base::FAILURE; } $jobs = $this->jobRuns->completedJobs($statuses, $classesId, $limit); $this->writeStreamingTableInOutputFormat($input, $output, $this->formatLine($jobs), 20); return Base::SUCCESS; } private function formatLine(iterable $jobs): \Generator { $jobsInfo = []; $now = time(); $currentServerId = $this->config->getSystemValueInt('serverid', -1); foreach ($jobs as $job) { $status = match ($job->status) { JobStatus::RUNNING => 'Running', JobStatus::SUCCEEDED => 'Succeeded', JobStatus::FAILED => 'Failed', JobStatus::CRASHED => 'Crashed', default => 'Unknown', }; yield [ 'Run ID' => $job->runId, 'Status' => $status, 'Class' => $job->className, 'Started at' => $job->startedAt->format('Y-m-d H:i:s'), 'Server ID' => $job->serverId === $currentServerId ? '' . $job->serverId . '' : $job->serverId, 'PID' => $job->pid, 'Duration' => $job->duration . ' ms', 'Memory usage' => Util::humanFileSize($job->memoryPeak * 1024), ]; } return $jobsInfo; } }