From 5ef56fc9b275994ed145232004a61ca1d2c993db Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Thu, 18 Jun 2015 12:34:49 +0200 Subject: [PATCH] ServicestatusQuery: Group by host- and servicegroup pk's if required refs #9009 --- .../Backend/Ido/Query/ServicestatusQuery.php | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicestatusQuery.php b/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicestatusQuery.php index 577ad16af..0a03f273d 100644 --- a/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicestatusQuery.php +++ b/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicestatusQuery.php @@ -3,6 +3,8 @@ namespace Icinga\Module\Monitoring\Backend\Ido\Query; +use Zend_Db_Expr; + /** * Query for service status */ @@ -314,6 +316,50 @@ class ServicestatusQuery extends IdoQuery if ($this->hasJoinedVirtualTable('servicestatus')) { $group[] = 'ss.servicestatus_id'; } + + if ($this->hasJoinedVirtualTable('hostgroups')) { + $selected = false; + foreach ($this->columns as $alias => $column) { + if ($column instanceof Zend_Db_Expr) { + continue; + } + + $table = $this->aliasToTableName( + $this->hasAliasName($alias) ? $alias : $this->customAliasToAlias($alias) + ); + if ($table === 'hostgroups') { + $selected = true; + break; + } + } + + if ($selected) { + $group[] = 'hg.hostgroup_id'; + $group[] = 'hgo.object_id'; + } + } + + if ($this->hasJoinedVirtualTable('servicegroups')) { + $selected = false; + foreach ($this->columns as $alias => $column) { + if ($column instanceof Zend_Db_Expr) { + continue; + } + + $table = $this->aliasToTableName( + $this->hasAliasName($alias) ? $alias : $this->customAliasToAlias($alias) + ); + if ($table === 'servicegroups') { + $selected = true; + break; + } + } + + if ($selected) { + $group[] = 'sg.servicegroup_id'; + $group[] = 'sgo.object_id'; + } + } } return $group;