Revision 539f69fc
Suite des modifications pour les historiques dans VigiBoard.
git-svn-id: https://vigilo-dev.si.c-s.fr/svn@2151 b22e2e97-25c9-44ff-b637-2e5ceca36478
vigiboard/controllers/root.py | ||
---|---|---|
55 | 55 |
redirect('/') |
56 | 56 |
|
57 | 57 |
@validate(validators={ |
58 |
'page': validators.Int(), |
|
58 |
'page': validators.Int(min=1),
|
|
59 | 59 |
}, error_handler=process_form_errors) |
60 |
@expose('vigiboard.html') |
|
60 |
@expose('vigiboard_event_table.html')
|
|
61 | 61 |
@require(Any(not_anonymous(), msg=l_("You need to be authenticated"))) |
62 | 62 |
def default(self, page=1, hostgroup=None, servicegroup=None, |
63 | 63 |
host=None, service=None, output=None, trouble_ticket=None, |
64 | 64 |
from_date=None, to_date=None, *argv, **krgv): |
65 |
|
|
66 | 65 |
""" |
67 | 66 |
Page d'accueil de Vigiboard. Elle affiche, suivant la page demandée |
68 | 67 |
(page 1 par defaut), la liste des événements, rangés par ordre de prise |
... | ... | |
77 | 76 |
@param output: Idem que host mais sur le text explicatif |
78 | 77 |
@param trouble_ticket: Idem que host mais sur les tickets attribués |
79 | 78 |
""" |
80 |
if page < 1: |
|
81 |
page = 1 |
|
82 |
|
|
83 | 79 |
username = request.environ['repoze.who.identity']['repoze.who.userid'] |
84 | 80 |
user = User.by_user_name(username) |
85 | 81 |
|
... | ... | |
191 | 187 |
nb_pages = nb_pages, |
192 | 188 |
page = page, |
193 | 189 |
event_edit_status_options = edit_event_status_options, |
194 |
history = [], |
|
195 |
hist_error = False, |
|
196 | 190 |
search = search, |
197 | 191 |
refresh_times = config['vigiboard_refresh_times'], |
198 | 192 |
) |
199 | 193 |
|
200 | 194 |
@validate(validators={ |
201 | 195 |
'idcorrevent': validators.Int(not_empty=True), |
202 |
'page': validators.Int(), |
|
196 |
'page': validators.Int(min=1),
|
|
203 | 197 |
}, error_handler=process_form_errors) |
204 | 198 |
@expose('vigiboard_raw_events_table.html') |
205 | 199 |
@require(Any(not_anonymous(), msg=l_("You need to be authenticated"))) |
... | ... | |
210 | 204 |
|
211 | 205 |
@param idevent: identifiant de l'événement souhaité |
212 | 206 |
""" |
213 |
|
|
214 | 207 |
username = request.environ['repoze.who.identity']['repoze.who.userid'] |
215 | 208 |
events = VigiboardRequest(User.by_user_name(username), False) |
216 | 209 |
events.add_table( |
... | ... | |
256 | 249 |
}, |
257 | 250 |
nb_pages = nb_pages, |
258 | 251 |
page = page, |
259 |
event_edit_status_options = edit_event_status_options, |
|
260 | 252 |
history = history_entries, |
261 |
hist_error = True, |
|
262 | 253 |
search = { |
263 | 254 |
'host': '', |
264 | 255 |
'service': '', |
... | ... | |
272 | 263 |
refresh_times=config['vigiboard_refresh_times'], |
273 | 264 |
) |
274 | 265 |
|
275 |
@validate(validators={'idevent': validators.Int(not_empty=True)}, |
|
276 |
error_handler=process_form_errors) |
|
277 |
@expose('vigiboard.html') |
|
266 |
@validate(validators={ |
|
267 |
'idevent': validators.Int(not_empty=True), |
|
268 |
'page': validators.Int(min=1), |
|
269 |
}, error_handler=process_form_errors) |
|
270 |
@expose('vigiboard_history_table.html') |
|
278 | 271 |
@require(Any(not_anonymous(), msg=l_("You need to be authenticated"))) |
279 |
def event(self, idevent): |
|
272 |
def event(self, idevent, page=1):
|
|
280 | 273 |
""" |
281 | 274 |
Affichage de l'historique d'un événement. |
282 | 275 |
Pour accéder à cette page, l'utilisateur doit être authentifié. |
283 | 276 |
|
284 | 277 |
@param idevent: identifiant de l'événement souhaité |
285 | 278 |
""" |
286 |
|
|
287 | 279 |
username = request.environ['repoze.who.identity']['repoze.who.userid'] |
288 | 280 |
events = VigiboardRequest(User.by_user_name(username)) |
289 | 281 |
events.add_table( |
290 |
CorrEvent,
|
|
282 |
Event, |
|
291 | 283 |
events.items.c.hostname, |
292 | 284 |
events.items.c.servicename, |
293 | 285 |
) |
294 |
events.add_join((Event, CorrEvent.idcause == Event.idevent)) |
|
295 | 286 |
events.add_join((events.items, |
296 | 287 |
Event.idsupitem == events.items.c.idsupitem)) |
297 |
events.add_filter(CorrEvent.idcorrevent == idcorrevent) |
|
298 |
|
|
299 |
# Vérification que l'événement existe |
|
300 |
if events.num_rows() != 1 : |
|
301 |
flash(_('No access to this event'), 'error') |
|
288 |
|
|
289 |
if events.num_rows() != 1: |
|
290 |
flash(_('No such event or access denied'), 'error') |
|
302 | 291 |
redirect('/') |
303 |
|
|
292 |
|
|
304 | 293 |
events.format_events(0, 1) |
305 |
history_entries = events.format_history() |
|
306 |
events.generate_tmpl_context() |
|
294 |
events.generate_tmpl_context() |
|
295 |
history = events.format_history() |
|
296 |
|
|
297 |
total_rows = history.count() |
|
298 |
items_per_page = int(config['vigiboard_items_per_page']) |
|
299 |
|
|
300 |
id_first_row = items_per_page * (page-1) |
|
301 |
id_last_row = min(id_first_row + items_per_page, total_rows) |
|
302 |
|
|
303 |
history_entries = history[id_first_row : id_last_row] |
|
304 |
|
|
305 |
nb_pages = int(math.ceil(total_rows / (items_per_page + 0.0))) |
|
306 |
if not total_rows: |
|
307 |
id_first_row = 0 |
|
308 |
else: |
|
309 |
id_first_row += 1 |
|
307 | 310 |
|
308 | 311 |
return dict( |
309 |
events = events.events, |
|
310 | 312 |
plugins = get_plugins_instances(), |
311 | 313 |
rows_info = { |
312 |
'id_first_row': 1,
|
|
313 |
'id_last_row': 1,
|
|
314 |
'total_rows': 1,
|
|
314 |
'id_first_row': id_first_row,
|
|
315 |
'id_last_row': id_last_row,
|
|
316 |
'total_rows': total_rows,
|
|
315 | 317 |
}, |
316 |
nb_pages = 1, |
|
317 |
page = 1, |
|
318 |
event_edit_status_options = edit_event_status_options, |
|
318 |
nb_pages = nb_pages, |
|
319 |
page = page, |
|
319 | 320 |
history = history_entries, |
320 |
hist_error = True, |
|
321 | 321 |
search = { |
322 | 322 |
'host': '', |
323 | 323 |
'service': '', |
... | ... | |
334 | 334 |
@validate( |
335 | 335 |
validators={ |
336 | 336 |
'host': validators.NotEmpty(), |
337 |
# 'service': validators.NotEmpty() |
|
337 |
# 'service': validators.NotEmpty(), |
|
338 |
'page': validators.Int(min=1), |
|
338 | 339 |
}, |
339 | 340 |
error_handler = process_form_errors) |
340 |
@expose('vigiboard.html') |
|
341 |
@expose('vigiboard_event_table.html')
|
|
341 | 342 |
@require(Any(not_anonymous(), msg=l_("You need to be authenticated"))) |
342 |
def item(self, host, service=None): |
|
343 |
def item(self, host, service=None, page=1):
|
|
343 | 344 |
""" |
344 |
Affichage de l'historique de l'ensemble des événements correspondant
|
|
345 |
au host et service demandé.
|
|
345 |
Affichage de l'historique de l'ensemble des événements corrélés
|
|
346 |
jamais ouverts sur l'hôte / service demandé.
|
|
346 | 347 |
Pour accéder à cette page, l'utilisateur doit être authentifié. |
347 | 348 |
|
348 | 349 |
@param host: Nom de l'hôte souhaité. |
349 | 350 |
@param service: Nom du service souhaité |
350 | 351 |
""" |
351 |
|
|
352 | 352 |
idsupitem = SupItem.get_supitem(host, service) |
353 | 353 |
|
354 | 354 |
username = request.environ['repoze.who.identity']['repoze.who.userid'] |
355 |
events = VigiboardRequest(User.by_user_name(username), False)
|
|
356 |
events.add_table(
|
|
355 |
aggregates = VigiboardRequest(User.by_user_name(username), False)
|
|
356 |
aggregates.add_table(
|
|
357 | 357 |
CorrEvent, |
358 |
events.items.c.hostname,
|
|
359 |
events.items.c.servicename,
|
|
358 |
aggregates.items.c.hostname,
|
|
359 |
aggregates.items.c.servicename,
|
|
360 | 360 |
) |
361 |
events.add_join((Event, CorrEvent.idcause == Event.idevent))
|
|
362 |
events.add_join((events.items,
|
|
363 |
Event.idsupitem == events.items.c.idsupitem))
|
|
364 |
events.add_filter(events.items.c.idsupitem == idsupitem)
|
|
361 |
aggregates.add_join((Event, CorrEvent.idcause == Event.idevent))
|
|
362 |
aggregates.add_join((aggregates.items,
|
|
363 |
Event.idsupitem == aggregates.items.c.idsupitem))
|
|
364 |
aggregates.add_filter(aggregates.items.c.idsupitem == idsupitem)
|
|
365 | 365 |
|
366 | 366 |
# Vérification qu'il y a au moins 1 événement qui correspond |
367 |
if events.num_rows() == 0 : |
|
367 |
total_rows = aggregates.num_rows() |
|
368 |
if total_rows == 0 : |
|
368 | 369 |
flash(_('No access to this host/service or no event yet'), 'error') |
369 | 370 |
redirect('/') |
370 | 371 |
|
371 |
events.format_events(0, events.num_rows()) |
|
372 |
history_entries = events.format_history() |
|
373 |
events.generate_tmpl_context() |
|
372 |
items_per_page = int(config['vigiboard_items_per_page']) |
|
373 |
|
|
374 |
id_first_row = items_per_page * (page-1) |
|
375 |
id_last_row = min(id_first_row + items_per_page, total_rows) |
|
376 |
|
|
377 |
aggregates.format_events(id_first_row, id_last_row) |
|
378 |
aggregates.generate_tmpl_context() |
|
379 |
|
|
380 |
nb_pages = int(math.ceil(total_rows / (items_per_page + 0.0))) |
|
381 |
if not total_rows: |
|
382 |
id_first_row = 0 |
|
383 |
else: |
|
384 |
id_first_row += 1 |
|
374 | 385 |
|
375 | 386 |
return dict( |
376 |
events = events.events,
|
|
387 |
events = aggregates.events,
|
|
377 | 388 |
plugins = get_plugins_instances(), |
378 | 389 |
rows_info = { |
379 |
'id_first_row': 1,
|
|
380 |
'id_last_row': 1,
|
|
381 |
'total_rows': 1,
|
|
390 |
'id_first_row': id_first_row,
|
|
391 |
'id_last_row': id_last_row,
|
|
392 |
'total_rows': total_rows,
|
|
382 | 393 |
}, |
383 |
nb_pages = 1,
|
|
384 |
page = 1,
|
|
394 |
nb_pages = nb_pages,
|
|
395 |
page = page,
|
|
385 | 396 |
event_edit_status_options = edit_event_status_options, |
386 |
history = history_entries, |
|
387 |
hist_error = True, |
|
388 | 397 |
search = { |
389 | 398 |
'host': '', |
390 | 399 |
'service': '', |
vigiboard/controllers/vigiboardrequest.py | ||
---|---|---|
341 | 341 |
de l'affichage pour un historique donné. |
342 | 342 |
""" |
343 | 343 |
|
344 |
ids = [data[0].idcause for data in self.events]
|
|
344 |
ids = [data[0].idevent for data in self.events]
|
|
345 | 345 |
history = DBSession.query( |
346 | 346 |
EventHistory, |
347 | 347 |
).filter(EventHistory.idevent.in_(ids) |
348 | 348 |
).order_by(desc(EventHistory.timestamp) |
349 | 349 |
).order_by(desc(EventHistory.idhistory)) |
350 |
|
|
351 |
hists = {} |
|
352 |
for idevent in ids: |
|
353 |
hists[idevent] = [] |
|
354 |
|
|
355 |
for entry in history: |
|
356 |
hists[entry.idevent].append(entry) |
|
357 |
|
|
358 |
return hists |
|
350 |
return history |
|
359 | 351 |
|
360 | 352 |
def generate_tmpl_context(self): |
361 | 353 |
""" |
Also available in: Unified diff