From 7371ec4f01898978131430e05939462cc1f6cabb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20MOHIER?= Date: Wed, 20 Apr 2016 15:21:47 +0200 Subject: [PATCH 1/5] Groups, fix #474 --- module/datamanager.py | 54 +++++++--- module/plugins/groups/groups.py | 4 +- .../groups/views/contacts-groups-overview.tpl | 101 +++++++++++++++--- .../groups/views/hosts-groups-overview.tpl | 93 ++++++++++------ .../groups/views/services-groups-overview.tpl | 60 ++++++++--- 5 files changed, 237 insertions(+), 75 deletions(-) diff --git a/module/datamanager.py b/module/datamanager.py index aa826ab4..39995d27 100644 --- a/module/datamanager.py +++ b/module/datamanager.py @@ -527,26 +527,41 @@ def search_hosts_and_services(self, search, user, get_impacts=True, sorter=None) items = new_items if (t == 'hg' or t == 'hgroup') and s.lower() != 'all': - logger.debug("[WebUI - datamanager] searching for a hostgroup %s", s) + logger.debug("[WebUI - datamanager] searching for items in the hostgroup %s", s) group = self.get_hostgroup(s) if not group: return [] - # Items have a item.get_groupnames() method that returns a comma separated string ... - items = [i for i in items if group in i.get_groupnames().split(',')] + # Items have a item.get_groupnames() method that returns a comma separated string ... strange format! + for item in items: + if group.get_name() in item.get_groupnames().split(', '): + logger.debug("[WebUI - datamanager] => item %s is a known member!", item.get_name()) + items = [i for i in items if group.get_name() in i.get_groupnames().split(', ')] if (t == 'sg' or t == 'sgroup') and s.lower() != 'all': - logger.warning("[WebUI - datamanager] searching for a servicegroup %s", s) + logger.debug("[WebUI - datamanager] searching for items in the servicegroup %s", s) group = self.get_servicegroup(s) if not group: return [] - # Items have a item.get_groupnames() method that returns a comma separated string ... - items = [i for i in items if group in i.get_groupnames().split(',')] + # Items have a item.get_groupnames() method that returns a comma+space separated string ... strange format! + for item in items: + # logger.info("[WebUI - datamanager] - item %s is member of %s", item.get_name(), item.get_groupnames()) + if group.get_name() in item.get_groupnames().split(', '): + logger.debug("[WebUI - datamanager] => item %s is a known member!", item.get_name()) + items = [i for i in items if group.get_name() in i.get_groupnames().split(', ')] + #@mohierf: to be refactored! if (t == 'cg' or t == 'cgroup') and s.lower() != 'all': - logger.debug("[WebUI - datamanager] searching for a contactgroup %s", s) + logger.info("[WebUI - datamanager] searching for items related with the contactgroup %s", s) group = self.get_contactgroup(s, user) if not group: return [] + # Items have a item.get_groupnames() method that returns a comma+space separated string ... strange format! + for item in items: + for contact in item.contacts: + logger.info("[WebUI - datamanager] - item %s has a contact %s, member of: %s", item.get_name(), contact.get_name(), contact.get_groupnames()) + if group.get_name() in contact.get_groupnames().split(', '): + logger.info("[WebUI - datamanager] => contact %s is a known member!", contact.get_name()) + contacts = [c for c in self.get_contacts(user=user) if c in group.members] items = list(set(itertools.chain(*[self._only_related_to(items, self.rg.contacts.find_by_name(c)) for c in contacts]))) @@ -874,13 +889,12 @@ def set_hostgroups_level(self, user): # All known hostgroups are level 0 groups ... for group in self.get_hostgroups(user=user): logger.debug("[WebUI - datamanager] set_hostgroups_level, group: %s", group) - # logger.info("[WebUI - datamanager] set_hostgroups_level, group members: %s", group.members) if not hasattr(group, 'level'): self.set_hostgroup_level(group, 0, user) def set_hostgroup_level(self, group, level, user): - logger.debug("[WebUI - datamanager] set_hostgroup_level, group: %s, level: %d", group, level) setattr(group, 'level', level) + logger.debug("[WebUI - datamanager] set_hostgroup_level, group: %s, level: %d", group, level) for g in sorted(group.get_hostgroup_members()): if not g: @@ -892,7 +906,7 @@ def set_hostgroup_level(self, group, level, user): except AttributeError: pass - def get_hostgroups(self, user=None, name=None, parent=None, members=False): + def get_hostgroups(self, user=None, name=None, parent=None): """ Get a list of known hosts groups :param user: concerned user @@ -919,7 +933,7 @@ def get_hostgroups(self, user=None, name=None, parent=None, members=False): else: return self._only_related_to(items, user) - def get_hostgroup(self, name, user=None, members=False): + def get_hostgroup(self, name, user=None): """ Get a specific hosts group :param name: searched hosts group name @@ -931,21 +945,33 @@ def get_hostgroup(self, name, user=None, members=False): except UnicodeEncodeError: pass - return self._is_related_to(self.get_hostgroups(user=user, name=name, members=members), user) + group = self.get_hostgroups(user=user, name=name) + return self._is_related_to(self.get_hostgroups(user=user, name=name), user) - def get_hostgroup_members(self, name, user=None): + def get_hostgroup_hosts(self, name, user=None): """ Get a list of hosts members of a group :param name: searched group name :param user: concerned user :returns: List of hosts groups related to the user """ + logger.warning("[WebUI - datamanager] get_hostgroup_hosts: %s", name) try: name = name.decode('utf8', 'ignore') except UnicodeEncodeError: pass - return self._is_related_to(self.get_hostgroup(user=user, name=name, members=True), user) + group = self.get_hostgroup(user=user, name=name) + logger.warning("[WebUI - datamanager] get_hostgroup_hosts, found: %s", group) + if group: + for host in group.get_hosts(): + logger.warning("[WebUI - datamanager] -> host: %s, contacts: %s", host.get_name(), host.contacts) + if user: + for contact in host.contacts: + if contact.contact_name == user.contact_name: + logger.info("[WebUI - relation], user is a contact through an hostgroup") + return self._is_related_to(group.get_hosts(), user) + return None ## # Services groups diff --git a/module/plugins/groups/groups.py b/module/plugins/groups/groups.py index f046b24c..ba53b56c 100644 --- a/module/plugins/groups/groups.py +++ b/module/plugins/groups/groups.py @@ -38,11 +38,9 @@ def show_contactgroups(): level = int(app.request.GET.get('level', 0)) parent = app.request.GET.get('parent', None) - cgroups = sorted(app.datamgr.get_contactgroups(parent=parent, user=user), key=lambda cg: cg.contactgroup_name) - return { 'level': level, - 'contactgroups': cgroups, + 'contactgroups': sorted(app.datamgr.get_contactgroups(parent=parent, user=user), key=lambda cg: cg.contactgroup_name), 'user': user } diff --git a/module/plugins/groups/views/contacts-groups-overview.tpl b/module/plugins/groups/views/contacts-groups-overview.tpl index 1dd908cd..c6c5f9fa 100644 --- a/module/plugins/groups/views/contacts-groups-overview.tpl +++ b/module/plugins/groups/views/contacts-groups-overview.tpl @@ -1,3 +1,5 @@ +%setdefault('debug', False) + %rebase("layout", css=['groups/css/groups-overview.css'], title='Contacts groups overview') %helper = app.helper @@ -5,28 +7,99 @@
- -
+ + - - - @@ -629,77 +594,42 @@
- -
+ + - - - From c85207950e3ee76a674919331a1be40f8f1a3c8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20MOHIER?= Date: Fri, 22 Apr 2016 13:41:44 +0200 Subject: [PATCH 4/5] New Bottle syntax for rebasing --- module/views/layout.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/views/layout.tpl b/module/views/layout.tpl index 95fba8fc..7456020b 100644 --- a/module/views/layout.tpl +++ b/module/views/layout.tpl @@ -157,7 +157,7 @@
- %include + {{!base}}
%if navi and len(navi) > 1: From 71dc0bca29c78d30d846e19f5ac2c5e97a6e7192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20MOHIER?= Date: Fri, 22 Apr 2016 13:42:23 +0200 Subject: [PATCH 5/5] Clean logs ... --- module/datamanager.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/module/datamanager.py b/module/datamanager.py index 39995d27..13fa57b1 100644 --- a/module/datamanager.py +++ b/module/datamanager.py @@ -544,7 +544,6 @@ def search_hosts_and_services(self, search, user, get_impacts=True, sorter=None) return [] # Items have a item.get_groupnames() method that returns a comma+space separated string ... strange format! for item in items: - # logger.info("[WebUI - datamanager] - item %s is member of %s", item.get_name(), item.get_groupnames()) if group.get_name() in item.get_groupnames().split(', '): logger.debug("[WebUI - datamanager] => item %s is a known member!", item.get_name()) items = [i for i in items if group.get_name() in i.get_groupnames().split(', ')] @@ -558,9 +557,8 @@ def search_hosts_and_services(self, search, user, get_impacts=True, sorter=None) # Items have a item.get_groupnames() method that returns a comma+space separated string ... strange format! for item in items: for contact in item.contacts: - logger.info("[WebUI - datamanager] - item %s has a contact %s, member of: %s", item.get_name(), contact.get_name(), contact.get_groupnames()) if group.get_name() in contact.get_groupnames().split(', '): - logger.info("[WebUI - datamanager] => contact %s is a known member!", contact.get_name()) + logger.debug("[WebUI - datamanager] => contact %s is a known member!", contact.get_name()) contacts = [c for c in self.get_contacts(user=user) if c in group.members] items = list(set(itertools.chain(*[self._only_related_to(items, self.rg.contacts.find_by_name(c)) for c in contacts])))