Revision 147b6daa
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
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