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 |
|