Skip to content

Commit b52c219

Browse files
authored
Unreachable parent optimizations (#1126)
2 parents 02ff5d8 + 0b51376 commit b52c219

File tree

3 files changed

+27
-5
lines changed

3 files changed

+27
-5
lines changed

library/Icingadb/Model/UnreachableParent.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Icinga\Module\Icingadb\Model;
66

77
use Icinga\Module\Icingadb\Model\Behavior\ReRoute;
8+
use Icinga\Module\Icingadb\Model\UnreachableParent\ResultSet;
89
use InvalidArgumentException;
910
use ipl\Orm\Behavior\Binary;
1011
use ipl\Orm\Behaviors;
@@ -112,6 +113,8 @@ public static function on(Connection $db, Model $root = null): Query
112113
)
113114
));
114115

116+
$query->setResultSetClass(ResultSet::class);
117+
115118
return $query;
116119
}
117120

@@ -161,10 +164,7 @@ private static function selectNodes(Connection $db, Model $root): Select
161164
'redundancy_group_id' => 'to.redundancy_group_id',
162165
'is_group_member' => new Expression('urn.redundancy_group_id IS NOT NULL AND urn.level > 0')
163166
]);
164-
$nodeQuery->filter(Filter::any(
165-
Filter::equal('state.failed', 'y'),
166-
Filter::equal('to.redundancy_group.state.failed', 'y')
167-
));
167+
$nodeQuery->filter(Filter::equal('state.failed', 'y'));
168168

169169
$nodeSelect = $nodeQuery->assembleSelect();
170170

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace Icinga\Module\Icingadb\Model\UnreachableParent;
4+
5+
use Icinga\Module\Icingadb\Redis\VolatileStateResults;
6+
use Traversable;
7+
8+
class ResultSet extends VolatileStateResults
9+
{
10+
protected function yieldTraversable(Traversable $traversable)
11+
{
12+
$knownIds = [];
13+
foreach ($traversable as $value) {
14+
if (isset($knownIds[$value->id])) {
15+
continue;
16+
}
17+
18+
$knownIds[$value->id] = true;
19+
20+
yield $value;
21+
}
22+
}
23+
}

library/Icingadb/Widget/Detail/ObjectDetail.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,6 @@ protected function createRootProblems(): ?array
655655
'service.host',
656656
'service.host.state'
657657
])
658-
->setResultSetClass(VolatileStateResults::class)
659658
->orderBy([
660659
'host.state.severity',
661660
'host.state.last_state_change',

0 commit comments

Comments
 (0)