Revision 80fa03cd
[#1258] Ordre de tri initial dans VigiBoard.
Permet la personnalisation par l'administrateur de l'ordre de tri appliqué
par défaut dans VigiBoard.
L'administrateur a accès à l'ensemble des champs fournis par les
greffons des colonnes et peut choisir pour chaque champ de trier par
ordre ascendant ou descendant.
Change-Id: Idf45dd2d4ac801e140a4cbbd1dec4ee0b9751098
Refs: #1258.
Reviewed-on: https://vigilo-dev.si.c-s.fr/review/1499
Tested-by: Build system <qa@vigilo-dev.si.c-s.fr>
Reviewed-by: Thomas BURGUIERE <thomas.burguiere@c-s.fr>
deployment/settings.ini.in | ||
---|---|---|
121 | 121 |
fontsize.medium = 10px |
122 | 122 |
fontsize.large = 25px |
123 | 123 |
|
124 |
; Ordre de tri pour la priorité des événements. |
|
125 |
; - Utiliser "asc" si la priorité est inversement proportionnelle à sa |
|
126 |
; valeur (ie: plus le nombre est bas, plus la priorité est élevée). |
|
127 |
; - Utiliser "desc" si la priorité est proportionnelle à sa valeur |
|
128 |
; (ie: plus le nombre est élevé, plus la priorité est élevée). |
|
129 |
; NE PAS METTRE DE GUILLEMETS/APOSTROPHES AUTOUR DE LA VALEUR. |
|
130 |
vigiboard_priority_order = asc |
|
131 |
|
|
132 |
; Indique si le tri des événements se fait d'abord sur l'état Nagios |
|
133 |
; puis l'horodatage de l'événement, ou bien l'inverse. |
|
134 |
; Dans tous les cas, d'autres critères de tri interviennent avant |
|
135 |
; (état d'acquittement et priorité ITIL). |
|
136 |
state_first = True |
|
124 |
; Ordre de tri par défaut des événements dans le bac à événements. |
|
125 |
; Il s'agit d'une liste ordonnée de champs, séparés par des blancs. |
|
126 |
; |
|
127 |
; Chaque champ peut être suffixé par ":asc" ou ":desc" pour forcer |
|
128 |
; le sens du tri (ascendant ou descendant, respectivement). |
|
129 |
; Si ce suffixe est omis, le tri se fait par ordre ascendant par défaut. |
|
130 |
; |
|
131 |
; Les champs disponibles sont ceux fournis par les greffons des colonnes. |
|
132 |
; NB : le greffon de la colonne associée doit être chargé |
|
133 |
; pour que la valeur soit prise en compte. |
|
134 |
; |
|
135 |
; La valeur par défaut correspond au tri appliqué par défaut dans les |
|
136 |
; versions de Vigilo antérieures à la version 3.6. |
|
137 |
default_sort = ack:asc problem:asc priority:asc details:desc date:desc |
|
137 | 138 |
|
138 | 139 |
; Adresse des autres interfaces de Vigilo. |
139 | 140 |
; Il peut s'agir de chemins absolus sur le même serveur (ex: /../vigimap/) |
development.ini | ||
---|---|---|
55 | 55 |
; URL vers laquelle le logo de Vigilo redirige. |
56 | 56 |
logo_link = / |
57 | 57 |
|
58 |
; Ordre de tri pour la priorité des événements. |
|
59 |
; - Utiliser "asc" si la priorité est inversement proportionnelle à sa |
|
60 |
; valeur (ie: plus le nombre est bas, plus la priorité est élevée). |
|
61 |
; - Utiliser "desc" si la priorité est proportionnelle à sa valeur |
|
62 |
; (ie: plus le nombre est élevé, plus la priorité est élevée). |
|
63 |
; NE PAS METTRE DE GUILLEMETS/APOSTROPHES AUTOUR DE LA VALEUR. |
|
64 |
vigiboard_priority_order = asc |
|
65 |
|
|
66 |
; Indique si le tri des événements se fait d'abord sur l'état Nagios |
|
67 |
; puis l'horodatage de l'événement, ou bien l'inverse. |
|
68 |
; Dans tous les cas, d'autres critères de tri interviennent avant |
|
69 |
; (état d'acquittement et priorité ITIL). |
|
70 |
state_first = True |
|
58 |
; Ordre de tri par défaut des événements dans le bac à événements. |
|
59 |
; Il s'agit d'une liste ordonnée de champs, séparés par des blancs. |
|
60 |
; |
|
61 |
; Chaque champ peut être suffixé par ":asc" ou ":desc" pour forcer |
|
62 |
; le sens du tri (ascendant ou descendant, respectivement). |
|
63 |
; Si ce suffixe est omis, le tri se fait par ordre ascendant par défaut. |
|
64 |
; |
|
65 |
; Les champs disponibles sont ceux fournis par les greffons des colonnes. |
|
66 |
; NB : le greffon de la colonne associée doit être chargé |
|
67 |
; pour que la valeur soit prise en compte. |
|
68 |
; |
|
69 |
; La valeur par défaut correspond au tri appliqué par défaut dans les |
|
70 |
; versions de Vigilo antérieures à la version 3.6. |
|
71 |
default_sort = ack:asc problem:asc priority:asc details:desc date:desc |
|
71 | 72 |
|
72 | 73 |
; Caractère de séparation des champs dans |
73 | 74 |
; l'export CSV. |
vigiboard/controllers/plugins/details.py | ||
---|---|---|
214 | 214 |
pass |
215 | 215 |
|
216 | 216 |
def get_sort_criterion(self, query, column): |
217 |
if column == 'details': |
|
218 |
return StateName.order |
|
219 |
return None |
|
217 |
columns = { |
|
218 |
'details': StateName.order, |
|
219 |
'problem': StateName.statename.in_([u'OK', u'UP']), |
|
220 |
} |
|
221 |
return columns.get(column) |
|
220 | 222 |
|
vigiboard/controllers/vigiboardrequest.py | ||
---|---|---|
20 | 20 |
|
21 | 21 |
"""Gestion de la requête, des plugins et de l'affichage du Vigiboard""" |
22 | 22 |
|
23 |
import logging |
|
23 | 24 |
from time import mktime |
24 | 25 |
|
25 | 26 |
from tg import config, tmpl_context, request, url |
26 | 27 |
from pylons.i18n import ugettext as _ |
27 |
from paste.deploy.converters import asbool
|
|
28 |
from paste.deploy.converters import aslist
|
|
28 | 29 |
|
29 | 30 |
from sqlalchemy import not_, and_, asc, desc |
30 | 31 |
from sqlalchemy.sql.expression import null as expr_null, union_all |
... | ... | |
36 | 37 |
from vigiboard.widgets.edit_event import EditEventForm |
37 | 38 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin, INNER, ITEMS |
38 | 39 |
|
40 |
LOGGER = logging.getLogger(__name__) |
|
41 |
|
|
39 | 42 |
class VigiboardRequest(): |
40 | 43 |
""" |
41 | 44 |
Classe gérant la génération de la requête finale, |
... | ... | |
163 | 166 |
# - VIGILO_EXIG_VIGILO_BAC_0050 |
164 | 167 |
# - VIGILO_EXIG_VIGILO_BAC_0060 |
165 | 168 |
self.orderby = [] |
169 |
plugins = config.get('columns_plugins', []) |
|
166 | 170 |
if sort: |
167 |
for _plugin, instance in config.get('columns_plugins', []):
|
|
171 |
for _plugin, instance in plugins:
|
|
168 | 172 |
criterion = instance.get_sort_criterion(self, sort) |
169 | 173 |
if criterion is not None: |
170 | 174 |
if order == 'asc': |
... | ... | |
172 | 176 |
else: |
173 | 177 |
self.orderby.append(desc(criterion)) |
174 | 178 |
|
175 |
# Permet de définir le sens de tri pour la priorité. |
|
176 |
if config['vigiboard_priority_order'] == 'asc': |
|
177 |
priority_order = asc(CorrEvent.priority) |
|
178 |
else: |
|
179 |
priority_order = desc(CorrEvent.priority) |
|
180 |
|
|
181 |
self.orderby.extend([ |
|
182 |
asc(CorrEvent.ack), # État acquittement |
|
183 |
asc(StateName.statename.in_([u'OK', u'UP'])), # Vert / Pas vert |
|
184 |
priority_order, # Priorité ITIL |
|
185 |
]) |
|
186 |
|
|
187 |
if asbool(config.get('state_first', True)): |
|
188 |
self.orderby.extend([ |
|
189 |
desc(StateName.order), # Etat courant |
|
190 |
desc(Event.timestamp), # Timestamp |
|
191 |
]) |
|
192 |
else: |
|
193 |
self.orderby.extend([ |
|
194 |
desc(Event.timestamp), # Timestamp |
|
195 |
desc(StateName.order), # Etat courant |
|
196 |
]) |
|
179 |
default_sort = aslist(config.get('default_sort', '')) |
|
180 |
for sort_column in default_sort: |
|
181 |
criterion = None |
|
182 |
sort_field, _dummy, sort_order = sort_column.partition(':') |
|
183 |
for _plugin, instance in plugins: |
|
184 |
criterion = instance.get_sort_criterion(self, sort_field) |
|
185 |
if criterion is not None: |
|
186 |
if sort_order == 'desc': |
|
187 |
self.orderby.append(desc(criterion)) |
|
188 |
elif sort_order in ('asc', None): |
|
189 |
self.orderby.append(asc(criterion)) |
|
190 |
else: |
|
191 |
self.orderby.append(asc(criterion)) |
|
192 |
LOGGER.warn('Invalid sort order: "%s", sorting in ' |
|
193 |
'ascending order instead', sort_order) |
|
194 |
break |
|
195 |
if criterion is None: |
|
196 |
LOGGER.info('No such plugin: "%s"', sort_field) |
|
197 | 197 |
|
198 | 198 |
if search is not None: |
199 | 199 |
# 2nde passe pour les filtres : self.items est désormais défini. |
200 |
for _plugin, instance in config.get('columns_plugins', []):
|
|
200 |
for _plugin, instance in plugins:
|
|
201 | 201 |
instance.handle_search_fields(self, search, ITEMS, subqueries) |
202 | 202 |
|
203 | 203 |
if mask_closed_events: |
Also available in: Unified diff