From 523a35f4c1aaa095b84c34002a1c887663abf052 Mon Sep 17 00:00:00 2001 From: Eric Lippmann Date: Mon, 8 Jul 2019 16:32:53 +0200 Subject: [PATCH 1/2] Allow to filter for contacts --- .../Backend/Ido/Query/HostgroupQuery.php | 21 ++++++++ .../Backend/Ido/Query/HoststatusQuery.php | 19 +++++++ .../Backend/Ido/Query/ServicegroupQuery.php | 49 +++++++++++++++++++ .../Backend/Ido/Query/ServicestatusQuery.php | 40 +++++++++++++++ .../Monitoring/DataView/Hostgroupsummary.php | 2 +- .../Monitoring/DataView/Hoststatus.php | 2 +- .../DataView/Servicegroupsummary.php | 4 +- .../Monitoring/DataView/Servicestatus.php | 2 + 8 files changed, 135 insertions(+), 4 deletions(-) diff --git a/modules/monitoring/library/Monitoring/Backend/Ido/Query/HostgroupQuery.php b/modules/monitoring/library/Monitoring/Backend/Ido/Query/HostgroupQuery.php index 83d1f8330..2704adb44 100644 --- a/modules/monitoring/library/Monitoring/Backend/Ido/Query/HostgroupQuery.php +++ b/modules/monitoring/library/Monitoring/Backend/Ido/Query/HostgroupQuery.php @@ -26,6 +26,9 @@ class HostgroupQuery extends IdoQuery ); protected $columnMap = array( + 'contacts' => [ + 'host_contact' => 'hco.name1' + ], 'hostgroups' => array( 'hostgroup' => 'hgo.name1 COLLATE latin1_general_ci', 'hostgroup_alias' => 'hg.alias COLLATE latin1_general_ci', @@ -125,6 +128,24 @@ class HostgroupQuery extends IdoQuery $this->joinedVirtualTables['hostgroups'] = true; } + /** + * Join contacts + */ + protected function joinContacts() + { + $this->requireVirtualTable('hosts'); + + $this->select->joinLeft( + ['hc' => 'icinga_host_contacts'], + 'hc.host_id = h.host_id', + [] + )->joinLeft( + ['hco' => 'icinga_objects'], + 'hco.object_id = hc.contact_object_id AND hco.is_active = 1 AND hco.objecttype_id = 10', + [] + ); + } + /** * Join hosts */ diff --git a/modules/monitoring/library/Monitoring/Backend/Ido/Query/HoststatusQuery.php b/modules/monitoring/library/Monitoring/Backend/Ido/Query/HoststatusQuery.php index 96265944a..47143ae46 100644 --- a/modules/monitoring/library/Monitoring/Backend/Ido/Query/HoststatusQuery.php +++ b/modules/monitoring/library/Monitoring/Backend/Ido/Query/HoststatusQuery.php @@ -32,6 +32,9 @@ class HoststatusQuery extends IdoQuery 'checktimeperiods' => array( 'host_check_timeperiod' => 'ctp.alias COLLATE latin1_general_ci' ), + 'contacts' => [ + 'host_contact' => 'hco.name1' + ], 'hostgroups' => array( 'hostgroup' => 'hgo.name1 COLLATE latin1_general_ci', 'hostgroup_alias' => 'hg.alias COLLATE latin1_general_ci', @@ -201,6 +204,22 @@ class HoststatusQuery extends IdoQuery ); } + /** + * Join contacts + */ + protected function joinContacts() + { + $this->select->joinLeft( + ['hc' => 'icinga_host_contacts'], + 'hc.host_id = h.host_id', + [] + )->joinLeft( + ['hco' => 'icinga_objects'], + 'hco.object_id = hc.contact_object_id AND hco.is_active = 1 AND hco.objecttype_id = 10', + [] + ); + } + /** * Join host groups */ diff --git a/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicegroupQuery.php b/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicegroupQuery.php index 8f097437f..20b16d3fb 100644 --- a/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicegroupQuery.php +++ b/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicegroupQuery.php @@ -22,6 +22,12 @@ class ServicegroupQuery extends IdoQuery ); protected $columnMap = array( + 'contacts' => [ + 'service_contact' => 'sco.name1' + ], + 'hostcontacts' => [ + 'host_contact' => 'hco.name1' + ], 'hostgroups' => array( 'hostgroup_name' => 'hgo.name1' ), @@ -96,6 +102,46 @@ class ServicegroupQuery extends IdoQuery $this->joinedVirtualTables = array('servicegroups' => true); } + /** + * Join contacts + */ + protected function joinContacts() + { + $this->requireVirtualTable('services'); + + $this->select->joinLeft( + ['sc' => 'icinga_service_contacts'], + 'sc.service_id = s.service_id', + [] + )->joinLeft( + ['sco' => 'icinga_objects'], + 'sco.object_id = sc.contact_object_id AND sco.is_active = 1 AND sco.objecttype_id = 10', + [] + ); + } + + /** + * Join host contacts + */ + protected function joinHostcontacts() + { + $this->requireVirtualTable('services'); + + $this->select->joinLeft( + ['h' => 'icinga_hosts'], + 'h.host_object_id = s.host_object_id', + [] + )->joinLeft( + ['hc' => 'icinga_host_contacts'], + 'hc.host_id = h.host_id', + [] + )->joinLeft( + ['hco' => 'icinga_objects'], + 'hco.object_id = hc.contact_object_id AND hco.is_active = 1 AND hco.objecttype_id = 10', + [] + ); + } + /** * Join host groups */ @@ -125,6 +171,9 @@ class ServicegroupQuery extends IdoQuery protected function joinHosts() { $this->requireVirtualTable('services'); + + // Host custom var filters work w/o any host related table. If a host table join is necessary here some day, + // please adjust `joinHostcontacts()` where we explicitly do this already } /** diff --git a/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicestatusQuery.php b/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicestatusQuery.php index 0ff2c65c8..befd89784 100644 --- a/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicestatusQuery.php +++ b/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicestatusQuery.php @@ -35,6 +35,12 @@ class ServicestatusQuery extends IdoQuery 'checktimeperiods' => array( 'service_check_timeperiod' => 'ctp.alias COLLATE latin1_general_ci' ), + 'contacts' => [ + 'service_contact' => 'sco.name1' + ], + 'hostcontacts' => [ + 'host_contact' => 'hco.name1' + ], 'hostgroups' => array( 'hostgroup' => 'hgo.name1 COLLATE latin1_general_ci', 'hostgroup_alias' => 'hg.alias COLLATE latin1_general_ci', @@ -310,6 +316,40 @@ class ServicestatusQuery extends IdoQuery ); } + /** + * Join contacts + */ + protected function joinContacts() + { + $this->select->joinLeft( + ['sc' => 'icinga_service_contacts'], + 'sc.service_id = s.service_id', + [] + )->joinLeft( + ['sco' => 'icinga_objects'], + 'sco.object_id = sc.contact_object_id AND sco.is_active = 1 AND sco.objecttype_id = 10', + [] + ); + } + + /** + * Join host contacts + */ + protected function joinHostcontacts() + { + $this->requireVirtualTable('hosts'); + + $this->select->joinLeft( + ['hc' => 'icinga_host_contacts'], + 'hc.host_id = h.host_id', + [] + )->joinLeft( + ['hco' => 'icinga_objects'], + 'hco.object_id = hc.contact_object_id AND hco.is_active = 1 AND hco.objecttype_id = 10', + [] + ); + } + /** * Join host groups */ diff --git a/modules/monitoring/library/Monitoring/DataView/Hostgroupsummary.php b/modules/monitoring/library/Monitoring/DataView/Hostgroupsummary.php index d6c801db8..e3f69a95a 100644 --- a/modules/monitoring/library/Monitoring/DataView/Hostgroupsummary.php +++ b/modules/monitoring/library/Monitoring/DataView/Hostgroupsummary.php @@ -58,7 +58,7 @@ class Hostgroupsummary extends DataView { return array( 'instance_name', - 'host', 'host_alias', 'host_display_name', 'host_name', + 'host', 'host_alias', 'host_contact', 'host_display_name', 'host_name', 'hostgroup', 'service', 'service_description', 'service_display_name', 'servicegroup', 'servicegroup_alias', 'servicegroup_name' diff --git a/modules/monitoring/library/Monitoring/DataView/Hoststatus.php b/modules/monitoring/library/Monitoring/DataView/Hoststatus.php index 02a099813..faf63ed50 100644 --- a/modules/monitoring/library/Monitoring/DataView/Hoststatus.php +++ b/modules/monitoring/library/Monitoring/DataView/Hoststatus.php @@ -71,7 +71,7 @@ class HostStatus extends DataView public function getStaticFilterColumns() { return array( - 'host', + 'host', 'host_contact', 'hostgroup', 'hostgroup_alias', 'hostgroup_name', 'service', 'service_description', 'service_display_name', 'servicegroup', 'servicegroup_alias', 'servicegroup_name' diff --git a/modules/monitoring/library/Monitoring/DataView/Servicegroupsummary.php b/modules/monitoring/library/Monitoring/DataView/Servicegroupsummary.php index cdea03548..311acb5ad 100644 --- a/modules/monitoring/library/Monitoring/DataView/Servicegroupsummary.php +++ b/modules/monitoring/library/Monitoring/DataView/Servicegroupsummary.php @@ -52,9 +52,9 @@ class Servicegroupsummary extends DataView return array( 'instance_name', 'services_severity', - 'host', 'host_alias', 'host_display_name', 'host_name', + 'host', 'host_alias', 'host_contact', 'host_display_name', 'host_name', 'hostgroup', 'hostgroup_alias', 'hostgroup_name', - 'service', 'service_description', 'service_display_name', + 'service', 'service_contact', 'service_description', 'service_display_name', 'servicegroup' ); } diff --git a/modules/monitoring/library/Monitoring/DataView/Servicestatus.php b/modules/monitoring/library/Monitoring/DataView/Servicestatus.php index 0a115fbd6..23e20e137 100644 --- a/modules/monitoring/library/Monitoring/DataView/Servicestatus.php +++ b/modules/monitoring/library/Monitoring/DataView/Servicestatus.php @@ -155,10 +155,12 @@ class ServiceStatus extends DataView { return array( 'host', + 'host_contact', 'hostgroup', 'hostgroup_alias', 'hostgroup_name', 'service', + 'service_contact', 'service_host', 'servicegroup', 'servicegroup_alias', From bcc867d48eaafc60260db045a3922846dcb7b916 Mon Sep 17 00:00:00 2001 From: Eric Lippmann Date: Mon, 8 Jul 2019 18:00:14 +0200 Subject: [PATCH 2/2] Allow to filter for contact groups --- .../Backend/Ido/Query/HostgroupQuery.php | 21 ++++++++ .../Backend/Ido/Query/HoststatusQuery.php | 19 ++++++++ .../Backend/Ido/Query/ServicegroupQuery.php | 48 ++++++++++++++++++- .../Backend/Ido/Query/ServicestatusQuery.php | 40 ++++++++++++++++ .../Monitoring/DataView/Hostgroupsummary.php | 2 +- .../Monitoring/DataView/Hoststatus.php | 2 +- .../DataView/Servicegroupsummary.php | 4 +- .../Monitoring/DataView/Servicestatus.php | 2 + 8 files changed, 133 insertions(+), 5 deletions(-) diff --git a/modules/monitoring/library/Monitoring/Backend/Ido/Query/HostgroupQuery.php b/modules/monitoring/library/Monitoring/Backend/Ido/Query/HostgroupQuery.php index 2704adb44..8b6b74435 100644 --- a/modules/monitoring/library/Monitoring/Backend/Ido/Query/HostgroupQuery.php +++ b/modules/monitoring/library/Monitoring/Backend/Ido/Query/HostgroupQuery.php @@ -29,6 +29,9 @@ class HostgroupQuery extends IdoQuery 'contacts' => [ 'host_contact' => 'hco.name1' ], + 'contactgroups' => [ + 'host_contactgroup' => 'hcgo.name1' + ], 'hostgroups' => array( 'hostgroup' => 'hgo.name1 COLLATE latin1_general_ci', 'hostgroup_alias' => 'hg.alias COLLATE latin1_general_ci', @@ -146,6 +149,24 @@ class HostgroupQuery extends IdoQuery ); } + /** + * Join contact groups + */ + protected function joinContactgroups() + { + $this->requireVirtualTable('hosts'); + + $this->select->joinLeft( + ['hcg' => 'icinga_host_contactgroups'], + 'hcg.host_id = h.host_id', + [] + )->joinLeft( + ['hcgo' => 'icinga_objects'], + 'hcgo.object_id = hcg.contactgroup_object_id AND hcgo.is_active = 1 AND hcgo.objecttype_id = 11', + [] + ); + } + /** * Join hosts */ diff --git a/modules/monitoring/library/Monitoring/Backend/Ido/Query/HoststatusQuery.php b/modules/monitoring/library/Monitoring/Backend/Ido/Query/HoststatusQuery.php index 47143ae46..998ea5d31 100644 --- a/modules/monitoring/library/Monitoring/Backend/Ido/Query/HoststatusQuery.php +++ b/modules/monitoring/library/Monitoring/Backend/Ido/Query/HoststatusQuery.php @@ -35,6 +35,9 @@ class HoststatusQuery extends IdoQuery 'contacts' => [ 'host_contact' => 'hco.name1' ], + 'contactgroups' => [ + 'host_contactgroup' => 'hcgo.name1' + ], 'hostgroups' => array( 'hostgroup' => 'hgo.name1 COLLATE latin1_general_ci', 'hostgroup_alias' => 'hg.alias COLLATE latin1_general_ci', @@ -220,6 +223,22 @@ class HoststatusQuery extends IdoQuery ); } + /** + * Join contact groups + */ + protected function joinContactgroups() + { + $this->select->joinLeft( + ['hcg' => 'icinga_host_contactgroups'], + 'hcg.host_id = h.host_id', + [] + )->joinLeft( + ['hcgo' => 'icinga_objects'], + 'hcgo.object_id = hcg.contactgroup_object_id AND hcgo.is_active = 1 AND hcgo.objecttype_id = 11', + [] + ); + } + /** * Join host groups */ diff --git a/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicegroupQuery.php b/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicegroupQuery.php index 20b16d3fb..bdf08fb38 100644 --- a/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicegroupQuery.php +++ b/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicegroupQuery.php @@ -25,9 +25,15 @@ class ServicegroupQuery extends IdoQuery 'contacts' => [ 'service_contact' => 'sco.name1' ], + 'contactgroups' => [ + 'service_contactgroup' => 'scgo.name1' + ], 'hostcontacts' => [ 'host_contact' => 'hco.name1' ], + 'hostcontactgroups' => [ + 'host_contactgroup' => 'hcgo.name1' + ], 'hostgroups' => array( 'hostgroup_name' => 'hgo.name1' ), @@ -120,6 +126,24 @@ class ServicegroupQuery extends IdoQuery ); } + /** + * Join contact groups + */ + protected function joinContactgroups() + { + $this->requireVirtualTable('services'); + + $this->select->joinLeft( + ['scg' => 'icinga_service_contactgroups'], + 'scg.service_id = s.service_id', + [] + )->joinLeft( + ['scgo' => 'icinga_objects'], + 'scgo.object_id = scg.contactgroup_object_id AND scgo.is_active = 1 AND scgo.objecttype_id = 10', + [] + ); + } + /** * Join host contacts */ @@ -142,6 +166,28 @@ class ServicegroupQuery extends IdoQuery ); } + /** + * Join host contact groups + */ + protected function joinHostcontactgroups() + { + $this->requireVirtualTable('services'); + + $this->select->joinLeft( + ['h' => 'icinga_hosts'], + 'h.host_object_id = s.host_object_id', + [] + )->joinLeft( + ['hcg' => 'icinga_host_contactgroups'], + 'hcg.host_id = h.host_id', + [] + )->joinLeft( + ['hcgo' => 'icinga_objects'], + 'hcgo.object_id = hcg.contactgroup_object_id AND hcgo.is_active = 1 AND hcgo.objecttype_id = 11', + [] + ); + } + /** * Join host groups */ @@ -173,7 +219,7 @@ class ServicegroupQuery extends IdoQuery $this->requireVirtualTable('services'); // Host custom var filters work w/o any host related table. If a host table join is necessary here some day, - // please adjust `joinHostcontacts()` where we explicitly do this already + // please adjust `joinHostcontact*()` where we explicitly do this already } /** diff --git a/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicestatusQuery.php b/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicestatusQuery.php index befd89784..966b346cf 100644 --- a/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicestatusQuery.php +++ b/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicestatusQuery.php @@ -38,9 +38,15 @@ class ServicestatusQuery extends IdoQuery 'contacts' => [ 'service_contact' => 'sco.name1' ], + 'contactgroups' => [ + 'service_contactgroup' => 'scgo.name1' + ], 'hostcontacts' => [ 'host_contact' => 'hco.name1' ], + 'hostcontactgroups' => [ + 'host_contactgroup' => 'hcgo.name1' + ], 'hostgroups' => array( 'hostgroup' => 'hgo.name1 COLLATE latin1_general_ci', 'hostgroup_alias' => 'hg.alias COLLATE latin1_general_ci', @@ -332,6 +338,22 @@ class ServicestatusQuery extends IdoQuery ); } + /** + * Join contact groups + */ + protected function joinContactgroups() + { + $this->select->joinLeft( + ['scg' => 'icinga_service_contactgroups'], + 'scg.service_id = s.service_id', + [] + )->joinLeft( + ['scgo' => 'icinga_objects'], + 'scgo.object_id = scg.contactgroup_object_id AND scgo.is_active = 1 AND scgo.objecttype_id = 10', + [] + ); + } + /** * Join host contacts */ @@ -350,6 +372,24 @@ class ServicestatusQuery extends IdoQuery ); } + /** + * Join host contact groups + */ + protected function joinHostcontactgroups() + { + $this->requireVirtualTable('hosts'); + + $this->select->joinLeft( + ['hcg' => 'icinga_host_contactgroups'], + 'hcg.host_id = h.host_id', + [] + )->joinLeft( + ['hcgo' => 'icinga_objects'], + 'hcgo.object_id = hcg.contactgroup_object_id AND hcgo.is_active = 1 AND hcgo.objecttype_id = 11', + [] + ); + } + /** * Join host groups */ diff --git a/modules/monitoring/library/Monitoring/DataView/Hostgroupsummary.php b/modules/monitoring/library/Monitoring/DataView/Hostgroupsummary.php index e3f69a95a..704aa74d4 100644 --- a/modules/monitoring/library/Monitoring/DataView/Hostgroupsummary.php +++ b/modules/monitoring/library/Monitoring/DataView/Hostgroupsummary.php @@ -58,7 +58,7 @@ class Hostgroupsummary extends DataView { return array( 'instance_name', - 'host', 'host_alias', 'host_contact', 'host_display_name', 'host_name', + 'host', 'host_alias', 'host_contact', 'host_contactgroup', 'host_display_name', 'host_name', 'hostgroup', 'service', 'service_description', 'service_display_name', 'servicegroup', 'servicegroup_alias', 'servicegroup_name' diff --git a/modules/monitoring/library/Monitoring/DataView/Hoststatus.php b/modules/monitoring/library/Monitoring/DataView/Hoststatus.php index faf63ed50..6440fe529 100644 --- a/modules/monitoring/library/Monitoring/DataView/Hoststatus.php +++ b/modules/monitoring/library/Monitoring/DataView/Hoststatus.php @@ -71,7 +71,7 @@ class HostStatus extends DataView public function getStaticFilterColumns() { return array( - 'host', 'host_contact', + 'host', 'host_contact', 'host_contactgroup', 'hostgroup', 'hostgroup_alias', 'hostgroup_name', 'service', 'service_description', 'service_display_name', 'servicegroup', 'servicegroup_alias', 'servicegroup_name' diff --git a/modules/monitoring/library/Monitoring/DataView/Servicegroupsummary.php b/modules/monitoring/library/Monitoring/DataView/Servicegroupsummary.php index 311acb5ad..fbcd81d20 100644 --- a/modules/monitoring/library/Monitoring/DataView/Servicegroupsummary.php +++ b/modules/monitoring/library/Monitoring/DataView/Servicegroupsummary.php @@ -52,9 +52,9 @@ class Servicegroupsummary extends DataView return array( 'instance_name', 'services_severity', - 'host', 'host_alias', 'host_contact', 'host_display_name', 'host_name', + 'host', 'host_alias', 'host_contact', 'host_contactgroup', 'host_display_name', 'host_name', 'hostgroup', 'hostgroup_alias', 'hostgroup_name', - 'service', 'service_contact', 'service_description', 'service_display_name', + 'service', 'service_contact', 'service_contactgroup', 'service_description', 'service_display_name', 'servicegroup' ); } diff --git a/modules/monitoring/library/Monitoring/DataView/Servicestatus.php b/modules/monitoring/library/Monitoring/DataView/Servicestatus.php index 23e20e137..e80c6f0c4 100644 --- a/modules/monitoring/library/Monitoring/DataView/Servicestatus.php +++ b/modules/monitoring/library/Monitoring/DataView/Servicestatus.php @@ -156,11 +156,13 @@ class ServiceStatus extends DataView return array( 'host', 'host_contact', + 'host_contactgroup', 'hostgroup', 'hostgroup_alias', 'hostgroup_name', 'service', 'service_contact', + 'service_contactgroup', 'service_host', 'servicegroup', 'servicegroup_alias',