Revision 94f31908
Renommage du dossier des plugins de VigiBoard en "plugins/", dans le code python et les templates.
Quelques corrections dans le RootController de VigiBoard.
Renommage du plugin "history" en "details" pour plus de cohérence avec le code HTML qu'il génère.
git-svn-id: https://vigilo-dev.si.c-s.fr/svn@2168 b22e2e97-25c9-44ff-b637-2e5ceca36478
vigiboard/config/app_cfg.py | ||
---|---|---|
57 | 57 |
|
58 | 58 |
# Configuration des liens |
59 | 59 |
# Les elements suivants peuvent etre utilises dans la chaine de formatage : |
60 |
# - idcorrevent : identifiant de l'aggregat (alerte correlee)
|
|
61 |
# - host : le nom de l'hote concerne par l'alerte
|
|
62 |
# - service : le nom du service concerne par l'alerte
|
|
63 |
# - message : le message transmis par Nagios dans l'alerte
|
|
60 |
# - %(idcorrevent)d : identifiant de l'aggregat (alerte correlee)
|
|
61 |
# - %(host)s : le nom de l'hote concerne par l'alerte
|
|
62 |
# - %(service)s : le nom du service concerne par l'alerte
|
|
63 |
# - %(message) : le message transmis par Nagios dans l'alerte
|
|
64 | 64 |
base_config['vigiboard_links.eventdetails'] = { |
65 | 65 |
'nagios': ['Nagios host details', 'http://example1.com/%(idcorrevent)d'], |
66 | 66 |
'metrology': ['Metrology details', 'http://example2.com/%(idcorrevent)d'], |
... | ... | |
70 | 70 |
} |
71 | 71 |
|
72 | 72 |
# URL des tickets, possibilités: |
73 |
# - %(idaggregate)s
|
|
73 |
# - %(idcorrevent)d
|
|
74 | 74 |
# - %(host)s |
75 | 75 |
# - %(service)s |
76 | 76 |
# - %(tt)s |
77 | 77 |
base_config['vigiboard_links.tt'] = 'http://example4.com/%(idcorrevent)d/%(tt)s' |
78 | 78 |
|
79 | 79 |
# Plugins to use |
80 |
base_config['vigiboard_plugins'] = [ |
|
81 |
('history', 'PluginHistory'), |
|
82 |
('date', 'PluginDate'), |
|
83 |
('priority', 'PluginPriority'), |
|
84 |
('occurrences', 'PluginOccurrences'), |
|
85 |
('hostname', 'PluginHostname'), |
|
86 |
('servicename', 'PluginServicename'), |
|
87 |
('output', 'PluginOutput'), |
|
88 |
('hls', 'PluginHLS'), |
|
89 |
('tt', 'PluginTroubleTicket'), |
|
90 |
('status', 'PluginStatus'), |
|
91 |
|
|
92 |
# Le plugin PluginId peut servir pour débuguer VigiBoard. |
|
93 |
# En production, mieux vaut le désactiver car il expose |
|
94 |
# des données d'un niveau assez bas dans l'interface. |
|
95 |
# ('id', 'PluginId'), |
|
80 |
base_config['vigiboard_plugins'] = [#{ |
|
81 |
# 'correvent': [ |
|
82 |
('details', 'PluginDetails'), |
|
83 |
('date', 'PluginDate'), |
|
84 |
('priority', 'PluginPriority'), |
|
85 |
('occurrences', 'PluginOccurrences'), |
|
86 |
('hostname', 'PluginHostname'), |
|
87 |
('servicename', 'PluginServicename'), |
|
88 |
('output', 'PluginOutput'), |
|
89 |
('hls', 'PluginHLS'), |
|
90 |
('tt', 'PluginTroubleTicket'), |
|
91 |
('status', 'PluginStatus'), |
|
92 |
|
|
93 |
# Le plugin PluginId peut servir pour débuguer VigiBoard. |
|
94 |
# En production, mieux vaut le désactiver car il expose |
|
95 |
# des données d'un niveau assez bas dans l'interface. |
|
96 |
# ('id', 'PluginId'), |
|
97 |
# ], |
|
98 |
|
|
99 |
# 'event': [ |
|
100 |
# ('timestamp', 'PluginTimestamp'), |
|
101 |
# ('hostname', 'PluginHostname'), |
|
102 |
# ('servicename', 'PluginServicename'), |
|
103 |
# ('current_state', 'PluginCurrentState'), |
|
104 |
# ('initial_state', 'PluginInitialState'), |
|
105 |
# ('peak_state', 'PluginPeakState'), |
|
106 |
# ('output', 'PluginOutput'), |
|
107 |
# ('history_link', 'PluginHistoryLink'), |
|
108 |
# ], |
|
109 |
|
|
110 |
# 'eventhistory': [ |
|
111 |
# |
|
112 |
# ], |
|
113 |
#} |
|
96 | 114 |
] |
97 | 115 |
|
98 | 116 |
base_config['vigiboard_refresh_times'] = ( |
vigiboard/controllers/plugins/__init__.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Module complémentaire générique. |
|
5 |
""" |
|
6 |
|
|
7 |
from pylons.i18n import ugettext as _ |
|
8 |
|
|
9 |
class VigiboardRequestPlugin(object): |
|
10 |
""" |
|
11 |
Classe que les plugins de VigiBoard doivent étendre. |
|
12 |
""" |
|
13 |
|
|
14 |
def __init__ (self, table = None, join = None, outerjoin = None, |
|
15 |
filters = None, groupby = None, orderby = None, name = '', |
|
16 |
style = None, object_name = ""): |
|
17 |
self.table = table |
|
18 |
self.join = join |
|
19 |
self.outerjoin = outerjoin |
|
20 |
self.filter = filters |
|
21 |
self.orderby = orderby |
|
22 |
self.name = name |
|
23 |
self.groupby = groupby |
|
24 |
self.style = style |
|
25 |
self.object_name = object_name |
|
26 |
|
|
27 |
def get_value(self, idcorrevent, *args, **kwargs): |
|
28 |
""" |
|
29 |
Cette méthode est appelée depuis le template associé à ce plugin, |
|
30 |
mais également lorsque l'on demande la valeur du plugin grâce à la |
|
31 |
méthode get_plugin_value du L{RootController} de VigiBoard. |
|
32 |
|
|
33 |
Cette méthode DEVRAIT être surchargée dans les classes dérivées. |
|
34 |
|
|
35 |
@param idcorrevent: Identifiant du L{CorrEvent} à interroger. |
|
36 |
@type idcorrevent: C{int} |
|
37 |
@return: Dictionnaire contenant un texte statique. |
|
38 |
@rtype: C{dict} |
|
39 |
""" |
|
40 |
pass |
|
41 |
|
|
42 |
def get_generated_columns_count(self): |
|
43 |
""" |
|
44 |
Cette méthode renvoie le nombre de colonnes ajoutées dans le tableau |
|
45 |
des événements par ce plugin. Par défaut, on suppose que chaque plugin |
|
46 |
n'ajoute qu'une seule colonne au tableau. |
|
47 |
|
|
48 |
Cette méthode PEUT être surchargée dans les classes dérivées. |
|
49 |
|
|
50 |
@return: Nombre de colonnes ajoutées par ce plugin. |
|
51 |
@rtype: C{int} |
|
52 |
""" |
|
53 |
return 1 |
|
54 |
|
vigiboard/controllers/plugins/date.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec la date à laquelle |
|
5 |
est survenu un événement et la durée depuis laquelle l'événement est actif. |
|
6 |
""" |
|
7 |
|
|
8 |
from pylons.i18n import ugettext as _ |
|
9 |
from tg import url |
|
10 |
|
|
11 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin |
|
12 |
from vigilo.models.configure import DBSession |
|
13 |
from vigilo.models import HighLevelService, \ |
|
14 |
CorrEvent, Event, SupItem |
|
15 |
|
|
16 |
class PluginDate(VigiboardRequestPlugin): |
|
17 |
"""Plugin pour l'ajout d'une colonne Date.""" |
|
18 |
pass |
|
19 |
|
vigiboard/controllers/plugins/details.py | ||
---|---|---|
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)) |
|
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 |
# Rappel: |
|
61 |
# event[0] = priorité de l'alerte corrélée. |
|
62 |
# event[1] = alerte brute. |
|
63 |
if event.servicename: |
|
64 |
service = urllib.quote(event.servicename) |
|
65 |
else: |
|
66 |
service = None |
|
67 |
|
|
68 |
eventdetails[edname] = edlink[1] % { |
|
69 |
'idcorrevent': idcorrevent, |
|
70 |
'host': urllib.quote(event.hostname), |
|
71 |
'service': service, |
|
72 |
'message': urllib.quote(event[0].message), |
|
73 |
} |
|
74 |
|
|
75 |
return dict( |
|
76 |
current_state = StateName.value_to_statename( |
|
77 |
event[0].current_state), |
|
78 |
initial_state = StateName.value_to_statename( |
|
79 |
event[0].initial_state), |
|
80 |
peak_state = StateName.value_to_statename( |
|
81 |
event[0].peak_state), |
|
82 |
idcorrevent = idcorrevent, |
|
83 |
host = event.hostname, |
|
84 |
service = event.servicename, |
|
85 |
eventdetails = eventdetails, |
|
86 |
idcause = event[0].idevent, |
|
87 |
) |
|
88 |
|
|
89 |
|
vigiboard/controllers/plugins/hls.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec les services de haut |
|
5 |
niveau (L{HighLevelService}) impactés par un événement. |
|
6 |
""" |
|
7 |
|
|
8 |
from pylons.i18n import ugettext as _ |
|
9 |
from tg import url |
|
10 |
|
|
11 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin |
|
12 |
from vigilo.models.configure import DBSession |
|
13 |
from vigilo.models import HighLevelService, CorrEvent, Event, SupItem |
|
14 |
|
|
15 |
class PluginHLS(VigiboardRequestPlugin): |
|
16 |
""" |
|
17 |
Plugin qui permet de voir les services de haut niveau impactés par |
|
18 |
un événement. |
|
19 |
""" |
|
20 |
def get_value(self, idcorrevent): |
|
21 |
""" |
|
22 |
Renvoie le nom des services de haut niveau impactés par l'événement. |
|
23 |
|
|
24 |
@param idcorrevent: Identifiant de l'événement corrélé. |
|
25 |
@type idcorrevent: C{int} |
|
26 |
@return: Un dictionnaire dont la clé "services" contient une liste |
|
27 |
des noms des services de haut niveau impactés par l'événement |
|
28 |
corrélé dont l'identifiant est L{idcorrevent}. |
|
29 |
""" |
|
30 |
supitem = self.get_correvent_supitem(idcorrevent) |
|
31 |
|
|
32 |
if not supitem: |
|
33 |
return [] |
|
34 |
|
|
35 |
services = supitem.impacted_hls( |
|
36 |
HighLevelService.servicename |
|
37 |
).distinct().order_by( |
|
38 |
HighLevelService.servicename.asc() |
|
39 |
).all() |
|
40 |
|
|
41 |
return {'services': [service.servicename for service in services]} |
|
42 |
|
|
43 |
def get_correvent_supitem(self, idcorrevent): |
|
44 |
""" |
|
45 |
Retourne le supitem ayant causé l'évènement |
|
46 |
corrélé dont l'identifiant est passé en paramètre. |
|
47 |
""" |
|
48 |
# On récupère l'item recherché dans la BDD |
|
49 |
supitem = DBSession.query(SupItem |
|
50 |
).join( |
|
51 |
(Event, Event.idsupitem == SupItem.idsupitem), |
|
52 |
(CorrEvent, CorrEvent.idcause == Event.idevent), |
|
53 |
).filter(CorrEvent.idcorrevent == idcorrevent).first() |
|
54 |
return supitem |
|
55 |
|
vigiboard/controllers/plugins/hostname.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec le nom de l'hôte |
|
5 |
sur lequel porte l'événement corrélé. |
|
6 |
""" |
|
7 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin |
|
8 |
|
|
9 |
class PluginHostname(VigiboardRequestPlugin): |
|
10 |
""" |
|
11 |
Ajoute une colonne avec le nom de l'hôte impacté par un événement corrélé. |
|
12 |
""" |
|
13 |
|
vigiboard/controllers/plugins/id.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec l'identifiant |
|
5 |
de l'événement corrélé. |
|
6 |
Ce plugin n'a d'intérêt que pour débuguer l'application. |
|
7 |
""" |
|
8 |
|
|
9 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin |
|
10 |
|
|
11 |
class PluginId(VigiboardRequestPlugin): |
|
12 |
"""Plugin de debug qui affiche l'identifiant de l'événement corrélé.""" |
|
13 |
pass |
|
14 |
|
vigiboard/controllers/plugins/occurrences.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec le nombre |
|
5 |
d'occurrences d'un événement corrélé donné. |
|
6 |
""" |
|
7 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin |
|
8 |
|
|
9 |
class PluginOccurrences(VigiboardRequestPlugin): |
|
10 |
""" |
|
11 |
Ce plugin affiche le nombre d'occurrences d'un événement corrélé. |
|
12 |
Ce compteur d'occurrences est mis à jour automatiquement par le |
|
13 |
corrélateur chaque fois qu'un événement brut survient sur la cause |
|
14 |
de l'événement corrélé. |
|
15 |
""" |
|
16 |
pass |
|
17 |
|
vigiboard/controllers/plugins/output.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec la sortie |
|
5 |
de la commande de test exécutée par Nagios sur cet hôte/service. |
|
6 |
""" |
|
7 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin |
|
8 |
|
|
9 |
class PluginOutput(VigiboardRequestPlugin): |
|
10 |
"""Ajoute une colonne avec le message de Nagios.""" |
|
11 |
|
vigiboard/controllers/plugins/priority.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec la priorité |
|
5 |
ITIL de l'événement corrélé. |
|
6 |
""" |
|
7 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin |
|
8 |
|
|
9 |
class PluginPriority(VigiboardRequestPlugin): |
|
10 |
""" |
|
11 |
Ce plugin affiche la priorité ITIL des événements corrélés. |
|
12 |
La priorité est un nombre entier et permet de classer les événements |
|
13 |
corrélés dans l'ordre qui semble le plus approprié pour que les |
|
14 |
problèmes les plus urgents soient traités en premier. |
|
15 |
|
|
16 |
La priorité des événements peut être croissante (plus le nombre est |
|
17 |
élevé, plus il est urgent de traiter le problème) ou décroissante |
|
18 |
(ordre opposé). L'ordre utilisé par VigiBoard pour le tri est |
|
19 |
défini dans la variable de configuration C{vigiboard_priority_order}. |
|
20 |
""" |
|
21 |
|
vigiboard/controllers/plugins/servicename.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec le nom du service |
|
5 |
à l'origine de l'événement corrélé. |
|
6 |
""" |
|
7 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin |
|
8 |
|
|
9 |
class PluginServicename(VigiboardRequestPlugin): |
|
10 |
""" |
|
11 |
Affiche le nom du service à l'origine de l'événement corrélé. |
|
12 |
Si l'événement corrélé porte directement sur un hôte, |
|
13 |
alors le nom de service vaut None. |
|
14 |
""" |
|
15 |
|
vigiboard/controllers/plugins/status.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute 3 colonnes au tableau des événements : |
|
5 |
- la première colonne contient l'état d'acquittement de l'événement. |
|
6 |
- la seconde colonne contient un lien permettant d'éditer certaines |
|
7 |
propriétés associées à l'événement corrélé. |
|
8 |
- la dernière colonne permet de (dé)sélectionner l'événement pour |
|
9 |
effectuer un traitement par lot. |
|
10 |
""" |
|
11 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin |
|
12 |
|
|
13 |
class PluginStatus(VigiboardRequestPlugin): |
|
14 |
""" |
|
15 |
Ajoute des colonnes permettant de voir le statut d'acquittement |
|
16 |
d'un événement corrélé et de modifier certaines de ses propriétés. |
|
17 |
""" |
|
18 |
|
|
19 |
def get_generated_columns_count(self): |
|
20 |
""" |
|
21 |
Renvoie le nombre de colonnes que ce plugin ajoute. |
|
22 |
Ce plugin en ajoute 3, au lieu de 1 comme la plupart des plugins. |
|
23 |
""" |
|
24 |
return 3 |
|
25 |
|
vigiboard/controllers/plugins/test.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Ce fichier contient un exemple de plugin pour l'interface |
|
5 |
de VigiBoard. Il s'accompagne d'un template contenu dans |
|
6 |
les thèmes, dans le répertoire suivant : |
|
7 |
vigilo/themes/templates/vigiboard/plugins/test.html |
|
8 |
""" |
|
9 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin |
|
10 |
|
|
11 |
class PluginTest(VigiboardRequestPlugin): |
|
12 |
""" |
|
13 |
Un plugin de démonstration qui se contente d'afficher |
|
14 |
"Hello world" pour chaque événement du tableau. |
|
15 |
""" |
|
16 |
|
|
17 |
def get_value(self, *args, **kwargs): |
|
18 |
""" |
|
19 |
Cette méthode est appelée depuis le template associé à ce plugin, |
|
20 |
mais également lorsque l'on demande la valeur du plugin grâce à la |
|
21 |
méthode get_plugin_value du L{RootController} de VigiBoard. |
|
22 |
|
|
23 |
@param idcorrevent: Identifiant du L{CorrEvent} à interroger. |
|
24 |
@type idcorrevent: C{int} |
|
25 |
@return: Dictionnaire contenant un texte statique. |
|
26 |
@rtype: C{dict} |
|
27 |
""" |
|
28 |
return {'text': 'Hello world'} |
|
29 |
|
vigiboard/controllers/plugins/tt.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec un lien vers le ticket |
|
5 |
d'incidence se rapportant à un événement corrélé donné. |
|
6 |
""" |
|
7 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin |
|
8 |
|
|
9 |
class PluginTroubleTicket(VigiboardRequestPlugin): |
|
10 |
"""Ajoute un lien vers le ticket d'incidence associé à l'événement.""" |
|
11 |
|
vigiboard/controllers/root.py | ||
---|---|---|
276 | 276 |
@require(Any(not_anonymous(), msg=l_("You need to be authenticated"))) |
277 | 277 |
def event(self, idevent, page=1): |
278 | 278 |
""" |
279 |
Affichage de l'historique d'un événement. |
|
279 |
Affichage de l'historique d'un événement brut.
|
|
280 | 280 |
Pour accéder à cette page, l'utilisateur doit être authentifié. |
281 | 281 |
|
282 |
@param idevent: identifiant de l'événement souhaité |
|
282 |
@param idevent: identifiant de l'événement brut souhaité. |
|
283 |
@type idevent: C{int} |
|
283 | 284 |
""" |
284 | 285 |
if not page: |
285 | 286 |
page = 1 |
286 | 287 |
|
287 | 288 |
username = request.environ['repoze.who.identity']['repoze.who.userid'] |
288 |
events = VigiboardRequest(User.by_user_name(username)) |
|
289 |
events = VigiboardRequest(User.by_user_name(username), False)
|
|
289 | 290 |
events.add_table( |
290 | 291 |
Event, |
291 | 292 |
events.items.c.hostname, |
292 | 293 |
events.items.c.servicename, |
293 | 294 |
) |
295 |
events.add_join((EVENTSAGGREGATE_TABLE, EVENTSAGGREGATE_TABLE.c.idevent == Event.idevent)) |
|
296 |
events.add_join((CorrEvent, CorrEvent.idcorrevent == EVENTSAGGREGATE_TABLE.c.idcorrevent)) |
|
294 | 297 |
events.add_join((events.items, |
295 | 298 |
Event.idsupitem == events.items.c.idsupitem)) |
299 |
events.add_filter(Event.idevent == idevent) |
|
296 | 300 |
|
297 | 301 |
if events.num_rows() != 1: |
298 | 302 |
flash(_('No such event or access denied'), 'error') |
... | ... | |
376 | 380 |
|
377 | 381 |
# Vérification qu'il y a au moins 1 événement qui correspond |
378 | 382 |
total_rows = aggregates.num_rows() |
379 |
if total_rows == 0 :
|
|
383 |
if not total_rows:
|
|
380 | 384 |
flash(_('No access to this host/service or no event yet'), 'error') |
381 | 385 |
redirect('/') |
382 | 386 |
|
... | ... | |
473 | 477 |
raise redirect(request.environ.get('HTTP_REFERER', url('/'))) |
474 | 478 |
|
475 | 479 |
# Vérification que au moins un des identifiants existe et est éditable |
476 |
if events.num_rows() <= 0:
|
|
480 |
if not events.num_rows():
|
|
477 | 481 |
flash(_('No access to this event'), 'error') |
478 | 482 |
redirect('/') |
479 | 483 |
|
... | ... | |
554 | 558 |
plugin_class = plugin_class[0] |
555 | 559 |
try: |
556 | 560 |
mypac = __import__( |
557 |
'vigiboard.controllers.vigiboard_plugin.' + plugin_name,
|
|
561 |
'vigiboard.controllers.plugins.' + plugin_name,
|
|
558 | 562 |
globals(), locals(), [plugin_class], -1) |
559 | 563 |
plugin = getattr(mypac, plugin_class) |
560 | 564 |
if callable(plugin): |
... | ... | |
626 | 630 |
for (plugin_name, plugin_class) in plugins: |
627 | 631 |
try: |
628 | 632 |
mypac = __import__( |
629 |
'vigiboard.controllers.vigiboard_plugin.' + plugin_name,
|
|
633 |
'vigiboard.controllers.plugins.' + plugin_name,
|
|
630 | 634 |
globals(), locals(), [plugin_class], -1) |
631 | 635 |
plugin = getattr(mypac, plugin_class) |
632 | 636 |
if callable(plugin): |
vigiboard/controllers/vigiboard_plugin/__init__.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Module complémentaire générique. |
|
5 |
""" |
|
6 |
|
|
7 |
from pylons.i18n import ugettext as _ |
|
8 |
|
|
9 |
class VigiboardRequestPlugin(object): |
|
10 |
""" |
|
11 |
Classe que les plugins de VigiBoard doivent étendre. |
|
12 |
""" |
|
13 |
|
|
14 |
def __init__ (self, table = None, join = None, outerjoin = None, |
|
15 |
filters = None, groupby = None, orderby = None, name = '', |
|
16 |
style = None, object_name = ""): |
|
17 |
self.table = table |
|
18 |
self.join = join |
|
19 |
self.outerjoin = outerjoin |
|
20 |
self.filter = filters |
|
21 |
self.orderby = orderby |
|
22 |
self.name = name |
|
23 |
self.groupby = groupby |
|
24 |
self.style = style |
|
25 |
self.object_name = object_name |
|
26 |
|
|
27 |
def get_value(self, idcorrevent, *args, **kwargs): |
|
28 |
""" |
|
29 |
Cette méthode est appelée depuis le template associé à ce plugin, |
|
30 |
mais également lorsque l'on demande la valeur du plugin grâce à la |
|
31 |
méthode get_plugin_value du L{RootController} de VigiBoard. |
|
32 |
|
|
33 |
Cette méthode DEVRAIT être surchargée dans les classes dérivées. |
|
34 |
|
|
35 |
@param idcorrevent: Identifiant du L{CorrEvent} à interroger. |
|
36 |
@type idcorrevent: C{int} |
|
37 |
@return: Dictionnaire contenant un texte statique. |
|
38 |
@rtype: C{dict} |
|
39 |
""" |
|
40 |
pass |
|
41 |
|
|
42 |
def get_generated_columns_count(self): |
|
43 |
""" |
|
44 |
Cette méthode renvoie le nombre de colonnes ajoutées dans le tableau |
|
45 |
des événements par ce plugin. Par défaut, on suppose que chaque plugin |
|
46 |
n'ajoute qu'une seule colonne au tableau. |
|
47 |
|
|
48 |
Cette méthode PEUT être surchargée dans les classes dérivées. |
|
49 |
|
|
50 |
@return: Nombre de colonnes ajoutées par ce plugin. |
|
51 |
@rtype: C{int} |
|
52 |
""" |
|
53 |
return 1 |
|
54 |
|
vigiboard/controllers/vigiboard_plugin/date.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec la date à laquelle |
|
5 |
est survenu un événement et la durée depuis laquelle l'événement est actif. |
|
6 |
""" |
|
7 |
|
|
8 |
from pylons.i18n import ugettext as _ |
|
9 |
from tg import url |
|
10 |
|
|
11 |
from vigiboard.controllers.vigiboard_plugin import VigiboardRequestPlugin |
|
12 |
from vigilo.models.configure import DBSession |
|
13 |
from vigilo.models import HighLevelService, \ |
|
14 |
CorrEvent, Event, SupItem |
|
15 |
|
|
16 |
class PluginDate(VigiboardRequestPlugin): |
|
17 |
"""Plugin pour l'ajout d'une colonne Date.""" |
|
18 |
pass |
|
19 |
|
vigiboard/controllers/vigiboard_plugin/history.py | ||
---|---|---|
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 |
|
|
70 |
eventdetails[edname] = edlink[1] % { |
|
71 |
'idcorrevent': idcorrevent, |
|
72 |
'host': urllib.quote(event.hostname), |
|
73 |
'service': service, |
|
74 |
'message': urllib.quote(event[0].message), |
|
75 |
} |
|
76 |
|
|
77 |
return dict( |
|
78 |
current_state = StateName.value_to_statename( |
|
79 |
event[0].current_state), |
|
80 |
initial_state = StateName.value_to_statename( |
|
81 |
event[0].initial_state), |
|
82 |
peak_state = StateName.value_to_statename( |
|
83 |
event[0].peak_state), |
|
84 |
idcorrevent = idcorrevent, |
|
85 |
host = event.hostname, |
|
86 |
service = event.servicename, |
|
87 |
eventdetails = eventdetails, |
|
88 |
idcause = event[0].idevent, |
|
89 |
) |
|
90 |
|
|
91 |
|
vigiboard/controllers/vigiboard_plugin/hls.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec les services de haut |
|
5 |
niveau (L{HighLevelService}) impactés par un événement. |
|
6 |
""" |
|
7 |
|
|
8 |
from pylons.i18n import ugettext as _ |
|
9 |
from tg import url |
|
10 |
|
|
11 |
from vigiboard.controllers.vigiboard_plugin import VigiboardRequestPlugin |
|
12 |
from vigilo.models.configure import DBSession |
|
13 |
from vigilo.models import HighLevelService, \ |
|
14 |
CorrEvent, Event, SupItem |
|
15 |
|
|
16 |
class PluginHLS(VigiboardRequestPlugin): |
|
17 |
""" |
|
18 |
Plugin qui permet de voir les services de haut niveau impactés par |
|
19 |
un événement. |
|
20 |
""" |
|
21 |
def get_value(self, idcorrevent): |
|
22 |
""" |
|
23 |
Renvoie le nom des services de haut niveau impactés par l'événement. |
|
24 |
|
|
25 |
@param idcorrevent: Identifiant de l'événement corrélé. |
|
26 |
@type idcorrevent: C{int} |
|
27 |
@return: Un dictionnaire dont la clé "services" contient une liste |
|
28 |
des noms des services de haut niveau impactés par l'événement |
|
29 |
corrélé dont l'identifiant est L{idcorrevent}. |
|
30 |
""" |
|
31 |
supitem = self.get_correvent_supitem(idcorrevent) |
|
32 |
|
|
33 |
if not supitem: |
|
34 |
return [] |
|
35 |
|
|
36 |
services = supitem.impacted_hls( |
|
37 |
HighLevelService.servicename |
|
38 |
).distinct().order_by( |
|
39 |
HighLevelService.servicename.asc() |
|
40 |
).all() |
|
41 |
|
|
42 |
return {'services': [service.servicename for service in services]} |
|
43 |
|
|
44 |
def get_correvent_supitem(self, idcorrevent): |
|
45 |
""" |
|
46 |
Retourne le supitem ayant causé l'évènement |
|
47 |
corrélé dont l'identifiant est passé en paramètre. |
|
48 |
""" |
|
49 |
# On récupère l'item recherché dans la BDD |
|
50 |
supitem = DBSession.query(SupItem |
|
51 |
).join( |
|
52 |
(Event, Event.idsupitem == SupItem.idsupitem), |
|
53 |
(CorrEvent, CorrEvent.idcause == Event.idevent), |
|
54 |
).filter(CorrEvent.idcorrevent == idcorrevent).first() |
|
55 |
return supitem |
|
56 |
|
vigiboard/controllers/vigiboard_plugin/hostname.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec le nom de l'hôte |
|
5 |
sur lequel porte l'événement corrélé. |
|
6 |
""" |
|
7 |
|
|
8 |
from pylons.i18n import ugettext as _ |
|
9 |
from tg import url |
|
10 |
|
|
11 |
from vigiboard.controllers.vigiboard_plugin import VigiboardRequestPlugin |
|
12 |
from vigilo.models.configure import DBSession |
|
13 |
from vigilo.models import HighLevelService, \ |
|
14 |
CorrEvent, Event, SupItem |
|
15 |
|
|
16 |
class PluginHostname(VigiboardRequestPlugin): |
|
17 |
""" |
|
18 |
Ajoute une colonne avec le nom de l'hôte impacté par un événement corrélé. |
|
19 |
""" |
|
20 |
|
vigiboard/controllers/vigiboard_plugin/id.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec l'identifiant |
|
5 |
de l'événement corrélé. |
|
6 |
Ce plugin n'a d'intérêt que pour débuguer l'application. |
|
7 |
""" |
|
8 |
|
|
9 |
from pylons.i18n import ugettext as _ |
|
10 |
from tg import url |
|
11 |
|
|
12 |
from vigiboard.controllers.vigiboard_plugin import VigiboardRequestPlugin |
|
13 |
from vigilo.models.configure import DBSession |
|
14 |
from vigilo.models import HighLevelService, \ |
|
15 |
CorrEvent, Event, SupItem |
|
16 |
|
|
17 |
class PluginId(VigiboardRequestPlugin): |
|
18 |
"""Plugin de debug qui affiche l'identifiant de l'événement corrélé.""" |
|
19 |
pass |
|
20 |
|
vigiboard/controllers/vigiboard_plugin/occurrences.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec le nombre |
|
5 |
d'occurrences d'un événement corrélé donné. |
|
6 |
""" |
|
7 |
|
|
8 |
|
|
9 |
from pylons.i18n import ugettext as _ |
|
10 |
from tg import url |
|
11 |
|
|
12 |
from vigiboard.controllers.vigiboard_plugin import VigiboardRequestPlugin |
|
13 |
from vigilo.models.configure import DBSession |
|
14 |
from vigilo.models import HighLevelService, \ |
|
15 |
CorrEvent, Event, SupItem |
|
16 |
|
|
17 |
class PluginOccurrences(VigiboardRequestPlugin): |
|
18 |
""" |
|
19 |
Ce plugin affiche le nombre d'occurrences d'un événement corrélé. |
|
20 |
Ce compteur d'occurrences est mis à jour automatiquement par le |
|
21 |
corrélateur chaque fois qu'un événement brut survient sur la cause |
|
22 |
de l'événement corrélé. |
|
23 |
""" |
|
24 |
pass |
|
25 |
|
vigiboard/controllers/vigiboard_plugin/output.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec la sortie |
|
5 |
de la commande de test exécutée par Nagios sur cet hôte/service. |
|
6 |
""" |
|
7 |
|
|
8 |
from pylons.i18n import ugettext as _ |
|
9 |
from tg import url |
|
10 |
|
|
11 |
from vigiboard.controllers.vigiboard_plugin import VigiboardRequestPlugin |
|
12 |
from vigilo.models.configure import DBSession |
|
13 |
from vigilo.models import HighLevelService, \ |
|
14 |
CorrEvent, Event, SupItem |
|
15 |
|
|
16 |
class PluginOutput(VigiboardRequestPlugin): |
|
17 |
"""Ajoute une colonne avec le message de Nagios.""" |
|
18 |
|
vigiboard/controllers/vigiboard_plugin/priority.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec la priorité |
|
5 |
ITIL de l'événement corrélé. |
|
6 |
""" |
|
7 |
|
|
8 |
from pylons.i18n import ugettext as _ |
|
9 |
from tg import url |
|
10 |
|
|
11 |
from vigiboard.controllers.vigiboard_plugin import VigiboardRequestPlugin |
|
12 |
from vigilo.models.configure import DBSession |
|
13 |
from vigilo.models import HighLevelService, \ |
|
14 |
CorrEvent, Event, SupItem |
|
15 |
|
|
16 |
class PluginPriority(VigiboardRequestPlugin): |
|
17 |
""" |
|
18 |
Ce plugin affiche la priorité ITIL des événements corrélés. |
|
19 |
La priorité est un nombre entier et permet de classer les événements |
|
20 |
corrélés dans l'ordre qui semble le plus approprié pour que les |
|
21 |
problèmes les plus urgents soient traités en premier. |
|
22 |
|
|
23 |
La priorité des événements peut être croissante (plus le nombre est |
|
24 |
élevé, plus il est urgent de traiter le problème) ou décroissante |
|
25 |
(ordre opposé). L'ordre utilisé par VigiBoard pour le tri est |
|
26 |
défini dans la variable de configuration C{vigiboard_priority_order}. |
|
27 |
""" |
|
28 |
|
vigiboard/controllers/vigiboard_plugin/servicename.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec le nom du service |
|
5 |
à l'origine de l'événement corrélé. |
|
6 |
""" |
|
7 |
|
|
8 |
from pylons.i18n import ugettext as _ |
|
9 |
from tg import url |
|
10 |
|
|
11 |
from vigiboard.controllers.vigiboard_plugin import VigiboardRequestPlugin |
|
12 |
from vigilo.models.configure import DBSession |
|
13 |
from vigilo.models import HighLevelService, \ |
|
14 |
CorrEvent, Event, SupItem |
|
15 |
|
|
16 |
class PluginServicename(VigiboardRequestPlugin): |
|
17 |
""" |
|
18 |
Affiche le nom du service à l'origine de l'événement corrélé. |
|
19 |
Si l'événement corrélé porte directement sur un hôte, |
|
20 |
alors le nom de service vaut None. |
|
21 |
""" |
|
22 |
|
vigiboard/controllers/vigiboard_plugin/status.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute 3 colonnes au tableau des événements : |
|
5 |
- la première colonne contient l'état d'acquittement de l'événement. |
|
6 |
- la seconde colonne contient un lien permettant d'éditer certaines |
|
7 |
propriétés associées à l'événement corrélé. |
|
8 |
- la dernière colonne permet de (dé)sélectionner l'événement pour |
|
9 |
effectuer un traitement par lot. |
|
10 |
""" |
|
11 |
|
|
12 |
from pylons.i18n import ugettext as _ |
|
13 |
from tg import url |
|
14 |
|
|
15 |
from vigiboard.controllers.vigiboard_plugin import VigiboardRequestPlugin |
|
16 |
from vigilo.models.configure import DBSession |
|
17 |
from vigilo.models import HighLevelService, \ |
|
18 |
CorrEvent, Event, SupItem |
|
19 |
|
|
20 |
class PluginStatus(VigiboardRequestPlugin): |
|
21 |
""" |
|
22 |
Ajoute des colonnes permettant de voir le statut d'acquittement |
|
23 |
d'un événement corrélé et de modifier certaines de ses propriétés. |
|
24 |
""" |
|
25 |
|
|
26 |
def get_generated_columns_count(self): |
|
27 |
""" |
|
28 |
Renvoie le nombre de colonnes que ce plugin ajoute. |
|
29 |
Ce plugin en ajoute 3, au lieu de 1 comme la plupart des plugins. |
|
30 |
""" |
|
31 |
return 3 |
|
32 |
|
vigiboard/controllers/vigiboard_plugin/test.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Ce fichier contient un exemple de plugin pour l'interface |
|
5 |
de VigiBoard. Il s'accompagne d'un template contenu dans |
|
6 |
les thèmes, dans le répertoire suivant : |
|
7 |
vigilo/themes/templates/vigiboard/vigiboard_plugin/test.html |
|
8 |
""" |
|
9 |
|
|
10 |
from vigiboard.controllers.vigiboard_plugin import VigiboardRequestPlugin |
|
11 |
|
|
12 |
class PluginTest(VigiboardRequestPlugin): |
|
13 |
""" |
|
14 |
Un plugin de démonstration qui se contente d'afficher |
|
15 |
"Hello world" pour chaque événement du tableau. |
|
16 |
""" |
|
17 |
|
|
18 |
def get_value(self, *args, **kwargs): |
|
19 |
""" |
|
20 |
Cette méthode est appelée depuis le template associé à ce plugin, |
|
21 |
mais également lorsque l'on demande la valeur du plugin grâce à la |
|
22 |
méthode get_plugin_value du L{RootController} de VigiBoard. |
|
23 |
|
|
24 |
@param idcorrevent: Identifiant du L{CorrEvent} à interroger. |
|
25 |
@type idcorrevent: C{int} |
|
26 |
@return: Dictionnaire contenant un texte statique. |
|
27 |
@rtype: C{dict} |
|
28 |
""" |
|
29 |
return {'text': 'Hello world'} |
|
30 |
|
vigiboard/controllers/vigiboard_plugin/tt.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
""" |
|
4 |
Un plugin pour VigiBoard qui ajoute une colonne avec un lien vers le ticket |
|
5 |
d'incidence se rapportant à un événement corrélé donné. |
|
6 |
""" |
|
7 |
|
|
8 |
from pylons.i18n import ugettext as _ |
|
9 |
from tg import url |
|
10 |
|
|
11 |
from vigiboard.controllers.vigiboard_plugin import VigiboardRequestPlugin |
|
12 |
from vigilo.models.configure import DBSession |
|
13 |
from vigilo.models import HighLevelService, \ |
|
14 |
CorrEvent, Event, SupItem |
|
15 |
|
|
16 |
class PluginTroubleTicket(VigiboardRequestPlugin): |
|
17 |
"""Ajoute un lien vers le ticket d'incidence associé à l'événement.""" |
|
18 |
|
vigiboard/controllers/vigiboardrequest.py | ||
---|---|---|
18 | 18 |
SERVICE_GROUP_TABLE |
19 | 19 |
from vigiboard.widgets.edit_event import EditEventForm |
20 | 20 |
from vigiboard.widgets.search_form import SearchForm |
21 |
from vigiboard.controllers.vigiboard_plugin import VigiboardRequestPlugin
|
|
21 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin
|
|
22 | 22 |
|
23 | 23 |
LOGGER = getLogger(__name__) |
24 | 24 |
|
... | ... | |
171 | 171 |
for plug in config.get('vigiboard_plugins', []): |
172 | 172 |
try: |
173 | 173 |
mypac = __import__( |
174 |
'vigiboard.controllers.vigiboard_plugin.' +\
|
|
174 |
'vigiboard.controllers.plugins.' +\
|
|
175 | 175 |
plug[0], globals(), locals(), [plug[1]], -1) |
176 | 176 |
self.add_plugin(getattr(mypac, plug[1])()) |
177 | 177 |
except ImportError: |
... | ... | |
331 | 331 |
self.events = [] |
332 | 332 |
|
333 | 333 |
for data in self.req[first_row : last_row]: |
334 |
self.events.append((data[0], data.hostname, data.servicename))
|
|
334 |
self.events.append(data)
|
|
335 | 335 |
|
336 | 336 |
def format_history(self): |
337 | 337 |
""" |
... | ... | |
358 | 358 |
from vigiboard.controllers.root import get_last_modification_timestamp |
359 | 359 |
|
360 | 360 |
# Si les objets manipulés sont des Event, on a facilement les idevent. |
361 |
if isinstance(self.events[0][0], Event): |
|
361 |
if not len(self.events): |
|
362 |
ids = [] |
|
363 |
elif isinstance(self.events[0][0], Event): |
|
362 | 364 |
ids = [data[0].idevent for data in self.events] |
363 | 365 |
# Sinon, il s'agit de CorrEvent(s) dont on récupère l'idcause. |
364 | 366 |
else: |
vigiboard/tests/functional/test_history_tables.py | ||
---|---|---|
105 | 105 |
|
106 | 106 |
def setUp(self): |
107 | 107 |
super(TestEventTable, self).setUp() |
108 |
# tg.config['vigiboard_plugins'] = [('history', 'PluginHistory')] |
|
109 | 108 |
|
110 | 109 |
def test_host_event_history(self): |
111 | 110 |
"""Affichage de l'historique d'un évènement corrélé pour un hôte.""" |
vigiboard/tests/functional/test_host_vigiboardrequest.py | ||
---|---|---|
15 | 15 |
Host, HostGroup |
16 | 16 |
from vigiboard.tests import TestController |
17 | 17 |
from vigiboard.controllers.vigiboardrequest import VigiboardRequest |
18 |
from vigiboard.controllers.vigiboard_plugin.tests import MonPlugin |
|
19 |
|
|
20 | 18 |
|
21 | 19 |
class TestHostVigiboardRequest(TestController): |
22 | 20 |
""" Préparation de la base de données en vue des tests. """ |
... | ... | |
116 | 114 |
tg.request = response.request |
117 | 115 |
|
118 | 116 |
# Derrière, VigiboardRequest doit charger le plugin de tests tout seul |
119 |
# tg.config['vigiboard_plugins'] = [['test', 'MonPlugin']] |
|
120 | 117 |
vigi_req = VigiboardRequest(User.by_user_name(u'editor')) |
121 | 118 |
vigi_req.add_table( |
122 | 119 |
CorrEvent, |
vigiboard/tests/functional/test_vigiboardrequest.py | ||
---|---|---|
15 | 15 |
Host, HostGroup, LowLevelService, ServiceGroup |
16 | 16 |
from vigiboard.tests import TestController |
17 | 17 |
from vigiboard.controllers.vigiboardrequest import VigiboardRequest |
18 |
from vigiboard.controllers.vigiboard_plugin.tests import MonPlugin |
|
19 |
|
|
20 | 18 |
|
21 | 19 |
class TestVigiboardRequest(TestController): |
22 | 20 |
"""Test de la classe Vigiboard Request""" |
... | ... | |
186 | 184 |
tg.request = response.request |
187 | 185 |
|
188 | 186 |
# Derrière, VigiboardRequest doit charger le plugin de tests tout seul |
189 |
# tg.config['vigiboard_plugins'] = [['tests', 'MonPlugin']] |
|
190 | 187 |
vigi_req = VigiboardRequest(User.by_user_name(u'editor')) |
191 | 188 |
vigi_req.add_table( |
192 | 189 |
CorrEvent, |
Also available in: Unified diff