Project

General

Profile

Revision 539f69fc

ID539f69fc6afc834fec500e42c52304d9699785cd
Parent 54644278
Child bcf87133

Added by Francois POIROTTE over 14 years ago

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

View differences:

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