def event(self, idevent, page): """ Affichage de l'historique d'un événement brut. Pour accéder à cette page, l'utilisateur doit être authentifié. @param idevent: identifiant de l'événement brut souhaité. @type idevent: C{int} @param page: numéro de la page à afficher. @type page: C{int} Cette méthode permet de satisfaire l'exigence VIGILO_EXIG_VIGILO_BAC_0080. """ # Auto-supervision self.get_failures() user = get_current_user() events = VigiboardRequest(user, False) events.add_table( Event, events.items.c.hostname.label('hostname'), events.items.c.servicename.label('servicename'), ) events.add_join((EVENTSAGGREGATE_TABLE, \ EVENTSAGGREGATE_TABLE.c.idevent == Event.idevent)) events.add_join((CorrEvent, CorrEvent.idcorrevent == \ EVENTSAGGREGATE_TABLE.c.idcorrevent)) events.add_join((events.items, Event.idsupitem == events.items.c.idsupitem)) events.add_filter(Event.idevent == idevent) if events.num_rows() != 1: flash(_('No such event or access denied'), 'error') redirect('/') events.format_events(0, 1) events.generate_tmpl_context() history = events.format_history() # Pagination des résultats items_per_page = int(session.get('items_per_page', config['vigiboard_items_per_page'])) page = paginate.Page(history, page=page, items_per_page=items_per_page) event = events.req[0] return dict( idevent = idevent, hostname = event.hostname, servicename = event.servicename, plugins_data = {}, page = page, search_form = create_search_form, search = {}, fixed_search = {}, )
def update(self, id, last_modification, trouble_ticket, ack): """ Mise à jour d'un événement suivant les arguments passés. Cela peut être un changement de ticket ou un changement de statut. @param id: Le ou les identifiants des événements à traiter @param last_modification: La date de la dernière modification dont l'utilisateur est au courant. @param trouble_ticket: Nouveau numéro du ticket associé. @param ack: Nouvel état d'acquittement des événements sélectionnés. Cette méthode permet de satisfaire les exigences suivantes : - VIGILO_EXIG_VIGILO_BAC_0020, - VIGILO_EXIG_VIGILO_BAC_0060, - VIGILO_EXIG_VIGILO_BAC_0110. """ # On vérifie que des identifiants ont bien été transmis via # le formulaire, et on informe l'utilisateur le cas échéant. if id is None: flash(_('No event has been selected'), 'warning') raise redirect(request.environ.get('HTTP_REFERER', '/')) # On récupère la liste de tous les identifiants des événements # à mettre à jour. ids = [ int(i) for i in id.strip(',').split(',') ] user = get_current_user() events = VigiboardRequest(user) events.add_table( CorrEvent, Event, events.items.c.hostname, events.items.c.servicename, ) events.add_join((Event, CorrEvent.idcause == Event.idevent)) events.add_join((events.items, Event.idsupitem == events.items.c.idsupitem)) events.add_filter(CorrEvent.idcorrevent.in_(ids)) events.generate_request() idevents = [event[0].idcause for event in events.req] # Si des changements sont survenus depuis que la # page est affichée, on en informe l'utilisateur. last_modification = datetime.fromtimestamp(last_modification) cur_last_modification = get_last_modification_timestamp(idevents, None) if cur_last_modification and last_modification < cur_last_modification: flash(_('Changes have occurred since the page was last displayed, ' 'your changes HAVE NOT been saved.'), 'warning') raise redirect(request.environ.get('HTTP_REFERER', '/')) # Vérification que au moins un des identifiants existe et est éditable if not events.num_rows(): flash(_('No access to this event'), 'error') redirect('/') if ack == u'Forced': condition = Any( config.is_manager, has_permission('vigiboard-admin'), msg=l_("You don't have administrative access " "to VigiBoard")) try: condition.check_authorization(request.environ) except NotAuthorizedError, e: reason = unicode(e) flash(reason, 'error') raise redirect(request.environ.get('HTTP_REFERER', '/'))