Project

General

Profile

Revision 915f3245

ID915f3245aeeb6333ec5232aa69b02f56e6e1d626
Parent 11a4231f
Child 5d0ab969

Added by Francois POIROTTE about 11 years ago

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 <>
Reviewed-by: Thomas BURGUIERE <>

View differences:

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