From 834005f7b4ccf37ede463e9d4b896f596480c093 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Mon, 17 Jul 2023 13:38:10 +0200 Subject: [PATCH] Don't break `impact-action` page if bp has invalid config - Add message for invalid config --- application/controllers/NodeController.php | 38 +++++++++++++++++++++- public/css/module.less | 16 +++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/application/controllers/NodeController.php b/application/controllers/NodeController.php index 8addc07..80e6676 100644 --- a/application/controllers/NodeController.php +++ b/application/controllers/NodeController.php @@ -2,6 +2,7 @@ namespace Icinga\Module\Businessprocess\Controllers; +use Exception; use Icinga\Application\Modules\Module; use Icinga\Module\Businessprocess\ProvidedHook\Icingadb\IcingadbSupport; use Icinga\Module\Businessprocess\Renderer\Breadcrumb; @@ -11,6 +12,8 @@ use Icinga\Module\Businessprocess\State\IcingaDbState; use Icinga\Module\Businessprocess\State\MonitoringState; use Icinga\Module\Businessprocess\Web\Controller; use Icinga\Module\Businessprocess\Web\Url; +use ipl\Html\Html; +use ipl\Web\Widget\Link; class NodeController extends Controller { @@ -24,9 +27,16 @@ class NodeController extends Controller $name = $this->params->get('name'); $this->addTitle($this->translate('Business Impact (%s)'), $name); + $brokenFiles = []; $simulation = Simulation::fromSession($this->session()); foreach ($this->storage()->listProcessNames() as $configName) { - $config = $this->storage()->loadProcess($configName); + try { + $config = $this->storage()->loadProcess($configName); + } catch (Exception $e) { + $meta = $this->storage()->loadMetadata($configName); + $brokenFiles[$meta->get('Title')] = $configName; + continue; + } $parents = []; if ($config->hasNode($name)) { @@ -108,5 +118,31 @@ class NodeController extends Controller if ($content->isEmpty()) { $content->add($this->translate('No impact detected. Is this node part of a business process?')); } + + if (! empty($brokenFiles)) { + $elem = Html::tag( + 'ul', + ['class' => 'broken-files'], + tp( + 'The following business process has an invalid config file and therefore cannot be read:', + 'The following business processes have invalid config files and therefore cannot be read:', + count($brokenFiles) + ) + ); + + foreach ($brokenFiles as $bpName => $fileName) { + $elem->addHtml( + Html::tag( + 'li', + new Link( + sprintf('%s (%s.conf)', $bpName, $fileName), + (string) Url::fromPath('businessprocess/process/show', ['config' => $fileName]) + ) + ) + ); + } + + $content->addHtml($elem); + } } } diff --git a/public/css/module.less b/public/css/module.less index 1c2f57e..2d278d3 100644 --- a/public/css/module.less +++ b/public/css/module.less @@ -288,6 +288,22 @@ ul.bp { } } +// ** Node inspect broken files **/ +ul.broken-files { + .rounded-corners(); + padding: 1em; + margin: 1em 0; + border: 2px solid @state-warning; + font-size: 1.25em; + list-style: none; + + li { + padding-left: 1em; + font-weight: bold; + } +} +// ** END Node inspect broken files **/ + /** BEGIN Dashboard **/ .overview-dashboard { .header {