diff --git a/library/Businessprocess/ProvidedHook/Monitoring/DetailviewExtension.php b/library/Businessprocess/ProvidedHook/Monitoring/DetailviewExtension.php
new file mode 100644
index 0000000..c781504
--- /dev/null
+++ b/library/Businessprocess/ProvidedHook/Monitoring/DetailviewExtension.php
@@ -0,0 +1,73 @@
+storage = new LegacyStorage(
+ $this->getModule()->getConfig()->getSection('global')
+ );
+ } catch (\Exception $e) {
+ // Ignore and don't display anything
+ }
+ }
+
+ /**
+ * Returns the rendered Tree-/TileRenderer HTML
+ *
+ * @param MonitoredObject $object
+ *
+ * @return string
+ */
+ public function getHtmlForObject(MonitoredObject $object)
+ {
+ if (! isset($this->storage)
+ || ! $object instanceof Service
+ || $object->check_command !== 'icingacli-businessprocess'
+ ) {
+ return '';
+ }
+
+ $bpName = $object->_service_icingacli_businessprocess_process;
+ if (! $bpName) {
+ return '';
+ }
+
+ $bp = $this->storage->loadProcess($bpName);
+
+ MonitoringState::apply($bp);
+
+ if (filter_var($object->_service_icingacli_businessprocess_grapher_tree, FILTER_VALIDATE_BOOLEAN)) {
+ $renderer = new TreeRenderer($bp);
+ $tag = 'ul';
+ } else {
+ $renderer = new TileRenderer($bp);
+ $tag = 'div';
+ }
+
+ $renderer->setUrl(Url::fromPath('businessprocess/process/show?config=' . $bpName . '&node=' . $bpName));
+ $renderer->ensureAssembled()->getFirst($tag)->setAttribute('data-base-target', '_next');
+
+ return '
Business Process
' . $renderer;
+ }
+}
diff --git a/library/Businessprocess/Renderer/TileRenderer.php b/library/Businessprocess/Renderer/TileRenderer.php
index f1f779e..df53989 100644
--- a/library/Businessprocess/Renderer/TileRenderer.php
+++ b/library/Businessprocess/Renderer/TileRenderer.php
@@ -9,10 +9,7 @@ use ipl\Html\Html;
class TileRenderer extends Renderer
{
- /**
- * @inheritdoc
- */
- public function render()
+ public function assemble()
{
$bp = $this->config;
$nodesDiv = Html::tag(
@@ -60,10 +57,8 @@ class TileRenderer extends Renderer
}
}
- $nodesDiv->add($this->getContent());
- $this->setContent($nodesDiv);
-
- return parent::render();
+ $nodesDiv->addHtml(...$this->getContent());
+ $this->setHtmlContent($nodesDiv);
}
/**
diff --git a/library/Businessprocess/Renderer/TreeRenderer.php b/library/Businessprocess/Renderer/TreeRenderer.php
index c71a4f9..a34ac35 100644
--- a/library/Businessprocess/Renderer/TreeRenderer.php
+++ b/library/Businessprocess/Renderer/TreeRenderer.php
@@ -15,10 +15,7 @@ use ipl\Web\Widget\StateBall;
class TreeRenderer extends Renderer
{
- /**
- * @inheritdoc
- */
- public function render()
+ public function assemble()
{
$bp = $this->config;
$htmlId = $bp->getHtmlId();
@@ -59,8 +56,7 @@ class TreeRenderer extends Renderer
->getAbsoluteUrl());
}
- $this->add($tree);
- return parent::render();
+ $this->addHtml($tree);
}
/**
diff --git a/run.php b/run.php
index 3f05d06..dbe38fb 100644
--- a/run.php
+++ b/run.php
@@ -2,6 +2,7 @@
$this->provideHook('monitoring/HostActions');
$this->provideHook('monitoring/ServiceActions');
+$this->provideHook('monitoring/DetailviewExtension');
$this->provideHook('icingadb/HostActions');
$this->provideHook('icingadb/ServiceActions');
$this->provideHook('icingadb/icingadbSupport');