vigiboard / vigiboard / controllers / plugins / priority.py @ 0e700a76
History | View | Annotate | Download (4.76 KB)
1 | 15b98053 | Francois POIROTTE | # -*- coding: utf-8 -*-
|
---|---|---|---|
2 | a77de887 | Francois POIROTTE | # vim:set expandtab tabstop=4 shiftwidth=4:
|
3 | ################################################################################
|
||
4 | #
|
||
5 | 703bd599 | Francois POIROTTE | # Copyright (C) 2007-2014 CS-SI
|
6 | a77de887 | Francois POIROTTE | #
|
7 | # This program is free software; you can redistribute it and/or modify
|
||
8 | # it under the terms of the GNU General Public License version 2 as
|
||
9 | # published by the Free Software Foundation.
|
||
10 | #
|
||
11 | # This program is distributed in the hope that it will be useful,
|
||
12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
14 | # GNU General Public License for more details.
|
||
15 | #
|
||
16 | # You should have received a copy of the GNU General Public License
|
||
17 | # along with this program; if not, write to the Free Software
|
||
18 | # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||
19 | ################################################################################
|
||
20 | |||
21 | 15b98053 | Francois POIROTTE | """
|
22 | 4febadf0 | Francois POIROTTE | Un plugin pour VigiBoard qui ajoute une colonne avec la priorité
|
23 | ITIL de l'événement corrélé.
|
||
24 | 15b98053 | Francois POIROTTE | """
|
25 | 27140946 | Francois POIROTTE | import tw.forms as twf |
26 | from pylons.i18n import lazy_ugettext as l_ |
||
27 | |||
28 | a2fa6a5b | Francois POIROTTE | from vigilo.models.tables import CorrEvent, StateName |
29 | 86662bc9 | Francois POIROTTE | from vigiboard.controllers.plugins import VigiboardRequestPlugin, ITEMS |
30 | 15b98053 | Francois POIROTTE | |
31 | 27140946 | Francois POIROTTE | from tw.forms.fields import ContainerMixin, FormField |
32 | |||
33 | class HorizontalBox(ContainerMixin, FormField): |
||
34 | """
|
||
35 | Container de widgets, qui se contente de les placer
|
||
36 | côte-à-côte horizontalement.
|
||
37 | """
|
||
38 | |||
39 | template = """<div
|
||
40 | xmlns="http://www.w3.org/1999/xhtml"
|
||
41 | xmlns:py="http://genshi.edgewall.org/"
|
||
42 | id="${id}"
|
||
43 | name="${name}"
|
||
44 | class="${css_class}"
|
||
45 | py:attrs="attrs">
|
||
46 | <py:for each="field in fields">
|
||
47 | ${field.display(value_for(field), **args_for(field))}
|
||
48 | </py:for>
|
||
49 | </div>
|
||
50 | """
|
||
51 | |||
52 | def generate_schema(self): |
||
53 | """
|
||
54 | Fait en sorte que l'absence de saisie dans les sous-champs
|
||
55 | du container ne génère pas une erreur (Valeur manquante)
|
||
56 | sur le container lui-même.
|
||
57 | """
|
||
58 | super(HorizontalBox, self).generate_schema() |
||
59 | self.validator.if_missing = None |
||
60 | |||
61 | |||
62 | 15b98053 | Francois POIROTTE | class PluginPriority(VigiboardRequestPlugin): |
63 | 4febadf0 | Francois POIROTTE | """
|
64 | Ce plugin affiche la priorité ITIL des événements corrélés.
|
||
65 | La priorité est un nombre entier et permet de classer les événements
|
||
66 | corrélés dans l'ordre qui semble le plus approprié pour que les
|
||
67 | problèmes les plus urgents soient traités en premier.
|
||
68 |
|
||
69 | La priorité des événements peut être croissante (plus le nombre est
|
||
70 | élevé, plus il est urgent de traiter le problème) ou décroissante
|
||
71 | (ordre opposé). L'ordre utilisé par VigiBoard pour le tri est
|
||
72 | défini dans la variable de configuration C{vigiboard_priority_order}.
|
||
73 | """
|
||
74 | 27140946 | Francois POIROTTE | |
75 | def get_search_fields(self): |
||
76 | options = [ |
||
77 | ('eq', u'='), |
||
78 | ('neq', u'≠'), |
||
79 | ('gt', u'>'), |
||
80 | ('gte', u'≥'), |
||
81 | ('lt', u'<'), |
||
82 | ('lte', u'≤'), |
||
83 | ] |
||
84 | |||
85 | return [
|
||
86 | HorizontalBox( |
||
87 | 'priority',
|
||
88 | label_text=l_('Priority'),
|
||
89 | fields=[ |
||
90 | twf.SingleSelectField( |
||
91 | 'op',
|
||
92 | options=options, |
||
93 | validator=twf.validators.OneOf( |
||
94 | dict(options).keys(),
|
||
95 | if_invalid=None,
|
||
96 | if_missing=None,
|
||
97 | ), |
||
98 | ), |
||
99 | twf.TextField( |
||
100 | 'value',
|
||
101 | validator=twf.validators.Int( |
||
102 | if_invalid=None,
|
||
103 | if_missing=None,
|
||
104 | ), |
||
105 | ), |
||
106 | ], |
||
107 | ) |
||
108 | ] |
||
109 | |||
110 | 86662bc9 | Francois POIROTTE | def handle_search_fields(self, query, search, state, subqueries): |
111 | if (not search.get('priority')) or state != ITEMS: |
||
112 | 27140946 | Francois POIROTTE | return
|
113 | |||
114 | op = search['priority']['op'] |
||
115 | value = search['priority']['value'] |
||
116 | |||
117 | if (not op) or (not value): |
||
118 | search['priority'] = None |
||
119 | return
|
||
120 | |||
121 | if op == 'eq': |
||
122 | query.add_filter(CorrEvent.priority == value) |
||
123 | elif op == 'neq': |
||
124 | query.add_filter(CorrEvent.priority != value) |
||
125 | elif op == 'gt': |
||
126 | query.add_filter(CorrEvent.priority > value) |
||
127 | elif op == 'gte': |
||
128 | query.add_filter(CorrEvent.priority >= value) |
||
129 | elif op == 'lt': |
||
130 | query.add_filter(CorrEvent.priority < value) |
||
131 | elif op == 'lte': |
||
132 | query.add_filter(CorrEvent.priority <= value) |
||
133 | a2fa6a5b | Francois POIROTTE | |
134 | def get_data(self, event): |
||
135 | state = StateName.value_to_statename(event[0].cause.current_state)
|
||
136 | return {
|
||
137 | 'state': state,
|
||
138 | 'priority': event[0].priority, |
||
139 | } |
||
140 | 5a845c93 | Vincent QUEMENER | |
141 | def get_sort_criterion(self, query, column): |
||
142 | if column == 'priority': |
||
143 | return CorrEvent.priority
|
||
144 | return None |