From e5b499bbdbcec9eaa6cb90db3ddcbb8618e00e5e Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Wed, 15 Jan 2025 10:34:13 +0100 Subject: [PATCH 1/2] UnreachableParent: Eliminate duplicate nodes Nodes might be referenced by multiple independent paths, which might lead to the same root problem multiple times. --- library/Icingadb/Model/UnreachableParent.php | 3 +++ .../Model/UnreachableParent/ResultSet.php | 23 +++++++++++++++++++ .../Icingadb/Widget/Detail/ObjectDetail.php | 1 - 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 library/Icingadb/Model/UnreachableParent/ResultSet.php diff --git a/library/Icingadb/Model/UnreachableParent.php b/library/Icingadb/Model/UnreachableParent.php index cf78d39a8..7b3e3f45f 100644 --- a/library/Icingadb/Model/UnreachableParent.php +++ b/library/Icingadb/Model/UnreachableParent.php @@ -5,6 +5,7 @@ namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; +use Icinga\Module\Icingadb\Model\UnreachableParent\ResultSet; use InvalidArgumentException; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; @@ -112,6 +113,8 @@ public static function on(Connection $db, Model $root = null): Query ) )); + $query->setResultSetClass(ResultSet::class); + return $query; } diff --git a/library/Icingadb/Model/UnreachableParent/ResultSet.php b/library/Icingadb/Model/UnreachableParent/ResultSet.php new file mode 100644 index 000000000..d564b4e8b --- /dev/null +++ b/library/Icingadb/Model/UnreachableParent/ResultSet.php @@ -0,0 +1,23 @@ +id])) { + continue; + } + + $knownIds[$value->id] = true; + + yield $value; + } + } +} diff --git a/library/Icingadb/Widget/Detail/ObjectDetail.php b/library/Icingadb/Widget/Detail/ObjectDetail.php index 5b6574256..c4e0a6893 100644 --- a/library/Icingadb/Widget/Detail/ObjectDetail.php +++ b/library/Icingadb/Widget/Detail/ObjectDetail.php @@ -655,7 +655,6 @@ protected function createRootProblems(): ?array 'service.host', 'service.host.state' ]) - ->setResultSetClass(VolatileStateResults::class) ->orderBy([ 'host.state.severity', 'host.state.last_state_change', From 0b51376820ec6292e606b40e64457359e2f12403 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Wed, 15 Jan 2025 10:36:19 +0100 Subject: [PATCH 2/2] UnreachableParent: Don't filter for group states Since child edges of a group now have state as well, filtering for the group's state is not required anymore. --- library/Icingadb/Model/UnreachableParent.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/library/Icingadb/Model/UnreachableParent.php b/library/Icingadb/Model/UnreachableParent.php index 7b3e3f45f..7c20301cd 100644 --- a/library/Icingadb/Model/UnreachableParent.php +++ b/library/Icingadb/Model/UnreachableParent.php @@ -164,10 +164,7 @@ private static function selectNodes(Connection $db, Model $root): Select 'redundancy_group_id' => 'to.redundancy_group_id', 'is_group_member' => new Expression('urn.redundancy_group_id IS NOT NULL AND urn.level > 0') ]); - $nodeQuery->filter(Filter::any( - Filter::equal('state.failed', 'y'), - Filter::equal('to.redundancy_group.state.failed', 'y') - )); + $nodeQuery->filter(Filter::equal('state.failed', 'y')); $nodeSelect = $nodeQuery->assembleSelect();