Exemplo n.º 1
0
    def fullHostPage(self, host, start=None, duration=86400):
        """
        Affichage de l'ensemble des graphes associes a un hote
        * d apres les donnees RRD
        * avec une date-heure de debut
        * pour une plage de temps

        @param host : hôte
        @type host : C{str}
        @param start : date-heure de debut des donnees
        @type start : C{str}
        @param duration : plage de temps des données. Parametre optionnel,
            initialisé a 86400 = plage de 1 jour.
        @type duration : C{str}

        @return: page avec les images des graphes et boutons de deplacement
            dans le temps
        @rtype: page html
        """
        if start is None:
            start = int(time.time()) - int(duration)
        else:
            start = int(start)
        duration = int(duration)

        user = get_current_user()
        if user is None:
            return dict(host=host, start=start, duration=duration,
                        presets=self.presets, graphs=[])

        # Vérification des permissions de l'utilisateur sur l'hôte.
        if not config.is_manager.is_met(request.environ):
            # Récupération des groupes auxquels l'utilisateur a accès.
            supitemgroups = [sig[0] for sig in user.supitemgroups() if sig[1]]

            # On vérifie que l'hôte en question existe bel et bien.
            host_obj = Host.by_host_name(host)
            if not host_obj:
                message = _('No such host "%s"') % host
                LOGGER.warning(message)
                raise http_exc.HTTPNotFound(message)

            # Récupération des groupes dont l'hôte fait partie
            hostgroups = [g.idgroup for g in host_obj.groups]
            # Si aucun des groupes de l'hôte ne fait partie des groupes
            # auxquels l'utilisateur a accès, on affiche une erreur 403.
            if len(set(hostgroups).intersection(set(supitemgroups))) < 1:
                message = _('Access denied to host "%s"') % host
                LOGGER.warning(message)
                raise http_exc.HTTPForbidden(message)

        # Récupération de la liste des noms des graphes associés à l'hôte.
        graphs = DBSession.query(
                Graph.name
            ).distinct(
            ).join(
                (GRAPH_PERFDATASOURCE_TABLE,
                    GRAPH_PERFDATASOURCE_TABLE.c.idgraph == Graph.idgraph),
                (PerfDataSource, PerfDataSource.idperfdatasource ==
                    GRAPH_PERFDATASOURCE_TABLE.c.idperfdatasource),
                (Host, Host.idhost == PerfDataSource.idhost),
            ).filter(Host.name == host)

        graphs = graphs.all()
        return dict(host=host, start=start, duration=duration,
                    presets=self.presets, graphs=graphs)
Exemplo n.º 2
0
 def test_export_hosts_db(self):
     self.hostloader.load()
     h = Host.by_host_name(u'testserver1')
     self.assertNotEqual(h, None)
     self.assertEqual(h.name, u'testserver1')
     self.assertEqual(h.address, u'192.168.1.1')