/** * Initialises the command just after the input has been validated. * * This is mainly useful when a lot of commands extends one main command * where some things need to be initialised based on the input arguments and options. * * @param InputInterface $input An InputInterface instance * @param OutputInterface $output An OutputInterface instance * @return void */ protected function initialize(InputInterface $input, OutputInterface $output) { $this->parseConfig($input->getOptions(), $this->getNativeDefinition()->getOptionDefaults()); $config = $this->getConfig(); // Configure Redis Resque\Redis::setConfig(array('scheme' => $config['scheme'], 'host' => $config['host'], 'port' => $config['port'], 'namespace' => $config['namespace'], 'password' => $config['password'])); // Set the verbosity if (array_key_exists('verbose', $config)) { if (!$input->getOption('verbose') and !$input->getOption('quiet') and is_int($config['verbose'])) { $output->setVerbosity($config['verbose']); } else { $this->config['verbose'] = $output->getVerbosity(); } } // Set the monolog loggers, it's possible to speficfy multiple handlers $logs = array_key_exists('log', $config) ? array_unique($config['log']) : array(); empty($logs) and $logs[] = 'console'; $handlerConnector = new Resque\Logger\Handler\Connector($this, $input, $output); $handlers = array(); foreach ($logs as $log) { $handlers[] = $handlerConnector->resolve($log); } $this->logger = $logger = new Resque\Logger($handlers); // Unset some variables so as not to pass to include file unset($logs, $handlerConnector, $handlers); // Include file? if (array_key_exists('include', $config) and strlen($include = $config['include'])) { if (!($includeFile = realpath(dirname($include) . '/' . basename($include))) or !is_readable($includeFile) or !is_file($includeFile) or substr($includeFile, -4) !== '.php') { throw new \InvalidArgumentException('The include file "' . $include . '" is not a readable php file.'); } try { require_once $includeFile; } catch (\Exception $e) { throw new \RuntimeException('The include file "' . $include . '" threw an exception: "' . $e->getMessage() . '" on line ' . $e->getLine()); } } // This outputs all the events that are fired, useful for learning // about when events are fired in the command flow if (array_key_exists('events', $config) and $config['events'] === true) { Resque\Event::listen('*', function ($event) use($output) { $data = array_map(function ($d) { $d instanceof \Exception and $d = '"' . $d->getMessage() . '"'; is_array($d) and $d = '[' . implode(',', $d) . ']'; return (string) $d; }, array_slice(func_get_args(), 1)); $output->writeln('<comment>-> event:' . Resque\Event::eventName($event) . '(' . implode(',', $data) . ')</comment>'); }); } }
protected function execute(InputInterface $input, OutputInterface $output) { Resque\Redis::setConfig(array('namespace' => 'resque:speedtest')); $testTime = (int) $input->getOption('time') ?: 5; @unlink(RESQUE_DIR . '/test/speed/output.log'); $process = new Process(RESQUE_BIN_DIR . '/resque worker:start -c ' . RESQUE_DIR . '/test/speed/config.yml'); $start = microtime(true); $process->start(); do { $this->setProgress($output, Resque::stats(), $testTime, $start); usleep(500); } while ($process->isRunning() and $testTime > microtime(true) - $start); $process->stop(0, SIGTERM); if (!$process->isSuccessful()) { list($error) = explode('Exception trace:', $process->getErrorOutput()); $output->write('<error>' . $error . '</error>'); } // Clear down Redis $redis = Resque\Redis::instance(); $keys = $redis->keys('*'); foreach ($keys as $key) { $redis->del($key); } }
/** * Reads and loads data from a config file * * @param string $file The config file path * @return bool */ public static function loadConfig($file = self::DEFAULT_CONFIG_FILE) { self::readConfigFile($file); Redis::setConfig(array('scheme' => static::getConfig('redis.scheme', Redis::DEFAULT_SCHEME), 'host' => static::getConfig('redis.host', Redis::DEFAULT_HOST), 'port' => static::getConfig('redis.port', Redis::DEFAULT_PORT), 'namespace' => static::getConfig('redis.namespace', Redis::DEFAULT_NS), 'password' => static::getConfig('redis.password', Redis::DEFAULT_PASSWORD))); return true; }