Revision 915f3245
Ouverture de tickets dans GLPI [#1148].
Effectue plusieurs changements dans l'API de VigiBoard afin de permettre
une intégration plus facile du ticketing de GLPI dans VigiBoard.
Le plugin permettant de faire l'ouverture à proprement parlé existe déjà
(réalisé dans le cadre d'un nouveau projet), même s'il n'est pas encore
présent dans le dépôt officiel de Vigilo.
Refs: #1148.
Change-Id: I198453f9c1acd5ee1e1adee91d3ff6e81fa59ee7
Reviewed-on: https://vigilo-dev.si.c-s.fr/review/1121
Tested-by: Build system <qa@vigilo-dev.si.c-s.fr>
Reviewed-by: Thomas BURGUIERE <thomas.burguiere@c-s.fr>
deployment/settings.ini.in | ||
---|---|---|
76 | 76 |
; 3 - Configuration de l'interface. |
77 | 77 |
; |
78 | 78 |
|
79 |
; Module additionnel utilisé pour la gestion des tickets. |
|
80 |
; Par défaut, aucun module additionnel n'est utilisé. |
|
81 |
; Se référrer à la documentation du module additionnel pour plus d'information |
|
82 |
; concernant les autres options de configuration utilisables par ce dernier. |
|
83 |
;tickets.plugin = identifiant_du_module |
|
84 |
|
|
79 | 85 |
; La langue par défaut de l'interface. |
80 | 86 |
lang = fr |
81 | 87 |
|
vigiboard/controllers/root.py | ||
---|---|---|
23 | 23 |
from datetime import datetime |
24 | 24 |
from time import mktime |
25 | 25 |
|
26 |
from pkg_resources import resource_filename |
|
26 |
from pkg_resources import resource_filename, working_set
|
|
27 | 27 |
|
28 | 28 |
from tg.exceptions import HTTPNotFound |
29 | 29 |
from tg import expose, validate, require, flash, url, \ |
... | ... | |
79 | 79 |
""" |
80 | 80 |
Le controller général de vigiboard |
81 | 81 |
""" |
82 |
_tickets = None |
|
83 |
|
|
82 | 84 |
error = ErrorController() |
83 | 85 |
autocomplete = AutoCompleteController() |
84 | 86 |
nagios = ProxyController('nagios', '/nagios/', |
... | ... | |
111 | 113 |
kwargs['errors'] = tmpl_context.form_errors |
112 | 114 |
return dict(kwargs) |
113 | 115 |
|
116 |
def __init__(self, *args, **kwargs): |
|
117 |
"""Initialisation du contrôleur.""" |
|
118 |
super(RootController, self).__init__(*args, **kwargs) |
|
119 |
# Si un module de gestion des tickets a été indiqué dans |
|
120 |
# le fichier de configuration, on tente de le charger. |
|
121 |
if config.get('tickets.plugin'): |
|
122 |
plugins = working_set.iter_entry_points('vigiboard.tickets', config['tickets.plugin']) |
|
123 |
if plugins: |
|
124 |
# La classe indiquée par la première valeur de l'itérateur |
|
125 |
# correspond au plugin que l'on veut instancier. |
|
126 |
pluginCls = plugins.next().load() |
|
127 |
self._tickets = pluginCls() |
|
128 |
|
|
114 | 129 |
class IndexSchema(schema.Schema): |
115 | 130 |
"""Schéma de validation de la méthode index.""" |
116 | 131 |
# Si on ne passe pas le paramètre "page" ou qu'on passe une valeur |
... | ... | |
544 | 559 |
|
545 | 560 |
user = get_current_user() |
546 | 561 |
events = VigiboardRequest(user) |
547 |
events.add_table(CorrEvent) |
|
562 |
events.add_table( |
|
563 |
CorrEvent, |
|
564 |
Event, |
|
565 |
events.items.c.hostname, |
|
566 |
events.items.c.servicename, |
|
567 |
) |
|
548 | 568 |
events.add_join((Event, CorrEvent.idcause == Event.idevent)) |
549 | 569 |
events.add_join((events.items, |
550 | 570 |
Event.idsupitem == events.items.c.idsupitem)) |
551 | 571 |
events.add_filter(CorrEvent.idcorrevent.in_(ids)) |
552 | 572 |
|
553 | 573 |
events.generate_request() |
554 |
idevents = [cause.idcause for cause in events.req]
|
|
574 |
idevents = [event[0].idcause for event in events.req]
|
|
555 | 575 |
|
556 | 576 |
# Si des changements sont survenus depuis que la |
557 | 577 |
# page est affichée, on en informe l'utilisateur. |
... | ... | |
580 | 600 |
flash(reason, 'error') |
581 | 601 |
raise redirect(request.environ.get('HTTP_REFERER', '/')) |
582 | 602 |
|
603 |
# Si un module de gestion de ticket est utilisé, |
|
604 |
# il a la possibilité de changer à la volée le libellé du ticket. |
|
605 |
if self._tickets: |
|
606 |
trouble_ticket = self._tickets.createTicket(events.req, trouble_ticket) |
|
607 |
|
|
583 | 608 |
# Définit 2 mappings dont les ensembles sont disjoincts |
584 | 609 |
# pour basculer entre la représentation en base de données |
585 | 610 |
# et la représentation "humaine" du bac à événements. |
... | ... | |
600 | 625 |
|
601 | 626 |
# Modification des événements et création d'un historique |
602 | 627 |
# chaque fois que cela est nécessaire. |
603 |
for event in events.req: |
|
628 |
for data in events.req: |
|
629 |
event = data[0] |
|
604 | 630 |
if trouble_ticket and trouble_ticket != event.trouble_ticket: |
605 | 631 |
history = EventHistory( |
606 | 632 |
type_action=u"Ticket change", |
Also available in: Unified diff