Revision 6520dbc0
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
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