Project

General

Profile

Revision 147b6daa

ID147b6daa454ef4f2089cafd9b55efeab951cb82c
Parent f2803249
Child 169b8ab1

Added by Francois POIROTTE about 13 years ago

Liens conditionnels dans VigiBoard (cf. #771)

Permet de conditionner l'affichage des liens sur un événement selon son
contexte, à l'aide d'une fonction de garde.
Cette fonction est libre de modifier le contexte si elle le souhaite.

Une adaptation de la syntaxe de déclaration des liens dans le fichier
app_cfg.py a été nécessaire (afin d'accomoder les paramètres
supplémentaires).

Change-Id: I82fa4133c9550fd34c4acccde5384b0c3813240f

View differences:

vigiboard/config/app_cfg.py
86 86
#
87 87
# Permet de satisfaire l'exigence VIGILO_EXIG_VIGILO_BAC_0130.
88 88
base_config['vigiboard_links.eventdetails'] = (
89
    (
90
        u'Détail de l\'hôte dans Nagios',
91
        '/nagios/%(host)s/cgi-bin/status.cgi?host=%(host)s'
92
    ), (
93
        u'Détail de la métrologie',
94
        'http://vigilo.example.com/vigilo/vigigraph/rpc/fullHostPage?host=%(host)s'
95
    ), (
96
        u'Détail de la sécurité',
97
        'http://security.example.com/?host=%(host)s'
98
    ), (
99
        'Inventaire',
100
        'http://cmdb.example.com/?host=%(host)s'
101
    ), (
102
        'Documentation',
103
        'http://doc.example.com/?q=%(message)s'
104
    ),
89
    {
90
        'label': u'Détail de l\'hôte dans Nagios',
91
        'uri': '/nagios/%(host)s/cgi-bin/status.cgi?host=%(host)s',
92
    },
93
    {
94
        'label': u'Détail de la métrologie',
95
        'uri': 'http://vigilo.example.com/vigilo/vigigraph/rpc/fullHostPage?host=%(host)s',
96
    },
97
    {
98
        'label': u'Détail de la sécurité',
99
        'uri': 'http://security.example.com/?host=%(host)s',
100
    },
101
    {
102
        'label': 'Inventaire',
103
        'uri': 'http://cmdb.example.com/?host=%(host)s',
104
    },
105
    {
106
        'label': 'Documentation',
107
        'uri': 'http://doc.example.com/?q=%(message)s',
108
    },
105 109
)
106 110

  
107 111
# URL des tickets, possibilités:
vigiboard/controllers/plugins/details.py
78 78
        ).filter(CorrEvent.idcorrevent == idcorrevent
79 79
        ).first()
80 80

  
81
        context = {
82
            'idcorrevent': idcorrevent,
83
            'host': event.host,
84
            'service': event.service,
85
            'message': event.message,
86
        }
87

  
81 88
        eventdetails = {}
82 89
        for edname, edlink in enumerate(config['vigiboard_links.eventdetails']):
90
            # Évite que les gardes ne se polluent entre elles.
91
            local_ctx = context.copy()
83 92

  
84
            if event.service:
85
                service = urllib.quote(event.service)
86
            else:
87
                service = None
93
            # Les liens peuvent être conditionnés à l'aide
94
            # d'une expression ou d'un callable qui agira
95
            # comme un prédicat de test.
96
            if 'only_if' in edlink:
97
                if callable(edlink['only_if']):
98
                    display_link = edlink['only_if'](local_ctx)
99
                else:
100
                    display_link = edlink['only_if']
101
                if not display_link:
102
                    continue
88 103

  
89
            try:
90
                target = edlink[2]
91
            except IndexError:
92
                target = '_blank'
104
            if callable(edlink['uri']):
105
                uri = edlink['uri'](local_ctx)
93 106
            else:
94
                if not target:
95
                    target = '_blank'
107
                uri = edlink['uri'] % local_ctx
96 108

  
97 109
            eventdetails[unicode(edname)] = {
98
                'url': url(edlink[1]) % {
99
                    'idcorrevent': idcorrevent,
100
                    'host': urllib.quote(event.host),
101
                    'service': service,
102
                    'message': urllib.quote(event.message.encode('utf-8')),
103
                },
104
                'target': target
110
                'url': uri,
111
                'target': edlink.get('target', '_blank')
105 112
            }
106 113

  
107 114
        return dict(

Also available in: Unified diff