summaryrefslogtreecommitdiffstats
path: root/application/clicommands/JobsCommand.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--application/clicommands/JobsCommand.php74
1 files changed, 74 insertions, 0 deletions
diff --git a/application/clicommands/JobsCommand.php b/application/clicommands/JobsCommand.php
new file mode 100644
index 0000000..1c6297f
--- /dev/null
+++ b/application/clicommands/JobsCommand.php
@@ -0,0 +1,74 @@
+<?php
+
+namespace Icinga\Module\Director\Clicommands;
+
+use Exception;
+use gipfl\Cli\Process;
+use gipfl\Protocol\JsonRpc\Connection;
+use gipfl\Protocol\NetString\StreamWrapper;
+use Icinga\Module\Director\Cli\Command;
+use Icinga\Module\Director\Daemon\JsonRpcLogWriter as JsonRpcLogWriterAlias;
+use Icinga\Module\Director\Daemon\Logger;
+use Icinga\Module\Director\Objects\DirectorJob;
+use React\EventLoop\Factory as Loop;
+use React\EventLoop\LoopInterface;
+use React\Stream\ReadableResourceStream;
+use React\Stream\WritableResourceStream;
+
+class JobsCommand extends Command
+{
+ public function runAction()
+ {
+ $this->app->getModuleManager()->loadEnabledModules();
+ $loop = Loop::create();
+ if ($this->params->get('rpc')) {
+ $this->enableRpc($loop);
+ }
+ if ($this->params->get('rpc') && $jobId = $this->params->get('id')) {
+ $exitCode = 1;
+ $jobId = (int) $jobId;
+ $loop->futureTick(function () use ($jobId, $loop, &$exitCode) {
+ Process::setTitle('icinga::director::job');
+ try {
+ $this->raiseLimits();
+ $job = DirectorJob::loadWithAutoIncId($jobId, $this->db());
+ Process::setTitle('icinga::director::job (' . $job->get('job_name') . ')');
+ if ($job->run()) {
+ $exitCode = 0;
+ } else {
+ $exitCode = 1;
+ }
+ } catch (Exception $e) {
+ Logger::error($e->getMessage());
+ $exitCode = 1;
+ }
+ $loop->futureTick(function () use ($loop) {
+ $loop->stop();
+ });
+ });
+ } else {
+ Logger::error('This command is no longer available. Please check our Upgrading documentation');
+ $exitCode = 1;
+ }
+
+ $loop->run();
+ exit($exitCode);
+ }
+
+ protected function enableRpc(LoopInterface $loop)
+ {
+ // stream_set_blocking(STDIN, 0);
+ // stream_set_blocking(STDOUT, 0);
+ // print_r(stream_get_meta_data(STDIN));
+ // stream_set_write_buffer(STDOUT, 0);
+ // ini_set('implicit_flush', 1);
+ $netString = new StreamWrapper(
+ new ReadableResourceStream(STDIN, $loop),
+ new WritableResourceStream(STDOUT, $loop)
+ );
+ $jsonRpc = new Connection();
+ $jsonRpc->handle($netString);
+
+ Logger::replaceRunningInstance(new JsonRpcLogWriterAlias($jsonRpc));
+ }
+}