Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / controllers / vigiboard_plugin / history.py @ 4febadf0

History | View | Annotate | Download (3.26 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 HTTPNotFound
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.vigiboard_plugin import VigiboardRequestPlugin
17
from vigilo.models.configure import DBSession
18
from vigilo.models import User, CorrEvent, Event, StateName
19

    
20
class PluginHistory(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 liens internes et externes.
30
        Pour accéder à cette page, l'utilisateur doit être authentifié.
31

32
        @param id: identifiant de l'événement
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))
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
        # TODO: on est dans du JSON, donc flash/redirect ne fonctionneront pas!
53
        if events.num_rows() != 1:
54
            flash(_('No access to this event'), 'error')
55
            redirect('/')
56

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

    
62
            # Rappel:
63
            # event[0] = priorité de l'alerte corrélée.
64
            # event[1] = alerte brute.
65
            if event.servicename:
66
                service = urllib.quote(event.servicename)
67
            else:
68
                service = None
69
            eventdetails[edname] = edlink[1] % {
70
                'idcorrevent': idcorrevent,
71
                'host': urllib.quote(event.hostname),
72
                'service': service,
73
                'message': urllib.quote(event[0].message),
74
            }
75

    
76
        return dict(
77
                current_state = StateName.value_to_statename(
78
                                    event[0].current_state),
79
                initial_state = StateName.value_to_statename(
80
                                    event[0].initial_state),
81
                peak_state = StateName.value_to_statename(
82
                                    event[0].peak_state),
83
                idcorrevent = idcorrevent,
84
                host = event.hostname,
85
                service = event.servicename,
86
                eventdetails = eventdetails,
87
            )
88

    
89