/** * @param InputInterface $input * @param OutputInterface $output * @return int */ protected function execute(InputInterface $input, OutputInterface $output) { $this->logPath = $input->getOption('log'); $cronInfoUrl = sprintf('http://%s:%d/info/cron/', $input->getOption('host'), $input->getOption('port')); $response = json_decode($this->curlRequest->getCurlResult($cronInfoUrl, [CURLOPT_TIMEOUT_MS => 100000])['body'], true); if (!is_array($response)) { $this->log('Core connection failed, exiting'); throw new \RuntimeException('Error connecting to core server'); } foreach ($response as $cronItem) { $this->cronExpression->setExpression(Ar::get($cronItem, 'time')); if ($this->cronExpression->isDue()) { $this->log('Executing: ' . Ar::get($cronItem, 'type')); switch (Ar::get($cronItem, 'type')) { case 'playbook': $url = sprintf('http://%s:%d/playbook/run/', $input->getOption('host'), $input->getOption('port')); $playbookFile = Ar::get($cronItem, 'playbook'); $playbook = $this->fileLoader->load($playbookFile); $this->curlRequest->getCurlResult($url, [CURLOPT_POST => true, CURLOPT_POSTFIELDS => ['playbook' => urlencode($playbook), 'filename' => $playbookFile], CURLOPT_TIMEOUT_MS => 100000]); $this->log('Executed playbook: ' . $playbookFile); break; case 'command': $url = sprintf('http://%s:%d/command/run/', $input->getOption('host'), $input->getOption('port')); $command = Ar::get($cronItem, 'command'); if (null === $command) { break; } $this->curlRequest->getCurlResult($url, [CURLOPT_POST => true, CURLOPT_POSTFIELDS => ['command' => urlencode($command)], CURLOPT_TIMEOUT_MS => 100000]); $this->log('Executed command: ' . $command); break; case 'curl': break; } } } }