Revision 1101e03e
Mise à jour des contrôleurs de VigiBoard et des templates pour tenir permettre le filtrage par date des événements.
git-svn-id: https://vigilo-dev.si.c-s.fr/svn@1604 b22e2e97-25c9-44ff-b637-2e5ceca36478
vigiboard/controllers/root.py | ||
---|---|---|
60 | 60 |
|
61 | 61 |
@expose('vigiboard.html') |
62 | 62 |
@require(Any(not_anonymous(), msg=l_("You need to be authenticated"))) |
63 |
def default(self, page = None, host = None, service = None, output = None, |
|
64 |
trouble_ticket=None, *argv, **krgv): |
|
63 |
def default(self, page=None, host=None, service=None, output=None, |
|
64 |
trouble_ticket=None, from_date=None, to_date=None, |
|
65 |
*argv, **krgv): |
|
65 | 66 |
|
66 | 67 |
""" |
67 | 68 |
Page d'accueil de Vigiboard. Elle affiche, suivant la page demandée |
... | ... | |
103 | 104 |
'host': '', |
104 | 105 |
'service': '', |
105 | 106 |
'output': '', |
106 |
'tt': '' |
|
107 |
'tt': '', |
|
108 |
'from_date': '', |
|
109 |
'to_date': '', |
|
107 | 110 |
} |
108 | 111 |
# Application des filtres si nécessaire |
109 | 112 |
if host: |
... | ... | |
114 | 117 |
if service: |
115 | 118 |
search['service'] = service |
116 | 119 |
service = sql_escape_like(service) |
117 |
aggregates.add_filter(ServiceLowLevel.servicename.ilike('%%%s%%' % service)) |
|
120 |
aggregates.add_filter(ServiceLowLevel.servicename.ilike( |
|
121 |
'%%%s%%' % service)) |
|
118 | 122 |
|
119 | 123 |
if output: |
120 | 124 |
search['output'] = output |
... | ... | |
127 | 131 |
aggregates.add_filter(CorrEvent.trouble_ticket.ilike( |
128 | 132 |
'%%%s%%' % trouble_ticket)) |
129 | 133 |
|
134 |
if from_date: |
|
135 |
search['from_date'] = from_date |
|
136 |
# TRANSLATORS: Format de date et heure. |
|
137 |
try: |
|
138 |
from_date = datetime.strptime( |
|
139 |
from_date, _('%Y-%m-%d %I:%M:%S %p')) |
|
140 |
except ValueError: |
|
141 |
to_date = None |
|
142 |
aggregates.add_filter(CorrEvent.timestamp_active >= from_date) |
|
143 |
|
|
144 |
if to_date: |
|
145 |
search['to_date'] = to_date |
|
146 |
# TRANSLATORS: Format de date et heure. |
|
147 |
try: |
|
148 |
to_date = datetime.strptime( |
|
149 |
to_date, _('%Y-%m-%d %I:%M:%S %p')) |
|
150 |
except ValueError: |
|
151 |
to_date = None |
|
152 |
aggregates.add_filter(CorrEvent.timestamp_active <= to_date) |
|
153 |
|
|
130 | 154 |
# Calcul des éléments à afficher et du nombre de pages possibles |
131 | 155 |
total_rows = aggregates.num_rows() |
132 | 156 |
items_per_page = int(config['vigiboard_items_per_page']) |
... | ... | |
144 | 168 |
id_first_row += 1 |
145 | 169 |
|
146 | 170 |
return dict( |
147 |
events = aggregates.events,
|
|
148 |
rows_info = {
|
|
149 |
'id_first_row': id_first_row,
|
|
150 |
'id_last_row': id_last_row,
|
|
151 |
'total_rows': total_rows,
|
|
152 |
},
|
|
153 |
nb_pages = nb_pages,
|
|
154 |
page = page,
|
|
155 |
event_edit_status_options = edit_event_status_options,
|
|
156 |
history = [],
|
|
157 |
hist_error = False,
|
|
158 |
plugin_context = aggregates.context_fct,
|
|
159 |
search = search,
|
|
160 |
refresh_times=self.refresh_times,
|
|
161 |
)
|
|
171 |
events = aggregates.events, |
|
172 |
rows_info = { |
|
173 |
'id_first_row': id_first_row, |
|
174 |
'id_last_row': id_last_row, |
|
175 |
'total_rows': total_rows, |
|
176 |
}, |
|
177 |
nb_pages = nb_pages, |
|
178 |
page = page, |
|
179 |
event_edit_status_options = edit_event_status_options, |
|
180 |
history = [], |
|
181 |
hist_error = False, |
|
182 |
plugin_context = aggregates.context_fct, |
|
183 |
search = search, |
|
184 |
refresh_times=self.refresh_times, |
|
185 |
) |
|
162 | 186 |
|
163 | 187 |
@validate(validators={'idcorrevent': validators.Int(not_empty=True)}, |
164 | 188 |
error_handler=process_form_errors) |
... | ... | |
281 | 305 |
'host': None, |
282 | 306 |
'service': None, |
283 | 307 |
'output': None, |
284 |
'tt': None |
|
308 |
'tt': None, |
|
309 |
'from_date': None, |
|
310 |
'to_date': None, |
|
285 | 311 |
}, |
286 | 312 |
refresh_times=self.refresh_times, |
287 | 313 |
) |
... | ... | |
339 | 365 |
'host': None, |
340 | 366 |
'service': None, |
341 | 367 |
'output': None, |
342 |
'tt': None |
|
368 |
'tt': None, |
|
369 |
'from_date': None, |
|
370 |
'to_date': None, |
|
343 | 371 |
}, |
344 | 372 |
refresh_times=self.refresh_times, |
345 | 373 |
) |
vigiboard/controllers/vigiboardrequest.py | ||
---|---|---|
10 | 10 |
from tg import url, config, tmpl_context |
11 | 11 |
from vigiboard.model import DBSession |
12 | 12 |
from sqlalchemy import not_, and_, asc, desc, sql |
13 |
from sqlalchemy.sql.expression import or_ |
|
13 | 14 |
from sqlalchemy.orm import aliased |
14 | 15 |
from vigiboard.widgets.edit_event import EditEventForm |
15 | 16 |
from vigiboard.widgets.search_form import SearchForm |
... | ... | |
52 | 53 |
(ServiceLowLevel, Event.idsupitem == ServiceLowLevel.idservice), |
53 | 54 |
(Host, Host.idhost == ServiceLowLevel.idhost), |
54 | 55 |
(StateName, StateName.idstatename == Event.current_state), |
55 |
(HOST_GROUP_TABLE, HOST_GROUP_TABLE.c.idhost == Host.idhost), |
|
56 |
(SERVICE_GROUP_TABLE, SERVICE_GROUP_TABLE.c.idservice == \ |
|
57 |
ServiceLowLevel.idservice), |
|
58 | 56 |
] |
59 | 57 |
|
60 | 58 |
self.outerjoin = [ |
59 |
(HOST_GROUP_TABLE, HOST_GROUP_TABLE.c.idhost == Host.idhost), |
|
60 |
(SERVICE_GROUP_TABLE, SERVICE_GROUP_TABLE.c.idservice == \ |
|
61 |
ServiceLowLevel.idservice), |
|
61 | 62 |
] |
62 | 63 |
|
63 | 64 |
self.filter = [ |
64 |
HOST_GROUP_TABLE.c.idgroup.in_(self.user_groups), |
|
65 |
SERVICE_GROUP_TABLE.c.idgroup.in_(self.user_groups), |
|
65 |
or_( |
|
66 |
HOST_GROUP_TABLE.c.idgroup.in_(self.user_groups), |
|
67 |
SERVICE_GROUP_TABLE.c.idgroup.in_(self.user_groups), |
|
68 |
), |
|
66 | 69 |
|
67 | 70 |
# On masque les événements avec l'état OK |
68 | 71 |
# et traités (status == u'AAClosed'). |
... | ... | |
446 | 449 |
|
447 | 450 |
# Dialogue de recherche |
448 | 451 |
tmpl_context.search_form = SearchForm('search_form', lang=self.lang, |
449 |
# TRANSLATORS : Format de date
|
|
450 |
date_format=_('%Y-%m-%d %I:%M:%S %P'))
|
|
452 |
# TRANSLATORS: Format de date et heure.
|
|
453 |
date_format=_('%Y-%m-%d %I:%M:%S %p'))
|
|
451 | 454 |
|
452 | 455 |
# Dialogue de détail d'un événement |
453 | 456 |
|
vigiboard/widgets/search_form.py | ||
---|---|---|
33 | 33 |
super(SearchForm, self).__init__(id, *args, **kwargs) |
34 | 34 |
|
35 | 35 |
self.children.append(CalendarDateTimePicker(id + '_from_date', |
36 |
label_text=l_('From:'), |
|
36 |
name = 'from_date', |
|
37 |
label_text = l_('From:'), |
|
37 | 38 |
button_text = l_("Choose"), |
38 | 39 |
date_format = date_format, |
39 | 40 |
not_empty = False, |
40 | 41 |
calendar_lang=lang)) |
41 | 42 |
|
42 |
self.children.append(CalendarDateTimePicker(id + '_to_date', |
|
43 |
label_text=l_('To:'), |
|
43 |
self.children.append(CalendarDateTimePicker(id + '_to_date', |
|
44 |
name = 'to_date', |
|
45 |
label_text = l_('To:'), |
|
44 | 46 |
button_text = l_("Choose"), |
45 | 47 |
date_format = date_format, |
46 | 48 |
not_empty = False, |
Also available in: Unified diff