Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / controllers / vigiboard_plugin / shn.py @ 5dbfa80d

History | View | Annotate | Download (4.04 KB)

1
# -*- coding: utf-8 -*-
2
# vim:set expandtab tabstop=4 shiftwidth=4: 
3
"""
4
Plugin SHN : High level service
5
"""
6

    
7
from pylons.i18n import gettext as _
8
from tg import url
9

    
10
from vigiboard.controllers.vigiboard_plugin import VigiboardRequestPlugin
11
from vigilo.models.configure import DBSession
12
from vigilo.models import HighLevelService, \
13
                            CorrEvent, Event, SupItem
14

    
15
class PluginSHN(VigiboardRequestPlugin):
16

    
17
    """
18
    Plugin permettant de rajouter le nombre de SHNs impactés à
19
    l'affichage et d'obtenir une liste détaillée de ces SHNs.
20
    """
21

    
22
    def __init__(self):
23
        super(PluginSHN, self).__init__(
24
            name = _(u'Impacted HLS'),
25
            style = {'title': _(u'Impacted High-Level Services'),
26
                'style': 'text-align:center'},
27
            object_name = "shn"
28
        )
29
    
30
    def show(self, aggregate):
31
        """Fonction d'affichage"""
32
        supitem = DBSession.query(SupItem).join(
33
            (Event, Event.idsupitem == SupItem.idsupitem),
34
            (CorrEvent, CorrEvent.idcause == Event.idevent),
35
        ).filter(CorrEvent.idcorrevent == aggregate.idcorrevent).first()
36

    
37
        if not supitem:
38
            count = 0
39
        else:
40
            count = supitem.impacted_hls(
41
                HighLevelService.idservice
42
            ).count()
43

    
44
        dico = {
45
            'baseurl': url('/'),
46
            'idcorrevent': aggregate.idcorrevent,
47
            'count': count,
48
        }
49

    
50
        # XXX Il faudrait échapper l'URL contenue dans baseurl
51
        # pour éviter des attaques de type XSS.
52
        res = ('<a href="javascript:vigiboard_hls_dialog(this,' + \
53
                '\'%(baseurl)s\',%(idcorrevent)d)" ' + \
54
                'class="hls_link">%(count)d</a>') % dico
55
        return res
56

    
57
    def context(self, context):
58
        """Fonction de context"""
59
        context.append([None, self.object_name])
60

    
61
    def controller(self, idcorrevent, *argv, **krgv):
62
        """Ajout de fonctionnalités au contrôleur"""
63
        supitem = self.get_correvent_supitem(idcorrevent)
64

    
65
        if not supitem:
66
            # XXX On devrait afficher une erreur (avec tg.flash()).
67
            return []
68

    
69
        services = supitem.impacted_hls(
70
            HighLevelService.servicename
71
        ).order_by(
72
            HighLevelService.servicename.asc()
73
        ).all()
74

    
75
        return dict(services=[service.servicename for service in services])
76

    
77
    def get_correvent_supitem(self, idcorrevent):
78
        """
79
        Retourne le supitem ayant causé l'évènement 
80
        corrélé dont l'identifiant est passé en paramètre.
81
        """
82
        # On récupère l'item recherché dans la BDD
83
        supitem = DBSession.query(SupItem
84
            ).join(
85
                (Event, Event.idsupitem == SupItem.idsupitem),
86
                (CorrEvent, CorrEvent.idcause == Event.idevent),
87
            ).filter(CorrEvent.idcorrevent == idcorrevent).first()
88
            
89
#        # On détermine l'identité de l'utilisateur
90
#        username = request.environ['repoze.who.identity']['repoze.who.userid']
91
#        user = User.by_user_name(username)
92
#        
93
#        # On liste les permissions dont dispose l'utilisateur
94
#        user_permissions = []
95
#        for group in user.usergroups:
96
#            for permission in group.permissions:
97
#                user_permissions.append(permission)
98
#        
99
#        # On liste les permissions possibles pour l'item
100
#        supitem_permissions = []
101
#        for group in supitem.groups:
102
#            for permission in group.permissions:
103
#                supitem_permissions.append(permission)
104
#                
105
#        # On vérifie que l'utilisateur dispose bien des
106
#        # permissions sur l'item en question avant de le retourner.
107
#        for user_permission in user_permissions :
108
#            for supitem_permission in supitem_permissions :
109
#                if user_permission.idpermission == \
110
#                                            supitem_permission.idpermission:
111
#                    return supitem
112
#        
113
#        # Dans le cas contraire on retourne None
114
#        return None
115
    
116
        return supitem
117