vigiboard / vigiboard / controllers / plugins / state.py @ 02c4a1e7
History | View | Annotate | Download (2 KB)
1 |
# -*- coding: utf-8 -*-
|
---|---|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4:
|
3 |
# Copyright (C) 2007-2016 CS-SI
|
4 |
# License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
|
5 |
|
6 |
"""
|
7 |
Un plugin pour VigiBoard qui ajoute une colonne avec l'état de l'alerte.
|
8 |
"""
|
9 |
import urllib |
10 |
import tg |
11 |
import tw.forms as twf |
12 |
from tg.i18n import lazy_ugettext as l_ |
13 |
|
14 |
from vigilo.models.tables import CorrEvent, Event, StateName |
15 |
from vigilo.models.session import DBSession |
16 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin, ITEMS |
17 |
|
18 |
class PluginState(VigiboardRequestPlugin): |
19 |
"""
|
20 |
Ajoute des colonnes permettant de voir le statut d'acquittement
|
21 |
d'un événement corrélé et de modifier certaines de ses propriétés.
|
22 |
"""
|
23 |
|
24 |
def get_search_fields(self): |
25 |
states = DBSession.query(StateName.idstatename, StateName.statename |
26 |
).order_by(StateName.order.asc()).all() |
27 |
options = [('', u'')] + \ |
28 |
[( str(s.idstatename), s.statename ) for s in states] |
29 |
return [
|
30 |
twf.SingleSelectField( |
31 |
'state',
|
32 |
label_text=l_('Current state'),
|
33 |
options=options, |
34 |
validator=twf.validators.OneOf( |
35 |
dict(options).keys(),
|
36 |
if_invalid=None,
|
37 |
if_missing=None,
|
38 |
), |
39 |
), |
40 |
] |
41 |
|
42 |
def handle_search_fields(self, query, search, state, subqueries): |
43 |
if state != ITEMS:
|
44 |
return
|
45 |
|
46 |
if search.get('state'): |
47 |
try:
|
48 |
query.add_filter(Event.current_state == int(search['state'])) |
49 |
except (ValueError, TypeError): |
50 |
# On ignore silencieusement le critère de recherche erroné.
|
51 |
pass
|
52 |
|
53 |
def get_data(self, event): |
54 |
cause = event[0].cause
|
55 |
state = StateName.value_to_statename(cause.current_state) |
56 |
return {'state': state} |
57 |
|
58 |
def get_sort_criterion(self, query, column): |
59 |
if column == 'state': |
60 |
return Event.current_state
|
61 |
return None |
62 |
|