def service(self, service, host, partial, noCache): """ Auto-compléteur pour les noms des services d'un hôte. @param host: Nom d'hôte (optionnel) sur lequel s'applique l'autocomplétion. @type host: C{unicode} @param service: Motif qui doit apparaître dans le nom de service. @type service: C{unicode} @note: Les caractères '?' et '*' peuvent être utilisés dans le paramètre L{service} pour remplacer un caractère quelconque ou une chaîne de caractères, respectivement. Ex: 'ho?t*' permet de récupérer 'host', 'honte' et 'hostile', mais pas 'hote' ou 'hopital'. @return: Un dictionnaire dont la clé 'results' contient la liste des noms de services configurés sur L{host} (ou sur n'importe quel hôte si L{host} vaut None), correspondant au motif donné et auxquels l'utilisateur a accès. @rtype: C{dict} """ service = sql_escape_like(service) user = get_current_user() if not user: return dict(results=[]) if partial: service += "%" hostgroup = SUPITEM_GROUP_TABLE.alias() servicegroup = SUPITEM_GROUP_TABLE.alias() services = ( DBSession.query(LowLevelService.servicename) .distinct() .outerjoin( (Host, Host.idhost == LowLevelService.idhost), (hostgroup, hostgroup.c.idsupitem == Host.idhost), (servicegroup, servicegroup.c.idsupitem == LowLevelService.idservice), ) .filter(LowLevelService.servicename.ilike(service)) .order_by(LowLevelService.servicename) ) if not config.is_manager.is_met(request.environ): user_groups = [ug[0] for ug in user.supitemgroups() if ug[1]] services = services.filter( or_(hostgroup.c.idgroup.in_(user_groups), servicegroup.c.idgroup.in_(user_groups)) ) if host: services = services.filter(Host.name == host) services = services.all() return dict(results=[s.servicename for s in services])
def host(self, host, partial, noCache): """ Auto-compléteur pour les noms d'hôtes. @param host: Motif qui doit apparaître dans le nom de l'hôte. @type host: C{unicode} @note: Les caractères '?' et '*' peuvent être utilisés dans le paramètre L{host} pour remplacer un caractère quelconque ou une chaîne de caractères, respectivement. Ex: 'ho?t*' permet de récupérer 'host', 'honte' et 'hostile', mais pas 'hote' ou 'hopital'. @return: Un dictionnaire dont la clé 'results' contient la liste des noms d'hôtes correspondant au motif donné en entrée et auxquels l'utilisateur a accès. @rtype: C{dict} """ host = sql_escape_like(host) user = get_current_user() if not user: return dict(results=[]) if partial: host += "%" hostgroup = SUPITEM_GROUP_TABLE.alias() servicegroup = SUPITEM_GROUP_TABLE.alias() hostnames = ( DBSession.query(Host.name) .distinct() .outerjoin( (hostgroup, hostgroup.c.idsupitem == Host.idhost), (LowLevelService, LowLevelService.idhost == Host.idhost), (servicegroup, servicegroup.c.idsupitem == LowLevelService.idservice), ) .filter(Host.name.ilike(host)) .order_by(Host.name) ) if not config.is_manager.is_met(request.environ): user_groups = [ug[0] for ug in user.supitemgroups() if ug[1]] hostnames = hostnames.filter( or_(hostgroup.c.idgroup.in_(user_groups), servicegroup.c.idgroup.in_(user_groups)) ) hostnames = hostnames.all() return dict(results=[h.name for h in hostnames])