ProcessCommand: replace and deprecate CheckCommand

fixes #13295
This commit is contained in:
Thomas Gelf 2016-11-23 15:20:46 +01:00
parent cc93a1d04a
commit 1e351a7724
2 changed files with 123 additions and 98 deletions

View file

@ -2,37 +2,15 @@
namespace Icinga\Module\Businessprocess\Clicommands;
use Icinga\Cli\Command;
use Icinga\Module\Businessprocess\Storage\LegacyStorage;
use Icinga\Module\Businessprocess\BpNode;
use Icinga\Module\Businessprocess\HostNode;
class CheckCommand extends Command
class CheckCommand extends ProcessCommand
{
protected $storage;
protected $hostColors = array(
0 => array('black', 'lightgreen'),
1 => array('black', 'lightred'),
2 => array('black', 'brown'),
99 => array('black', 'lightgray'),
);
protected $serviceColors = array(
0 => array('black', 'lightgreen'),
1 => array('black', 'yellow'),
2 => array('black', 'lightred'),
3 => array('black', 'lightpurple'),
99 => array('black', 'lightgray'),
);
public function init()
public function listActions()
{
$this->storage = new LegacyStorage($this->Config()->getSection('global'));
return array('process');
}
/**
* Check a specific process
* 'check process' is DEPRECATED, please use 'process check' instead
*
* USAGE
*
@ -40,77 +18,6 @@ class CheckCommand extends Command
*/
public function processAction()
{
$name = $this->params->get('config');
if ($name === null) {
$name = $this->getFirstProcessName();
}
$bp = $this->storage->loadProcess($name);
if (null !== ($stateType = $this->params->get('state-type'))) {
if ($stateType === 'soft') {
$bp->useSoftStates();
}
if ($stateType === 'hard') {
$bp->useHardStates();
}
}
$node = $bp->getNode($this->params->shift());
$bp->retrieveStatesFromBackend();
if ($bp->hasErrors()) {
printf(
"Checking Business Process %s failed: %s\n",
$node->getAlias(),
implode("\n", $bp->getErrors())
);
exit(3);
}
printf("Business Process %s: %s\n", $node->getStateName(), $node->getAlias());
if ($this->params->shift('details')) {
echo $this->renderProblemTree($node->getProblemTree(), $this->params->shift('colors'));
}
exit($node->getState());
}
protected function renderProblemTree($tree, $useColors = false, $depth = 0)
{
$output = '';
foreach ($tree as $name => $subtree) {
$node = $subtree['node'];
if ($node instanceof HostNode) {
$colors = $this->hostColors[$node->getState()];
} else {
$colors = $this->serviceColors[$node->getState()];
}
$state = sprintf('[%s]', $node->getStateName());
if ($useColors) {
$state = $this->screen->colorize($state, $colors[0], $colors[1]);
}
$output .= sprintf(
"%s%s %s %s\n",
str_repeat(' ', $depth),
$node instanceof BpNode ? $node->getOperator() : '-',
$state,
$node->getAlias()
);
$output .= $this->renderProblemTree($subtree['children'], $useColors, $depth + 1);
}
$output = str_replace("|", "¦", $output);
return $output;
}
protected function getFirstProcessName()
{
$list = $this->storage->listProcesses();
return key($list);
$this->checkAction();
}
}

View file

@ -0,0 +1,118 @@
<?php
namespace Icinga\Module\Businessprocess\Clicommands;
use Icinga\Cli\Command;
use Icinga\Module\Businessprocess\Storage\LegacyStorage;
use Icinga\Module\Businessprocess\BpNode;
use Icinga\Module\Businessprocess\HostNode;
class ProcessCommand extends Command
{
/**
* @var LegacyStorage
*/
protected $storage;
protected $hostColors = array(
0 => array('black', 'lightgreen'),
1 => array('lightgray', 'lightred'),
2 => array('black', 'brown'),
99 => array('black', 'lightgray'),
);
protected $serviceColors = array(
0 => array('black', 'lightgreen'),
1 => array('black', 'yellow'),
2 => array('lightgray', 'lightred'),
3 => array('black', 'lightpurple'),
99 => array('black', 'lightgray'),
);
public function init()
{
$this->storage = new LegacyStorage($this->Config()->getSection('global'));
}
/**
* Check a specific process
*
* USAGE
*
* icingacli businessprocess process check [--config <name>] <process>
*/
public function checkAction()
{
$name = $this->params->get('config');
if ($name === null) {
$name = $this->getFirstProcessName();
}
$bp = $this->storage->loadProcess($name);
if (null !== ($stateType = $this->params->get('state-type'))) {
if ($stateType === 'soft') {
$bp->useSoftStates();
}
if ($stateType === 'hard') {
$bp->useHardStates();
}
}
/** @var BpNode $node */
$node = $bp->getNode($this->params->shift());
$bp->retrieveStatesFromBackend();
if ($bp->hasErrors()) {
printf(
"Checking Business Process %s failed: %s\n",
$node->getAlias(),
implode("\n", $bp->getErrors())
);
exit(3);
}
printf("Business Process %s: %s\n", $node->getStateName(), $node->getAlias());
if ($this->params->shift('details')) {
echo $this->renderProblemTree($node->getProblemTree(), $this->params->shift('colors'));
}
exit($node->getState());
}
protected function renderProblemTree($tree, $useColors = false, $depth = 0)
{
$output = '';
foreach ($tree as $name => $subtree) {
$node = $subtree['node'];
if ($node instanceof HostNode) {
$colors = $this->hostColors[$node->getState()];
} else {
$colors = $this->serviceColors[$node->getState()];
}
$state = sprintf('[%s]', $node->getStateName());
if ($useColors) {
$state = $this->screen->colorize($state, $colors[0], $colors[1]);
}
$output .= sprintf(
"%s%s %s %s\n",
str_repeat(' ', $depth),
$node instanceof BpNode ? $node->getOperator() : '-',
$state,
$node->getAlias()
);
$output .= $this->renderProblemTree($subtree['children'], $useColors, $depth + 1);
}
return $output;
}
protected function getFirstProcessName()
{
$list = $this->storage->listProcesses();
return key($list);
}
}