Files
23cm/vendor/yiisoft/yii2-queue/src/drivers/file/Command.php
2026-01-25 18:18:09 +08:00

106 lines
2.1 KiB
PHP

<?php
/**
* @link https://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license https://www.yiiframework.com/license/
*/
namespace yii\queue\file;
use yii\console\Exception;
use yii\queue\cli\Command as CliCommand;
use yii\queue\cli\InfoAction;
/**
* Manages application file-queue.
*
* @author Roman Zhuravlev <zhuravljov@gmail.com>
*/
class Command extends CliCommand
{
/**
* @var Queue
*/
public $queue;
/**
* @var string
*/
public $defaultAction = 'info';
/**
* @inheritdoc
*/
public function actions()
{
return [
'info' => InfoAction::class,
];
}
/**
* @inheritdoc
*/
protected function isWorkerAction($actionID)
{
return in_array($actionID, ['run', 'listen']);
}
/**
* Runs all jobs from file-queue.
* It can be used as cron job.
*
* @return null|int exit code.
*/
public function actionRun()
{
return $this->queue->run(false);
}
/**
* Listens file-queue and runs new jobs.
* It can be used as daemon process.
*
* @param int $timeout number of seconds to sleep before next reading of the queue.
* @throws Exception when params are invalid.
* @return null|int exit code.
*/
public function actionListen($timeout = 3)
{
if (!is_numeric($timeout)) {
throw new Exception('Timeout must be numeric.');
}
if ($timeout < 1) {
throw new Exception('Timeout must be greater than zero.');
}
return $this->queue->run(true, $timeout);
}
/**
* Clears the queue.
*
* @since 2.0.1
*/
public function actionClear()
{
if ($this->confirm('Are you sure?')) {
$this->queue->clear();
}
}
/**
* Removes a job by id.
*
* @param int $id
* @throws Exception when the job is not found.
* @since 2.0.1
*/
public function actionRemove($id)
{
if (!$this->queue->remove((int) $id)) {
throw new Exception('The job is not found.');
}
}
}