mirror of
https://github.com/idanoo/laravel-resque.git
synced 2024-11-21 16:11:59 +00:00
improvements to config
This commit is contained in:
parent
b60fb0d712
commit
afceda3d95
@ -1,23 +1,105 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace Hlgrrnhrdt\Resque\Console;
|
namespace Hlgrrnhrdt\Resque\Console;
|
||||||
|
|
||||||
use Illuminate\Console\Command;
|
use Hlgrrnhrdt\Resque\ResqueManager;
|
||||||
|
use Illuminate\Console\Command as IlluminateCommand;
|
||||||
|
use Resque_Worker;
|
||||||
use Symfony\Component\Console\Input\InputOption;
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* WorkCommand
|
* WorkCommand
|
||||||
*
|
*
|
||||||
* @author Holger Reinhardt <hlgrrnhrdt@gmail.com>
|
* @author Holger Reinhardt <holger.reinhardt@aboutyou.de>
|
||||||
*/
|
*/
|
||||||
class WorkCommand extends Command
|
class WorkCommand extends IlluminateCommand
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* The console command name.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
protected $name = 'resque:work';
|
protected $name = 'resque:work';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \Hlgrrnhrdt\Resque\ResqueManager
|
||||||
|
*/
|
||||||
|
private $manager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \Hlgrrnhrdt\Resque\ResqueManager $manager
|
||||||
|
*/
|
||||||
|
public function __construct(ResqueManager $manager)
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->manager = $manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
public function fire()
|
public function fire()
|
||||||
{
|
{
|
||||||
$queue = $this->option('queue');
|
$queue = $this->option('queue');
|
||||||
$interval = $this->option('interval');
|
$interval = (int)$this->option('interval');
|
||||||
$count = $this->option('count');
|
$count = (int)$this->option('count');
|
||||||
|
|
||||||
|
$queues = explode(',', $queue);
|
||||||
|
$logLevel = $this->getLogLevel();
|
||||||
|
|
||||||
|
if ($count > 1) {
|
||||||
|
for ($i = 0; $i < $count; $i++) {
|
||||||
|
try {
|
||||||
|
$pid = $this->manager->fork();
|
||||||
|
} catch (\RuntimeException $exception) {
|
||||||
|
$this->error($exception->getMessage());
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0 === $pid) {
|
||||||
|
$this->startWorker($queues, $interval, $logLevel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->startWorker($queues, $interval, $logLevel);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $queues
|
||||||
|
* @param int $logLevel
|
||||||
|
* @param int $interval
|
||||||
|
*/
|
||||||
|
private function startWorker(array $queues, $interval = 5, $logLevel = Resque_Worker::LOG_NONE)
|
||||||
|
{
|
||||||
|
$worker = $this->manager->startWorker($queues, $interval, $logLevel);
|
||||||
|
$this->info(sprintf('Starting worker %s', $worker));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
protected function getLogLevel()
|
||||||
|
{
|
||||||
|
switch ($this->verbosity) {
|
||||||
|
case OutputInterface::VERBOSITY_VERBOSE:
|
||||||
|
$logLevel = Resque_Worker::LOG_NORMAL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OutputInterface::VERBOSITY_VERY_VERBOSE:
|
||||||
|
$logLevel = Resque_Worker::LOG_VERBOSE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
$logLevel = Resque_Worker::LOG_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $logLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -26,9 +108,15 @@ class WorkCommand extends Command
|
|||||||
protected function getOptions()
|
protected function getOptions()
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
['queue', null, InputOption::VALUE_IS_ARRAY & InputOption::VALUE_OPTIONAL, '', 'default'],
|
[
|
||||||
['interval', null, InputOption::VALUE_OPTIONAL, '', 5],
|
'queue',
|
||||||
['count', null, InputOption::VALUE_OPTIONAL, '', 1],
|
null,
|
||||||
|
InputOption::VALUE_IS_ARRAY & InputOption::VALUE_OPTIONAL,
|
||||||
|
'The queue to work on',
|
||||||
|
'default',
|
||||||
|
],
|
||||||
|
['interval', null, InputOption::VALUE_OPTIONAL, 'The queue to work on', 5],
|
||||||
|
['count', null, InputOption::VALUE_OPTIONAL, 'The queue to work on', 1],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
namespace Hlgrrnhrdt\Resque;
|
namespace Hlgrrnhrdt\Resque;
|
||||||
|
|
||||||
use Resque;
|
use Resque;
|
||||||
|
use Resque_Worker;
|
||||||
use RuntimeException;
|
use RuntimeException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -12,13 +13,25 @@ use RuntimeException;
|
|||||||
class ResqueManager
|
class ResqueManager
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var PhpResque
|
* @var Resque
|
||||||
*/
|
*/
|
||||||
private $resque;
|
protected $resque;
|
||||||
|
|
||||||
public function __construct(Resque $resque)
|
/**
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
protected $trackStatus = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ResqueManager constructor.
|
||||||
|
*
|
||||||
|
* @param \Resque $resque
|
||||||
|
* @param bool $trackStatus
|
||||||
|
*/
|
||||||
|
public function __construct(Resque $resque, $trackStatus = false)
|
||||||
{
|
{
|
||||||
$this->resque = $resque;
|
$this->resque = $resque;
|
||||||
|
$this->trackStatus = $trackStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -85,4 +98,20 @@ class ResqueManager
|
|||||||
|
|
||||||
return $pid;
|
return $pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $queues
|
||||||
|
* @param int $interval
|
||||||
|
* @param int $logLevel
|
||||||
|
*
|
||||||
|
* @return \Resque_Worker
|
||||||
|
*/
|
||||||
|
public function startWorker(array $queues, $interval = 5, $logLevel = Resque_Worker::LOG_NONE)
|
||||||
|
{
|
||||||
|
$worker = new Resque_Worker($queues);
|
||||||
|
$worker->logLevel = $logLevel;
|
||||||
|
$worker->work($interval);
|
||||||
|
|
||||||
|
return $worker;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ namespace Hlgrrnhrdt\Resque;
|
|||||||
|
|
||||||
use Config;
|
use Config;
|
||||||
use Hlgrrnhrdt\Resque\Console\WorkCommand;
|
use Hlgrrnhrdt\Resque\Console\WorkCommand;
|
||||||
|
use Illuminate\Contracts\Foundation\Application;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
use Resque;
|
use Resque;
|
||||||
|
|
||||||
@ -24,20 +25,24 @@ class ResqueServiceProvider extends ServiceProvider
|
|||||||
$this->registerWorkCommand();
|
$this->registerWorkCommand();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected function registerManager()
|
protected function registerManager()
|
||||||
{
|
{
|
||||||
$this->app->singleton(ResqueManager::class, function ($app) {
|
$this->app->singleton('resque.manager', function (Application $app) {
|
||||||
$config = $app['config']['resque.connection'];
|
$config = $app['config']['resque.connection'];
|
||||||
|
|
||||||
$resque = new Resque();
|
$resque = new Resque();
|
||||||
$resque->setBackend(implode(':', [$config['host'], $config['port']]), $config['db']);
|
$resque->setBackend(implode(':', [$config['host'], $config['port']]), $config['db']);
|
||||||
return new ResqueManager($resque);
|
|
||||||
|
return new ResqueManager($resque, $app['config']['resque.trackStatus']);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function registerWorkCommand()
|
protected function registerWorkCommand()
|
||||||
{
|
{
|
||||||
$this->app->singleton('command.resque.work', function () {
|
$this->app->singleton('command.resque.work', function (Application $app) {
|
||||||
return new WorkCommand();
|
return new WorkCommand($app->make('resque.manager'));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user