Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / controllers / plugins / masked_events.py @ 011743be

History | View | Annotate | Download (1.58 KB)

1
# -*- coding: utf-8 -*-
2
# vim:set expandtab tabstop=4 shiftwidth=4:
3
# Copyright (C) 2007-2020 CS GROUP - France
4
# License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
5

    
6
"""
7
Un plugin pour VigiBoard qui ajoute une colonne avec le nombre
8
d'événements masqués d'un événement corrélé.
9
"""
10
from sqlalchemy.sql import functions as func
11
from vigiboard.controllers.plugins import VigiboardRequestPlugin
12

    
13
from vigilo.models.session import DBSession
14
from vigilo.models.tables.secondary_tables import EVENTSAGGREGATE_TABLE
15

    
16
class PluginMaskedEvents(VigiboardRequestPlugin):
17
    """
18
    Affiche le nombre d'événements masqués par l'événement corrélé.
19
    """
20
    def get_bulk_data(self, events_ids):
21
        """
22
        Renvoie le nombre d'événements masqués par celui-ci.
23

24
        @param events_ids: Liste des identifiants des événements corrélés
25
            à afficher.
26
        @type events_ids: C{int}
27
        @return: Un dictionnaire associant à chaque identifiant d'évènement
28
            le nombre d'événements masqués.
29
        @rtype: C{dict}
30
        """
31
        counts = DBSession.query(
32
                func.count().label('masked'),
33
                EVENTSAGGREGATE_TABLE.c.idcorrevent
34
            ).group_by(EVENTSAGGREGATE_TABLE.c.idcorrevent
35
            ).filter(EVENTSAGGREGATE_TABLE.c.idcorrevent.in_(events_ids))
36

    
37
        res = {}
38
        for count in counts:
39
            # Il faut retirer la cause du décompte.
40
            res[count.idcorrevent] = count.masked - 1
41
        return res
42

    
43
    def get_data(self, event):
44
        return {
45
            'id': event[0].idcorrevent,
46
        }