mirror of
https://github.com/Icinga/icingaweb2-module-businessprocess.git
synced 2026-01-10 23:22:53 -05:00
Custom variables used in Detail View Extension can be read from the host if not present on the service, and can be customized, if desired, in the config.ini for this module
103 lines
3.2 KiB
PHP
103 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace Icinga\Module\Businessprocess\ProvidedHook\Icingadb;
|
|
|
|
use Icinga\Module\Businessprocess\Renderer\TileRenderer;
|
|
use Icinga\Module\Businessprocess\Renderer\TreeRenderer;
|
|
use Icinga\Module\Businessprocess\State\IcingaDbState;
|
|
use Icinga\Module\Businessprocess\Storage\LegacyStorage;
|
|
use Icinga\Module\Businessprocess\Web\Url;
|
|
use Icinga\Module\Icingadb\Hook\ServiceDetailExtensionHook;
|
|
use Icinga\Module\Icingadb\Model\Service;
|
|
use ipl\Html\Html;
|
|
use ipl\Html\HtmlDocument;
|
|
use ipl\Html\HtmlString;
|
|
use ipl\Html\ValidHtml;
|
|
|
|
class ServiceDetailExtension extends ServiceDetailExtensionHook
|
|
{
|
|
/** @var ?LegacyStorage */
|
|
private $storage;
|
|
|
|
/** @var string */
|
|
private $commandName;
|
|
|
|
/** @var string */
|
|
private $configVar;
|
|
|
|
/** @var string */
|
|
private $processVar;
|
|
|
|
/** @var string */
|
|
private $treeVar;
|
|
|
|
protected function init()
|
|
{
|
|
$this->setSection(self::GRAPH_SECTION);
|
|
|
|
try {
|
|
$this->storage = LegacyStorage::getInstance();
|
|
$this->commandName = $this->getModule()->getConfig()->get(
|
|
'DetailviewExtension',
|
|
'checkcommand_name',
|
|
'icingacli-businessprocess'
|
|
);
|
|
$this->configVar = $this->getModule()->getConfig()->get(
|
|
'DetailviewExtension',
|
|
'config_var',
|
|
'icingacli_businessprocess_config'
|
|
);
|
|
$this->processVar = $this->getModule()->getConfig()->get(
|
|
'DetailviewExtension',
|
|
'process_var',
|
|
'icingacli_businessprocess_process'
|
|
);
|
|
$this->treeVar = $this->getModule()->getConfig()->get(
|
|
'DetailviewExtension',
|
|
'tree_var',
|
|
'icingaweb_businessprocess_as_tree'
|
|
);
|
|
} catch (\Exception $e) {
|
|
// Ignore and don't display anything
|
|
}
|
|
}
|
|
|
|
public function getHtmlForObject(Service $service): ValidHtml
|
|
{
|
|
if (! isset($this->storage)
|
|
|| $service->checkcommand_name !== $this->commandName
|
|
) {
|
|
return HtmlString::create('');
|
|
}
|
|
|
|
$customvars = array_merge($service->host->customvars, $service->customvars);
|
|
|
|
$bpName = $customvars[$this->configVar] ?? null;
|
|
if (! $bpName) {
|
|
$bpName = key($this->storage->listProcessNames());
|
|
}
|
|
|
|
$nodeName = $customvars[$this->processVar] ?? null;
|
|
if (! $nodeName) {
|
|
return HtmlString::create('');
|
|
}
|
|
|
|
$bp = $this->storage->loadProcess($bpName);
|
|
$node = $bp->getBpNode($nodeName);
|
|
|
|
IcingaDbState::apply($bp);
|
|
|
|
if ($customvars[$this->treeVar] ?? false) {
|
|
$renderer = new TreeRenderer($bp, $node);
|
|
$tag = 'ul';
|
|
} else {
|
|
$renderer = new TileRenderer($bp, $node);
|
|
$tag = 'div';
|
|
}
|
|
|
|
$renderer->setUrl(Url::fromPath('businessprocess/process/show?config=' . $bpName . '&node=' . $nodeName));
|
|
$renderer->ensureAssembled()->getFirst($tag)->setAttribute('data-base-target', '_next');
|
|
|
|
return (new HtmlDocument())->addHtml(Html::tag('h2', 'Business Process'), $renderer);
|
|
}
|
|
}
|