diff options
Diffstat (limited to '')
-rw-r--r-- | application/clicommands/HealthCommand.php | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/application/clicommands/HealthCommand.php b/application/clicommands/HealthCommand.php new file mode 100644 index 0000000..1635c50 --- /dev/null +++ b/application/clicommands/HealthCommand.php @@ -0,0 +1,80 @@ +<?php + +namespace Icinga\Module\Director\Clicommands; + +use Icinga\Module\Director\CheckPlugin\PluginState; +use Icinga\Module\Director\Cli\Command; +use Icinga\Module\Director\Health; +use Icinga\Module\Director\Cli\PluginOutputBeautifier; + +/** + * Check Icinga Director Health + * + * Use this command as a CheckPlugin to monitor your Icinga Director health + */ +class HealthCommand extends Command +{ + /** + * Run health checks + * + * Use this command to run all or a specific set of Health Checks. + * + * USAGE + * + * icingacli director health check [options] + * + * OPTIONS + * + * --check <name> Run only a specific set of checks + * valid names: config, sync, import, jobs, deployment + * --db <name> Use a specific Icinga Web DB resource + * --watch <seconds> Refresh every <second>. For interactive use only + */ + public function checkAction() + { + $health = new Health(); + if ($name = $this->params->get('db')) { + $health->setDbResourceName($name); + } + + if ($name = $this->params->get('check')) { + $check = $health->getCheck($name); + echo PluginOutputBeautifier::beautify($check->getOutput(), $this->screen); + + exit($check->getState()->getNumeric()); + } else { + $state = new PluginState('OK'); + $checks = $health->getAllChecks(); + + $output = []; + foreach ($checks as $check) { + $state->raise($check->getState()); + $output[] = $check->getOutput(); + } + + if ($state->getNumeric() === 0) { + echo "Icinga Director: everything is fine\n\n"; + } else { + echo "Icinga Director: there are problems\n\n"; + } + + $out = PluginOutputBeautifier::beautify(implode("\n", $output), $this->screen); + echo $out; + + if (! $this->isBeingWatched()) { + exit($state->getNumeric()); + } + } + } + + /** + * Cli should provide this information, as it shifts the parameter + * + * @return bool + */ + protected function isBeingWatched() + { + global $argv; + return in_array('--watch', $argv); + } +} |