Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (2.42 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 nom de l'hôte
8
sur lequel porte l'événement corrélé.
9
"""
10
import tw.forms as twf
11
from tg.i18n import lazy_ugettext as l_
12
from sqlalchemy.sql.expression import union_all
13
from sqlalchemy.orm import aliased
14

    
15
from vigilo.models.session import DBSession
16
from vigilo.models import tables
17
from vigiboard.controllers.plugins import VigiboardRequestPlugin, INNER
18

    
19
class PluginMap(VigiboardRequestPlugin):
20
    """
21
    Ajoute de quoi filtrer sur les cartes.
22
    """
23
    def get_search_fields(self):
24
        return [
25
            twf.HiddenField(
26
                'idmap',
27
                validator=twf.validators.Int(if_missing=None),
28
            )
29
        ]
30

    
31
    def handle_search_fields(self, query, search, state, subqueries):
32
        if state != INNER or not search.get('idmap'):
33
            return
34
        idmap = int(search['idmap'])
35

    
36
        # Il s'agit d'un manager. On applique le filtre
37
        # indépendamment aux 2 sous-requêtes.
38
        if len(subqueries) == 2:
39
            mapnodells = DBSession.query(
40
                tables.MapNodeLls.idservice
41
            ).filter(tables.MapNodeLls.idmap == idmap).subquery()
42

    
43
            mapnodehost = DBSession.query(
44
                tables.MapNodeHost.idhost
45
            ).filter(tables.MapNodeHost.idmap == idmap).subquery()
46

    
47
            subqueries[0] = subqueries[0].join(
48
                    (mapnodells, mapnodells.c.idservice ==
49
                        tables.LowLevelService.idservice),
50
                )
51

    
52
            subqueries[1] = subqueries[1].join(
53
                    (mapnodehost, mapnodehost.c.idhost ==
54
                        tables.Host.idhost),
55
                )
56

    
57
        # Il s'agit d'un utilisateur normal.
58
        else:
59
            mapnodells = DBSession.query(
60
                tables.MapNodeLls.idservice.label('idsupitem')
61
            ).filter(tables.MapNodeLls.idmap == idmap)
62

    
63
            mapnodehost = DBSession.query(
64
                tables.MapNodeHost.idhost.label('idsupitem')
65
            ).filter(tables.MapNodeHost.idmap == idmap)
66

    
67
            union = union_all(mapnodells, mapnodehost, correlate=False).alias()
68
            subqueries[0] = subqueries[0].join(
69
                    (union, union.c.idsupitem == tables.UserSupItem.idsupitem),
70
                )
71