<?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */ namespace yii\queue\file; use yii\console\Exception; use yii\queue\cli\Command as CliCommand; /** * 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 that 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.'); } } }