From c3dbcd1957405054bc3034d754338963880ab1d1 Mon Sep 17 00:00:00 2001 From: MoreAmazingNick Date: Fri, 19 Sep 2025 13:12:03 +0200 Subject: [PATCH 1/4] Fix Command Inheritance not shown #3007 --- library/Director/Objects/IcingaCommand.php | 7 +++++- library/Director/Resolver/CommandUsage.php | 23 ++++++++++++++++--- .../Web/Controller/ObjectsController.php | 11 +++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/library/Director/Objects/IcingaCommand.php b/library/Director/Objects/IcingaCommand.php index b6ded87fd..42379ef27 100644 --- a/library/Director/Objects/IcingaCommand.php +++ b/library/Director/Objects/IcingaCommand.php @@ -183,8 +183,13 @@ public function countDirectUses() array('n' => 'icinga_notification'), array('cnt' => 'COUNT(*)') )->where('n.command_id = ?', $id); + $qc = $db->select()->from( + array('c' => 'icinga_command_inheritance'), + array('cnt' => 'COUNT(*)') + )->where('c.parent_command_id = ?', $id); + $query = $db->select()->union( - [$qh, $qs, $qn], + [$qh, $qs, $qn, $qc], DbSelect::SQL_UNION_ALL ); diff --git a/library/Director/Resolver/CommandUsage.php b/library/Director/Resolver/CommandUsage.php index 49fc31b34..caf0f3866 100644 --- a/library/Director/Resolver/CommandUsage.php +++ b/library/Director/Resolver/CommandUsage.php @@ -44,6 +44,7 @@ public function getLinks() 'host' => ['check_command', 'event_command'], 'service' => ['check_command', 'event_command'], 'notification' => ['command'], + 'command' => ['command'], ]; $types = [ 'host' => [ @@ -60,6 +61,10 @@ public function getLinks() 'template' => $this->translate('%d Notification Template(s)'), 'apply' => $this->translate('%d Notification Apply Rule(s)'), ], + 'command' => [ + 'object' => $this->translate('%d Commands(s)'), + 'template' => $this->translate('%d Command Templates(s)'), + ], ]; $urlSuffix = [ @@ -89,14 +94,26 @@ protected function fetchFor($table, $rels, $objectTypes) { $id = $this->command->getAutoincId(); + //return (object) array('object'=>1); $columns = []; foreach ($objectTypes as $type) { $columns[$type] = "COALESCE(SUM(CASE WHEN object_type = '$type' THEN 1 ELSE 0 END), 0)"; } - $query = $this->db->select()->from("icinga_$table", $columns); - foreach ($rels as $rel) { - $query->orWhere("{$rel}_id = ?", $id); + if ($table === "command") { + $query = $this->db->select()->from(array('c' => 'icinga_' . $table), $columns)->join(array('ici' => 'icinga_command_inheritance'), + 'ici.command_id = c.id', + array()); + + foreach ($rels as $rel) { + $query->orWhere("parent_{$rel}_id = ?", $id); + } + }else{ + $query = $this->db->select()->from("icinga_$table", $columns); + + foreach ($rels as $rel) { + $query->orWhere("{$rel}_id = ?", $id); + } } return $this->db->fetchRow($query); diff --git a/library/Director/Web/Controller/ObjectsController.php b/library/Director/Web/Controller/ObjectsController.php index 1440ef45a..e0df490fb 100644 --- a/library/Director/Web/Controller/ObjectsController.php +++ b/library/Director/Web/Controller/ObjectsController.php @@ -474,6 +474,17 @@ protected function eventuallyFilterCommand(ZfQueryBasedTable $table) $command->getAutoincId() ); break; + case 'command': + $table->getQuery() + ->join( + array('ici' => 'icinga_command_inheritance'), + 'ici.command_id = o.id', + array() + )->where( + 'ici.parent_command_id = ?', + $command->getAutoincId() + ); + break; } } From 54ee06675454d63e63bcf41f6625aff8d41a1c0a Mon Sep 17 00:00:00 2001 From: moreamazingnick Date: Tue, 7 Oct 2025 11:27:53 +0200 Subject: [PATCH 2/4] Apply suggestions from raviks789 code review Co-authored-by: Ravi Kumar Kempapura Srinivasa <33730024+raviks789@users.noreply.github.com> --- library/Director/Objects/IcingaCommand.php | 4 ++-- library/Director/Resolver/CommandUsage.php | 2 +- library/Director/Web/Controller/ObjectsController.php | 5 +++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/library/Director/Objects/IcingaCommand.php b/library/Director/Objects/IcingaCommand.php index 42379ef27..61327046b 100644 --- a/library/Director/Objects/IcingaCommand.php +++ b/library/Director/Objects/IcingaCommand.php @@ -184,8 +184,8 @@ public function countDirectUses() array('cnt' => 'COUNT(*)') )->where('n.command_id = ?', $id); $qc = $db->select()->from( - array('c' => 'icinga_command_inheritance'), - array('cnt' => 'COUNT(*)') + [c' => 'icinga_command_inheritance'], + ['cnt' => 'COUNT(*)'] )->where('c.parent_command_id = ?', $id); $query = $db->select()->union( diff --git a/library/Director/Resolver/CommandUsage.php b/library/Director/Resolver/CommandUsage.php index caf0f3866..7f64d6ace 100644 --- a/library/Director/Resolver/CommandUsage.php +++ b/library/Director/Resolver/CommandUsage.php @@ -108,7 +108,7 @@ protected function fetchFor($table, $rels, $objectTypes) foreach ($rels as $rel) { $query->orWhere("parent_{$rel}_id = ?", $id); } - }else{ + } else { $query = $this->db->select()->from("icinga_$table", $columns); foreach ($rels as $rel) { diff --git a/library/Director/Web/Controller/ObjectsController.php b/library/Director/Web/Controller/ObjectsController.php index e0df490fb..0e1c75bde 100644 --- a/library/Director/Web/Controller/ObjectsController.php +++ b/library/Director/Web/Controller/ObjectsController.php @@ -477,13 +477,14 @@ protected function eventuallyFilterCommand(ZfQueryBasedTable $table) case 'command': $table->getQuery() ->join( - array('ici' => 'icinga_command_inheritance'), + ['ici' => 'icinga_command_inheritance'], 'ici.command_id = o.id', - array() + [] )->where( 'ici.parent_command_id = ?', $command->getAutoincId() ); + break; } } From c6311f07fbb1a4b4ac008822b26a76f5c1c1e16c Mon Sep 17 00:00:00 2001 From: moreamazingnick Date: Tue, 7 Oct 2025 11:29:25 +0200 Subject: [PATCH 3/4] Remove unnecessary comment --- library/Director/Resolver/CommandUsage.php | 1 - 1 file changed, 1 deletion(-) diff --git a/library/Director/Resolver/CommandUsage.php b/library/Director/Resolver/CommandUsage.php index 7f64d6ace..3ba3f1b75 100644 --- a/library/Director/Resolver/CommandUsage.php +++ b/library/Director/Resolver/CommandUsage.php @@ -94,7 +94,6 @@ protected function fetchFor($table, $rels, $objectTypes) { $id = $this->command->getAutoincId(); - //return (object) array('object'=>1); $columns = []; foreach ($objectTypes as $type) { $columns[$type] = "COALESCE(SUM(CASE WHEN object_type = '$type' THEN 1 ELSE 0 END), 0)"; From d321bedf8da9b7fe0d3434b167af40108f604015 Mon Sep 17 00:00:00 2001 From: moreamazingnick Date: Tue, 7 Oct 2025 12:14:55 +0200 Subject: [PATCH 4/4] Add missing quote Co-authored-by: Ravi Kumar Kempapura Srinivasa <33730024+raviks789@users.noreply.github.com> --- library/Director/Objects/IcingaCommand.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Director/Objects/IcingaCommand.php b/library/Director/Objects/IcingaCommand.php index 61327046b..7fa0fd5e4 100644 --- a/library/Director/Objects/IcingaCommand.php +++ b/library/Director/Objects/IcingaCommand.php @@ -184,7 +184,7 @@ public function countDirectUses() array('cnt' => 'COUNT(*)') )->where('n.command_id = ?', $id); $qc = $db->select()->from( - [c' => 'icinga_command_inheritance'], + ['c' => 'icinga_command_inheritance'], ['cnt' => 'COUNT(*)'] )->where('c.parent_command_id = ?', $id);