/** * @return VMConfig[] */ protected function loadVMConfig() { if (null === $this->VMConfig) { $this->VMConfig = ConfigManager::loadVMConfig(); } $result = []; foreach ($this->VMConfig as $config) { $result[$config->getName()] = $config; } return $result; }
/** * @param string $name * * @return static */ public static function init($name = null) { $config = ConfigManager::getConfig(); $name = $name ?: $config->get('worker_manager.monitoring.node'); return new static($config, $name); }
/** * construct */ public function __construct() { ConfigManager::register(dirname(__DIR__) . '/Resources/config'); parent::__construct(); }
/** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $monitoring = WorkerMonitoring::init(); $monitoring->updateAction(self::ACTION_MONITORING); $statusManager = $this->getStatusManager(); $statusManager->setOptions(ConfigManager::getConfig()->get('worker_manager.options') ?: []); $updateManager = $this->getUpdateManager(); $logger = $this->getLogger(); list($workers, $VMConfigs) = $statusManager->initData(); $output->writeln('Worker monitoring: <info>running</info>'); $output->write('Balancing: '); if ($monitoring->isBalancing()) { $output->writeln('<info>yes</info>'); } else { $output->writeln('<comment>no</comment>'); } $output->writeln('Node name: <info>' . $monitoring->getName() . '</info>'); $output->writeln('Node PID: <info>' . $monitoring->getPID() . '</info>'); $output->write('Status: '); do { if ($monitoring->isMaster()) { $action = $monitoring->getAction(); $output->write('<info>master[' . $action . ']</info> '); $statusManager->updateStatus($workers, $VMConfigs); switch ($action) { case self::ACTION_MONITORING: /** @var \WorkerManager\Model\WorkerConfig $worker */ foreach ($workers as $worker) { $updateManager->update($worker); if ($logger) { $logger->logWorker($worker); } } if ($logger) { foreach ($VMConfigs as $VMConfig) { $logger->logVM($VMConfig); } } break; case self::ACTION_RESTART: $output->writeln('Restarting workers...'); /** @var \WorkerManager\Model\VMConfig $VMConfig */ foreach ($VMConfigs as $VMConfig) { $output->writeln('Restart ' . $VMConfig->getName()); $updateManager->restartWorkers($VMConfig, function ($response) use($output) { $output->writeln($response); }); } $monitoring->updateAction(static::ACTION_MONITORING); break; } } else { $output->write('<comment>slave</comment> '); } $monitoring->wait(); } while ($this->isAlive()); }