Revision dc005588
Liens vers les cartes dans VigiBoard (#959).
Ajoute des liens vers les cartes sur lesquelles l'hôte concerné par un
événement apparaît dans le dialogue de détail d'un l'événement corrélé.
L'URL de base de VigiMap doit être renseignée dans le fichier de
configuration de VigiBoard pour que ceci fonctionne. La configuration de
l'URL se fait grâce à l'option de configuration "interfaces.vigimap" (le
nom est le même que celui attendu par VigiAdmin).
"max_maps" avec 2 valeurs particulières :
- -1 inhibe toute limite (ie. affiche toutes les cartes)
- 0 désactive la fonctionnalité (ie. n'affiche aucune carte, ni même la
partie réservée à l'affichage des liens dans la boîte de dialogue)
Si le nombre de cartes disponibles est supérieur à la limite définie et
que le mécanisme d'affiche des liens est activé, un message avertit en
plus l'utilisateur.
Ajoute des tests sur cette nouvelle fonctionnalité.
De plus, le code !JavaScript du module "details" a été externalisé afin
de faciliter la lecture du fichier .html du module.
Enfin, le comportement d'ouverture des liens (ex: dans l'onglet courant
ou dans un nouvel onglet) est configurable grâce à l'option
"links_target" (il s'agit du même nom d'option que dans VigiAdmin).
Change-Id: I0d1b73fc4e9e7caf36e10a87bc3e0ae3d8972d88
Refs: #959.
Reviewed-on: https://vigilo-dev.si.c-s.fr/review/690
Tested-by: Build system <qa@vigilo-dev.si.c-s.fr>
Reviewed-by: Aurelien BOMPARD <aurelien.bompard@c-s.fr>
vigiboard/controllers/plugins/details.py | ||
---|---|---|
25 | 25 |
""" |
26 | 26 |
|
27 | 27 |
import urllib |
28 |
from tg import config, url |
|
28 |
from tg import config, url, request
|
|
29 | 29 |
from sqlalchemy.sql.expression import null as expr_null, union_all |
30 | 30 |
|
31 |
from repoze.what.predicates import has_permission, in_group |
|
32 |
from vigilo.turbogears.helpers import get_current_user |
|
33 |
|
|
31 | 34 |
from vigilo.models.session import DBSession |
32 |
from vigilo.models.tables import Event, \ |
|
33 |
CorrEvent, Host, LowLevelService, StateName |
|
35 |
from vigilo.models.tables import Event, CorrEvent, Host, LowLevelService, \ |
|
36 |
StateName, Map, MapNode, MapNodeHost, MapGroup |
|
37 |
from vigilo.models.tables.secondary_tables import MAP_GROUP_TABLE |
|
34 | 38 |
|
35 | 39 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin |
36 | 40 |
|
... | ... | |
52 | 56 |
# Obtention de données sur l'événement et sur son historique |
53 | 57 |
host_query = DBSession.query( |
54 | 58 |
Host.idhost.label("idsupitem"), |
59 |
Host.idhost.label("idhost"), |
|
55 | 60 |
Host.name.label("host"), |
56 | 61 |
expr_null().label("service"), |
57 | 62 |
) |
58 | 63 |
lls_query = DBSession.query( |
59 | 64 |
LowLevelService.idservice.label("idsupitem"), |
65 |
Host.idhost.label("idhost"), |
|
60 | 66 |
Host.name.label("host"), |
61 | 67 |
LowLevelService.servicename.label("service"), |
62 | 68 |
).join( |
... | ... | |
66 | 72 |
event = DBSession.query( |
67 | 73 |
CorrEvent.idcorrevent, |
68 | 74 |
CorrEvent.idcause, |
75 |
supitems.c.idhost, |
|
69 | 76 |
supitems.c.host, |
70 | 77 |
supitems.c.service, |
71 | 78 |
Event.message, |
... | ... | |
78 | 85 |
).filter(CorrEvent.idcorrevent == idcorrevent |
79 | 86 |
).first() |
80 | 87 |
|
88 |
# On détermine les cartes auxquelles cet utilisateur a accès. |
|
89 |
user_maps = {} |
|
90 |
max_maps = int(config['max_maps']) |
|
91 |
is_manager = in_group('managers').is_met(request.environ) |
|
92 |
if max_maps != 0 and (is_manager or |
|
93 |
has_permission('vigimap-access').is_met(request.environ)): |
|
94 |
items = DBSession.query( |
|
95 |
Map.idmap, |
|
96 |
Map.title, |
|
97 |
).distinct( |
|
98 |
).join( |
|
99 |
(MAP_GROUP_TABLE, MAP_GROUP_TABLE.c.idmap == Map.idmap), |
|
100 |
(MapGroup, MapGroup.idgroup == MAP_GROUP_TABLE.c.idgroup), |
|
101 |
(MapNodeHost, MapNodeHost.idmap == Map.idmap), |
|
102 |
).order_by(Map.title.asc() |
|
103 |
).filter(MapNodeHost.idhost == event.idhost) |
|
104 |
|
|
105 |
if not is_manager: |
|
106 |
mapgroups = get_current_user().mapgroups(only_direct=True) |
|
107 |
# pylint: disable-msg=E1103 |
|
108 |
items = items.filter(MapGroup.idgroup.in_(mapgroups)) |
|
109 |
|
|
110 |
# La valeur -1 supprime la limite. |
|
111 |
if max_maps > 0: |
|
112 |
# On limite au nombre maximum de cartes demandés + 1. |
|
113 |
# Un message sera affiché s'il y a effectivement plus |
|
114 |
# de cartes que la limite configurée. |
|
115 |
items = items.limit(max_maps + 1) |
|
116 |
|
|
117 |
user_maps = dict([(m.idmap, m.title) for m in items.all()]) |
|
118 |
|
|
81 | 119 |
context = { |
82 | 120 |
'idcorrevent': idcorrevent, |
83 | 121 |
'host': event.host, |
84 | 122 |
'service': event.service, |
85 | 123 |
'message': event.message, |
124 |
'maps': user_maps, |
|
86 | 125 |
} |
87 | 126 |
|
88 | 127 |
eventdetails = {} |
... | ... | |
122 | 161 |
host = event.host, |
123 | 162 |
service = event.service, |
124 | 163 |
eventdetails = eventdetails, |
164 |
maps = user_maps, |
|
125 | 165 |
idcause = event.idcause, |
126 | 166 |
) |
Also available in: Unified diff