vigiboard / vigiboard / controllers / plugins / map.py @ c94dc931
History | View | Annotate | Download (2.41 KB)
1 | ecf084d9 | Francois POIROTTE | # -*- coding: utf-8 -*-
|
---|---|---|---|
2 | # vim:set expandtab tabstop=4 shiftwidth=4:
|
||
3 | c94dc931 | Francois POIROTTE | # Copyright (C) 2007-2020 CS-SI
|
4 | 9b8d9497 | Francois POIROTTE | # License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
|
5 | |||
6 | ecf084d9 | Francois POIROTTE | """
|
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 | 02c4a1e7 | Francois POIROTTE | from tg.i18n import lazy_ugettext as l_ |
12 | ecf084d9 | Francois POIROTTE | 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 | ) |