Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / controllers / plugins / state.py @ 011743be

History | View | Annotate | Download (2.01 KB)

1
# -*- coding: utf-8 -*-
2
# vim:set expandtab tabstop=4 shiftwidth=4:
3
# Copyright (C) 2007-2020 CS GROUP - France
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