Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / controllers / plugins / details.py @ b42cc707

History | View | Annotate | Download (3.05 KB)

1
# -*- coding: utf-8 -*-
2
# vim:set expandtab tabstop=4 shiftwidth=4:
3
"""
4
Un plugin pour VigiBoard qui ajoute une colonne avec les liens vers les
5
entrées d'historiques liées à l'événement, ainsi que les liens vers les
6
applications externes.
7
"""
8

    
9
import urllib
10

    
11
from tg.exceptions import HTTPForbidden
12
from tg import flash, request, config, redirect, url
13
from pylons.i18n import ugettext as _
14

    
15
from vigiboard.controllers.vigiboardrequest import VigiboardRequest
16
from vigiboard.controllers.plugins import VigiboardRequestPlugin
17
from vigilo.models.configure import DBSession
18
from vigilo.models import User, CorrEvent, Event, StateName
19

    
20
class PluginDetails(VigiboardRequestPlugin):
21
    """
22
    Plugin qui ajoute des liens vers les historiques et les applications
23
    externes.
24
    """
25

    
26
    def get_value(self, idcorrevent, *args, **kwargs):
27
        """
28
        Renvoie les éléments pour l'affichage de la fenêtre de dialogue
29
        contenant des détails sur un événement corrélé.
30

31
        @param idcorrevent: identifiant de l'événement corrélé.
32
        @type idcorrevent: C{int}
33
        """
34

    
35
        # Obtention de données sur l'événement et sur son historique
36
        username = request.environ.get('repoze.who.identity'
37
                    ).get('repoze.who.userid')
38

    
39
        username = request.environ['repoze.who.identity']['repoze.who.userid']
40
        events = VigiboardRequest(User.by_user_name(username), False)
41
        events.add_table(
42
            Event,
43
            events.items.c.hostname,
44
            events.items.c.servicename,
45
        )
46
        events.add_join((CorrEvent, CorrEvent.idcause == Event.idevent))
47
        events.add_join((events.items, 
48
            Event.idsupitem == events.items.c.idsupitem))
49
        events.add_filter(CorrEvent.idcorrevent == idcorrevent)
50

    
51
        # Vérification que au moins un des identifiants existe et est éditable
52
        if events.num_rows() != 1:
53
            raise HTTPForbidden()
54

    
55
        event = events.req[0]
56
        eventdetails = {}
57
        for edname, edlink in \
58
                config['vigiboard_links.eventdetails'].iteritems():
59

    
60
            if event.servicename:
61
                service = urllib.quote(event.servicename)
62
            else:
63
                service = None
64

    
65
            eventdetails[edname] = edlink[1] % {
66
                'idcorrevent': idcorrevent,
67
                'host': urllib.quote(event.hostname),
68
                'service': service,
69
                'message': urllib.quote(event[0].message),
70
            }
71

    
72
        return dict(
73
                current_state = StateName.value_to_statename(
74
                                    event[0].current_state),
75
                initial_state = StateName.value_to_statename(
76
                                    event[0].initial_state),
77
                peak_state = StateName.value_to_statename(
78
                                    event[0].peak_state),
79
                idcorrevent = idcorrevent,
80
                host = event.hostname,
81
                service = event.servicename,
82
                eventdetails = eventdetails,
83
                idcause = event[0].idevent,
84
            )
85

    
86