icingaweb2-module-businessp.../application/controllers/NodeController.php
Thomas Gelf 60d043cb18 Simulation: refactor the whole class
First step, more to come. Single node simulations should be moved to a
dedicated class of course

fixes #88
fixes #89
2017-01-26 22:09:38 +01:00

60 lines
2.1 KiB
PHP

<?php
namespace Icinga\Module\Businessprocess\Controllers;
use Icinga\Module\Businessprocess\Renderer\Breadcrumb;
use Icinga\Module\Businessprocess\Renderer\TileRenderer;
use Icinga\Module\Businessprocess\Simulation;
use Icinga\Module\Businessprocess\State\MonitoringState;
use Icinga\Module\Businessprocess\Web\Controller;
use Icinga\Module\Businessprocess\Web\Url;
class NodeController extends Controller
{
public function impactAction()
{
$this->setAutorefreshInterval(10);
$content = $this->content();
$this->controls()->add(
$this->singleTab($this->translate('Node Impact'))
);
$name = $this->params->get('name');
$this->addTitle($this->translate('Business Impact (%s)'), $name);
$simulation = Simulation::fromSession($this->session());
foreach ($this->storage()->listProcessNames() as $configName) {
$config = $this->storage()->loadProcess($configName);
// TODO: Fix issues with children, they do not exist unless resolved :-/
// This is a workaround:
foreach ($config->getRootNodes() as $node) {
$node->getState();
}
foreach ($config->getRootNodes() as $node) {
$node->clearState();
}
if (! $config->hasNode($name)) {
continue;
}
MonitoringState::apply($config);
$config->applySimulation($simulation);
foreach ($config->getNode($name)->getPaths() as $path) {
$node = array_pop($path);
$renderer = new TileRenderer($config, $config->getNode($node));
$renderer->setUrl(
Url::fromPath(
'businessprocess/process/show',
array('config' => $configName)
)
)->setPath($path);
$bc = Breadcrumb::create($renderer);
$bc->attributes()->set('data-base-target', '_next');
$content->add($bc);
}
}
}
}