Project

General

Profile

Revision 3d0d254c

ID3d0d254cf9f9d1b45e6a3e56a7fcbaad4cc344e4
Parent be29aa96
Child c49defb8

Added by Francois POIROTTE over 14 years ago

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

View differences:

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 (&#160;) 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
                '&#160;' * 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