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