vigiboard / vigiboard / controllers / plugins / status.py @ 011743be
History | View | Annotate | Download (4.01 KB)
1 | 15b98053 | Francois POIROTTE | # -*- coding: utf-8 -*-
|
---|---|---|---|
2 | 4febadf0 | Francois POIROTTE | # vim:set expandtab tabstop=4 shiftwidth=4:
|
3 | 011743be | Francois POIROTTE | # Copyright (C) 2007-2020 CS GROUP - France
|
4 | 9b8d9497 | Francois POIROTTE | # License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
|
5 | a77de887 | Francois POIROTTE | |
6 | 15b98053 | Francois POIROTTE | """
|
7 | 4febadf0 | Francois POIROTTE | Un plugin pour VigiBoard qui ajoute 3 colonnes au tableau des événements :
|
8 | e181e86c | Francois POIROTTE | - la première colonne contient l'état d'acquittement de l'événement.
|
9 | - la seconde colonne contient un lien permettant d'éditer certaines
|
||
10 | propriétés associées à l'événement corrélé.
|
||
11 | - la dernière colonne permet de (dé)sélectionner l'événement pour
|
||
12 | effectuer un traitement par lot.
|
||
13 | 15b98053 | Francois POIROTTE | """
|
14 | a2fa6a5b | Francois POIROTTE | import urllib |
15 | import tg |
||
16 | 27140946 | Francois POIROTTE | import tw.forms as twf |
17 | 02c4a1e7 | Francois POIROTTE | from tg.i18n import lazy_ugettext as l_ |
18 | 27140946 | Francois POIROTTE | |
19 | a2fa6a5b | Francois POIROTTE | from vigilo.models.tables import CorrEvent, StateName |
20 | 27140946 | Francois POIROTTE | from vigilo.models.functions import sql_escape_like |
21 | 86662bc9 | Francois POIROTTE | from vigiboard.controllers.plugins import VigiboardRequestPlugin, ITEMS |
22 | 15b98053 | Francois POIROTTE | |
23 | class PluginStatus(VigiboardRequestPlugin): |
||
24 | 4febadf0 | Francois POIROTTE | """
|
25 | Ajoute des colonnes permettant de voir le statut d'acquittement
|
||
26 | d'un événement corrélé et de modifier certaines de ses propriétés.
|
||
27 | """
|
||
28 | |||
29 | 07b62a01 | Francois POIROTTE | def get_generated_columns_count(self): |
30 | 4febadf0 | Francois POIROTTE | """
|
31 | Renvoie le nombre de colonnes que ce plugin ajoute.
|
||
32 | f744bc14 | Francois POIROTTE | Ce plugin en ajoute 4, au lieu de 1 comme la plupart des plugins.
|
33 | 4febadf0 | Francois POIROTTE | """
|
34 | f744bc14 | Francois POIROTTE | return 4 |
35 | 27140946 | Francois POIROTTE | |
36 | def get_search_fields(self): |
||
37 | f3eff455 | Francois POIROTTE | options = [ |
38 | ('', l_('All alerts')), |
||
39 | 8ba2de75 | Francois POIROTTE | # On doit passer un type basestring pour les options.
|
40 | # Donc, on convertit les constantes (entiers) en type str.
|
||
41 | (str(CorrEvent.ACK_NONE), l_('New alerts')), |
||
42 | (str(CorrEvent.ACK_KNOWN), l_('Alerts marked as Acknowledged')), |
||
43 | (str(CorrEvent.ACK_CLOSED), l_('Alerts marked as Closed')), |
||
44 | f3eff455 | Francois POIROTTE | ] |
45 | |||
46 | 27140946 | Francois POIROTTE | return [
|
47 | twf.TextField( |
||
48 | 'trouble_ticket',
|
||
49 | label_text=l_('Trouble Ticket'),
|
||
50 | 02c4a1e7 | Francois POIROTTE | validator=twf.validators.UnicodeString(if_missing=None),
|
51 | f3eff455 | Francois POIROTTE | ), |
52 | twf.SingleSelectField( |
||
53 | 8ba2de75 | Francois POIROTTE | 'ack',
|
54 | f3eff455 | Francois POIROTTE | label_text=l_('Acknowledgement Status'),
|
55 | options=options, |
||
56 | validator=twf.validators.OneOf( |
||
57 | dict(options).keys(),
|
||
58 | if_invalid=None,
|
||
59 | if_missing=None,
|
||
60 | ), |
||
61 | ), |
||
62 | 27140946 | Francois POIROTTE | ] |
63 | |||
64 | 86662bc9 | Francois POIROTTE | def handle_search_fields(self, query, search, state, subqueries): |
65 | if state != ITEMS:
|
||
66 | return
|
||
67 | |||
68 | 27140946 | Francois POIROTTE | if search.get('trouble_ticket'): |
69 | tt = sql_escape_like(search['trouble_ticket'])
|
||
70 | query.add_filter(CorrEvent.trouble_ticket.ilike(tt)) |
||
71 | f3eff455 | Francois POIROTTE | |
72 | 8ba2de75 | Francois POIROTTE | if search.get('ack'): |
73 | try:
|
||
74 | query.add_filter(CorrEvent.ack == int(search['ack'])) |
||
75 | except (ValueError, TypeError): |
||
76 | # On ignore silencieusement le critère de recherche erroné.
|
||
77 | pass
|
||
78 | a2fa6a5b | Francois POIROTTE | |
79 | def get_data(self, event): |
||
80 | cause = event[0].cause
|
||
81 | ack = event[0].ack
|
||
82 | state = StateName.value_to_statename(cause.current_state) |
||
83 | |||
84 | trouble_ticket_id = None
|
||
85 | trouble_ticket_link = None
|
||
86 | 303d9596 | Francois POIROTTE | link = tg.config.get('vigiboard_links.tt', '') |
87 | a2fa6a5b | Francois POIROTTE | if event[0].trouble_ticket: |
88 | trouble_ticket_id = event[0].trouble_ticket
|
||
89 | 303d9596 | Francois POIROTTE | trouble_ticket_link = link % { |
90 | a2fa6a5b | Francois POIROTTE | 'id': event[0].idcorrevent, |
91 | 32b2c767 | Thomas BURGUIERE | 'host': event[1] and urllib.quote(event[1].encode('utf8'), '') or event[1], |
92 | 'service': event[2] and urllib.quote(event[2].encode('utf8'), '') or event[2], |
||
93 | a2fa6a5b | Francois POIROTTE | 'tt': trouble_ticket_id and \ |
94 | 32b2c767 | Thomas BURGUIERE | urllib.quote(trouble_ticket_id.encode('utf8'), '') or \ |
95 | a2fa6a5b | Francois POIROTTE | trouble_ticket_id, |
96 | } |
||
97 | |||
98 | return {
|
||
99 | 'trouble_ticket_link': trouble_ticket_link,
|
||
100 | 'trouble_ticket_id': trouble_ticket_id,
|
||
101 | 'state': state,
|
||
102 | 'id': event[0].idcorrevent, |
||
103 | 'ack': ack,
|
||
104 | } |
||
105 | 5a845c93 | Vincent QUEMENER | |
106 | def get_sort_criterion(self, query, column): |
||
107 | criteria = { |
||
108 | 'ticket': CorrEvent.trouble_ticket,
|
||
109 | 'ack': CorrEvent.ack,
|
||
110 | } |
||
111 | return criteria.get(column)
|