Revision 3d0d254c
Utilisation de idaggregate de préférence par rapport à idevent (permet d'obtenir plus d'informations).
On suppose que la base de données génère les id des events (le corrélateur et le connector-db sont en train d'être modifiés pour suivre ce changement).
Utilisation de HighLevelService plutôt que ServiceHautNiveau.
git-svn-id: https://vigilo-dev.si.c-s.fr/svn@794 b22e2e97-25c9-44ff-b637-2e5ceca36478
vigiboard/controllers/vigiboard_plugin/shn.py | ||
---|---|---|
6 | 6 |
|
7 | 7 |
from vigiboard.controllers.vigiboard_plugin import \ |
8 | 8 |
VigiboardRequestPlugin |
9 |
from vigiboard.model import DBSession, ServiceHautNiveau, Event |
|
10 |
from sqlalchemy import sql |
|
9 |
from vigiboard.model import DBSession, EventsAggregate#, HighLevelService |
|
11 | 10 |
from pylons.i18n import gettext as _ |
12 | 11 |
from tg import tmpl_context, url |
13 | 12 |
from tw.jquery.ui_dialog import JQueryUIDialog |
... | ... | |
16 | 15 |
|
17 | 16 |
""" |
18 | 17 |
Plugin permettant de rajouter le nombre de SHNs impactés à |
19 |
l'affichage |
|
18 |
l'affichage et d'obtenir une liste détaillée de ces SHNs.
|
|
20 | 19 |
""" |
21 | 20 |
|
22 | 21 |
def __init__(self): |
23 | 22 |
super(PluginSHN, self).__init__( |
24 |
table = [ServiceHautNiveau.servicename_dep, |
|
25 |
sql.func.count(Event.idevent)], |
|
26 |
outerjoin = [(ServiceHautNiveau, |
|
27 |
ServiceHautNiveau.servicename_dep == Event.servicename)], |
|
28 |
groupby = [(Event),(ServiceHautNiveau.servicename_dep)], |
|
29 | 23 |
name = _(u'Impacted HLS'), |
30 | 24 |
style = {'title': _(u'Impacted High-Level Services'), |
31 | 25 |
'style': 'text-align:center'}, |
32 | 26 |
object_name = "shn" |
33 | 27 |
) |
34 | 28 |
|
35 |
def show(self, req):
|
|
29 |
def show(self, aggregate):
|
|
36 | 30 |
"""Fonction d'affichage""" |
37 |
if not req[1] is None:
|
|
38 |
dico = {
|
|
39 |
'baseurl': url('/'),
|
|
40 |
'idevent': req[0].idcause,
|
|
41 |
'impacted_hls': req[2],
|
|
42 |
}
|
|
43 |
return '<a href="javascript:vigiboard_shndialog(\'%(baseurl)s\','\
|
|
44 |
'\'%(idevent)s\')" class="SHNLien">%(impacted_hls)d</a>' % \
|
|
45 |
dico
|
|
46 |
else:
|
|
47 |
return ""
|
|
31 |
dico = {
|
|
32 |
'baseurl': url('/'),
|
|
33 |
'idaggregate': aggregate.idaggregate,
|
|
34 |
'impacted_hls': len(aggregate.highlevel),
|
|
35 |
}
|
|
36 |
# XXX Il faudrait échapper l'URL contenue dans baseurl
|
|
37 |
# pour éviter des attaques de type XSS.
|
|
38 |
res = ('<a href="javascript:vigiboard_shndialog(' + \
|
|
39 |
'\'%(baseurl)s\',\'%(idaggregate)d\')" ' + \
|
|
40 |
'class="SHNLien">%(impacted_hls)d</a>') % dico
|
|
41 |
return res
|
|
48 | 42 |
|
49 | 43 |
def context(self, context): |
50 | 44 |
"""Fonction de context""" |
51 | 45 |
|
52 |
# XXX We insert 10 unbreakable spaces ( ) to workaround a bug |
|
53 |
# in JQuery where the dialog's width is incorrectly set. |
|
46 |
# On ajoute 10 espaces insécables pour éviter un bug de JQueryUIDialog: |
|
47 |
# le calcul de la taille de la boîte de dialogue ne tient pas compte |
|
48 |
# de l'espace occupé par la croix permettant de fermer le dialogue. |
|
49 |
# Du coup, elle se retrouve superposée au titre de la boîte. |
|
54 | 50 |
tmpl_context.shndialog = JQueryUIDialog(id='SHNDialog', |
55 | 51 |
autoOpen=False, title='%s%s' % (_(u'High-Level Service'), |
56 | 52 |
' ' * 10)) |
... | ... | |
58 | 54 |
|
59 | 55 |
def controller(self, *argv, **krgv): |
60 | 56 |
"""Ajout de fonctionnalités au contrôleur""" |
61 |
idevent = krgv['idevent'] |
|
62 |
service = DBSession.query(Event.servicename |
|
63 |
).filter(Event.idevent == idevent).one().servicename |
|
57 |
idaggregate = krgv['idaggregate'] |
|
58 |
aggregate = DBSession.query(EventsAggregate) \ |
|
59 |
.filter(EventsAggregate.idaggregate == idaggregate).one() |
|
60 |
shns = aggregate.highlevel |
|
64 | 61 |
|
65 |
shns = DBSession.query(ServiceHautNiveau.servicename |
|
66 |
).filter(ServiceHautNiveau.servicename_dep == service) |
|
67 |
return dict( shns = [shn.servicename for shn in shns]) |
|
62 |
return dict(shns=[shn.servicename for shn in shns]) |
|
68 | 63 |
|
Also available in: Unified diff