Project

General

Profile

Revision 6520dbc0

ID6520dbc044e6b0350ac1be7a99647ed85a2dab6d
Parent 03e5dc9e
Child 9f441867

Added by Vincent QUEMENER over 13 years ago

Optimisation de la requête récupérant les informations de l'évènement corrélé lors de l'ouverture de la boîte de dialogue de détails (#539).

git-svn-id: https://vigilo-dev.si.c-s.fr/svn@6418 b22e2e97-25c9-44ff-b637-2e5ceca36478

View differences:

vigiboard/controllers/root.py
33 33
from sqlalchemy.sql import func
34 34
from sqlalchemy.orm import aliased
35 35
from sqlalchemy.orm import contains_eager
36
from sqlalchemy.sql.expression import or_
36 37
from repoze.what.predicates import Any, All, in_group, \
37 38
                                    has_permission, not_anonymous, \
38 39
                                    NotAuthorizedError
......
46 47
from vigilo.models.tables.grouphierarchy import GroupHierarchy
47 48
from vigilo.models.functions import sql_escape_like
48 49
from vigilo.models.tables.secondary_tables import EVENTSAGGREGATE_TABLE, \
49
        USER_GROUP_TABLE
50
        USER_GROUP_TABLE, SUPITEM_GROUP_TABLE
50 51

  
51 52
from vigilo.turbogears.controllers.autocomplete import AutoCompleteController
52 53
from vigilo.turbogears.controllers.proxy import ProxyController
......
694 695
        Permet de récupérer la valeur d'un plugin associée à un CorrEvent
695 696
        donné via JSON.
696 697
        """
698

  
699
        # Vérification de l'existence du plugin
697 700
        plugins = dict(config['columns_plugins'])
698 701
        if plugin_name not in plugins:
699 702
            raise HTTPNotFound(_("No such plugin '%s'") % plugin_name)
700 703

  
701
        # Permet de vérifier si l'utilisateur a bien les permissions
702
        # pour accéder à cet événement et si l'événement existe.
704
        # Récupération du nom de l'utilisateur
703 705
        user = get_current_user()
704
        events = VigiboardRequest(user, False)
705
        events.add_table(CorrEvent.idcorrevent)
706
        events.add_join((Event, CorrEvent.idcause == Event.idevent))
707
        events.add_join((events.items,
708
            Event.idsupitem == events.items.c.idsupitem))
709
        events.add_filter(CorrEvent.idcorrevent == idcorrevent)
706

  
707
        # Vérification des permissions de l'utilisateur
708
        events = DBSession.query(
709
            CorrEvent.idcorrevent
710
        ).join(
711
            (Event, Event.idevent == CorrEvent.idcause),
712
        ).outerjoin(
713
            (LowLevelService, LowLevelService.idservice == Event.idsupitem),
714
        ).join(
715
            (SUPITEM_GROUP_TABLE,
716
                or_(
717
                    SUPITEM_GROUP_TABLE.c.idsupitem == \
718
                        LowLevelService.idhost,
719
                    SUPITEM_GROUP_TABLE.c.idsupitem == \
720
                        Event.idsupitem,
721
                )
722
            ),
723
        ).join(
724
            (GroupHierarchy, GroupHierarchy.idchild == SUPITEM_GROUP_TABLE.c.idgroup),
725
        ).join(
726
            (DataPermission, DataPermission.idgroup == GroupHierarchy.idparent),
727
        ).join(
728
            (USER_GROUP_TABLE, USER_GROUP_TABLE.c.idgroup == DataPermission.idusergroup),
729
        ).filter(USER_GROUP_TABLE.c.username == user.user_name
730
        ).filter(CorrEvent.idcorrevent == idcorrevent
731
        ).count()
710 732

  
711 733
        # Pas d'événement ou permission refusée. On ne distingue pas
712 734
        # les 2 cas afin d'éviter la divulgation d'informations.
713
        if not events.num_rows():
735
        if events == 0:
714 736
            raise HTTPNotFound(_('No such incident or insufficient '
715 737
                                'permissions'))
716 738

  

Also available in: Unified diff