Project

General

Profile

Revision 03e5dc9e

ID03e5dc9e20dbe8316f82f4209b3af3db3fa385f1
Parent 488959eb
Child 6520dbc0

Added by Vincent QUEMENER over 13 years ago

Correction de la requête utilisée par le plugin pour récupérer les informations de l'évènement pour supprimer la vérification superflue des permissions (celle-ci étant déjà faite au préalable par le contrôleur).

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

View differences:

vigiboard/controllers/plugins/details.py
29 29
from tg.exceptions import HTTPForbidden
30 30
from tg import config, url
31 31

  
32
from vigiboard.controllers.vigiboardrequest import VigiboardRequest
32
from sqlalchemy.sql.expression import null as expr_null, union_all
33
from vigilo.models.session import DBSession
34
from vigilo.models.tables import Event, \
35
    CorrEvent, Host, LowLevelService, StateName
36

  
33 37
from vigiboard.controllers.plugins import VigiboardRequestPlugin
34
from vigilo.models.tables import CorrEvent, Event, StateName
35 38
from vigilo.turbogears.helpers import get_current_user
36 39

  
37 40
class PluginDetails(VigiboardRequestPlugin):
......
50 53
        """
51 54

  
52 55
        # Obtention de données sur l'événement et sur son historique
53
        user = get_current_user()
54
        if user is None:
55
            return None
56

  
57
        events = VigiboardRequest(user, False)
58
        events.add_table(
59
            Event,
60
            events.items.c.hostname,
61
            events.items.c.servicename,
56
        host_query = DBSession.query(
57
            Host.idhost.label("idsupitem"),
58
            Host.name.label("host"),
59
            expr_null().label("service"),
62 60
        )
63
        events.add_join((CorrEvent, CorrEvent.idcause == Event.idevent))
64
        events.add_join((events.items,
65
            Event.idsupitem == events.items.c.idsupitem))
66
        events.add_filter(CorrEvent.idcorrevent == idcorrevent)
67

  
68
        # Vérification que au moins un des identifiants existe et est éditable
69
        if events.num_rows() != 1:
70
            raise HTTPForbidden()
61
        lls_query = DBSession.query(
62
            LowLevelService.idservice.label("idsupitem"),
63
            Host.name.label("host"),
64
            LowLevelService.servicename.label("service"),
65
        ).join(
66
            (Host, Host.idhost == LowLevelService.idhost),
67
        )
68
        supitems = union_all(lls_query, host_query, correlate=False).alias()
69
        event = DBSession.query(
70
            CorrEvent.idcorrevent,
71
            CorrEvent.idcause,
72
            supitems.c.host,
73
            supitems.c.service,
74
            Event.message,
75
            Event.initial_state,
76
            Event.current_state,
77
            Event.peak_state
78
        ).join(
79
            (Event, Event.idevent == CorrEvent.idcause),
80
            (supitems, supitems.c.idsupitem == Event.idsupitem),
81
        ).filter(CorrEvent.idcorrevent == idcorrevent
82
        ).first()
71 83

  
72
        event = events.req[0]
73 84
        eventdetails = {}
74 85
        for edname, edlink in enumerate(config['vigiboard_links.eventdetails']):
75 86

  
76
            if event.servicename:
77
                service = urllib.quote(event.servicename)
87
            if event.service:
88
                service = urllib.quote(event.service)
78 89
            else:
79 90
                service = None
80 91

  
81 92
            eventdetails[unicode(edname)] = url(edlink[1]) % {
82 93
                'idcorrevent': idcorrevent,
83
                'host': urllib.quote(event.hostname),
94
                'host': urllib.quote(event.host),
84 95
                'service': service,
85
                'message': urllib.quote(event[0].message),
96
                'message': urllib.quote(event.message.encode('utf-8')),
86 97
            }
87 98

  
88 99
        return dict(
89 100
                current_state = StateName.value_to_statename(
90
                                    event[0].current_state),
101
                                    event.current_state),
91 102
                initial_state = StateName.value_to_statename(
92
                                    event[0].initial_state),
103
                                    event.initial_state),
93 104
                peak_state = StateName.value_to_statename(
94
                                    event[0].peak_state),
105
                                    event.peak_state),
95 106
                idcorrevent = idcorrevent,
96
                host = event.hostname,
97
                service = event.servicename,
107
                host = event.host,
108
                service = event.service,
98 109
                eventdetails = eventdetails,
99
                idcause = event[0].idevent,
110
                idcause = event.idcause,
100 111
            )

Also available in: Unified diff