File: /home/petsclubcc/magento/setup/src/Magento/Setup/Console/Command/CronRunCommand.php
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Setup\Console\Command;
use Magento\Framework\App\DeploymentConfig;
use Magento\Setup\Model\Cron\Queue;
use Magento\Setup\Model\Cron\ReadinessCheck;
use Magento\Setup\Model\Cron\Status;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
/**
* Command to run scheduled jobs, this command should be run as a cron job
*/
class CronRunCommand extends AbstractSetupCommand
{
/**
* @var DeploymentConfig
*/
protected $deploymentConfig;
/**
* @var Queue
*/
protected $queue;
/**
* @var Status
*/
protected $status;
/**
* @var ReadinessCheck
*/
protected $readinessCheck;
/**
* @param DeploymentConfig $deploymentConfig
* @param Queue $queue
* @param ReadinessCheck $readinessCheck
* @param Status $status
*/
public function __construct(
DeploymentConfig $deploymentConfig,
Queue $queue,
ReadinessCheck $readinessCheck,
Status $status
) {
$this->deploymentConfig = $deploymentConfig;
$this->queue = $queue;
$this->readinessCheck = $readinessCheck;
$this->status = $status;
parent::__construct();
}
/**
* Initialization of the command
*
* @return void
*/
protected function configure()
{
$this->setName('setup:cron:run')
->setDescription('Runs cron job scheduled for setup application');
parent::configure();
}
/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$notification = 'setup-cron: Please check var/log/update.log for execution summary.';
if (!$this->deploymentConfig->isAvailable()) {
$output->writeln($notification);
$this->status->add('Magento is not installed.', \Psr\Log\LogLevel::INFO);
return \Magento\Framework\Console\Cli::RETURN_SUCCESS;
}
if (!$this->checkRun()) {
$output->writeln($notification);
// we must have an exit code higher than zero to indicate something was wrong
return \Magento\Framework\Console\Cli::RETURN_FAILURE;
}
try {
$this->status->toggleUpdateInProgress();
} catch (\RuntimeException $e) {
$this->status->add($e->getMessage(), \Psr\Log\LogLevel::ERROR);
$output->writeln($notification);
// we must have an exit code higher than zero to indicate something was wrong
return \Magento\Framework\Console\Cli::RETURN_FAILURE;
}
$returnCode = $this->executeJobsFromQueue();
if ($returnCode != \Magento\Framework\Console\Cli::RETURN_SUCCESS) {
$output->writeln($notification);
}
return $returnCode;
}
/**
* Check if Cron job can be run
*
* @return bool
*/
private function checkRun()
{
return $this->readinessCheck->runReadinessCheck()
&& !$this->status->isUpdateInProgress()
&& !$this->status->isUpdateError();
}
/**
* Executes setup jobs from the queue
*
* @return int
*/
private function executeJobsFromQueue()
{
$returnCode = \Magento\Framework\Console\Cli::RETURN_SUCCESS;
try {
while (!empty($this->queue->peek()) && strpos($this->queue->peek()[Queue::KEY_JOB_NAME], 'setup:') === 0) {
$job = $this->queue->popQueuedJob();
$this->status->add(
sprintf('Job "%s" has started' . PHP_EOL, $job),
\Psr\Log\LogLevel::INFO
);
try {
$job->execute();
$this->status->add(
sprintf('Job "%s" has been successfully completed', $job),
\Psr\Log\LogLevel::INFO
);
} catch (\Exception $e) {
$this->status->toggleUpdateError(true);
$this->status->add(
sprintf('An error occurred while executing job "%s": %s', $job, $e->getMessage()),
\Psr\Log\LogLevel::ERROR
);
$returnCode = \Magento\Framework\Console\Cli::RETURN_FAILURE;
}
}
} catch (\Exception $e) {
$this->status->add($e->getMessage(), \Psr\Log\LogLevel::ERROR);
$this->status->toggleUpdateError(true);
$returnCode = \Magento\Framework\Console\Cli::RETURN_FAILURE;
} finally {
$this->status->toggleUpdateInProgress(false);
}
return $returnCode;
}
}