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 |
|