Exemplo n.º 1
0
    def test_exportCSV(self):
        '''Export des données au format CSV.'''
        server = 'testserver'
        graphtemplate = 'UpTime'
        indicator = 'All'
        # On se place à un emplacement du fichier
        # où l'on sait qu'il y a des données.
        start = 1232000000
        end = 1232010000

        csv_data = """
"Timestamp";"Date";"sysUpTime"
"1232000001";"January 15, 2009 6:13:21 AM +0000";"9658471.000000"
"1232001801";"January 15, 2009 6:43:21 AM +0000";"9660271.000000"
"1232003601";"January 15, 2009 7:13:21 AM +0000";"9662071.000000"
"1232005401";"January 15, 2009 7:43:21 AM +0000";"9663871.000000"
"1232007201";"January 15, 2009 8:13:21 AM +0000";"9665671.000000"
"""[1:]
        output = rrd.exportCSV(server, graphtemplate,
                        indicator, start, end, 0)

        # On compare l'export au résultat attendu.
        normalized_output = output.replace("\r\n", "\n")
        self.assertEqual(csv_data, normalized_output)
Exemplo n.º 2
0
    def export(self, host, graphtemplate, ds=None,
        start=None, end=None, timezone=None,
        nocache=None): # pylint: disable-msg=W0613
        '''
        export CSV

        # valeurs finales -> dictionnaire
        # - renseigné a partir dictionnaires obtenus pour chaque indicateur
        # - sous la forme :
        #   * cle = indice
        #   * valeur = [TimeStamp, donnee dictionnaire1 pour TimeStamp, ...,
        #     donnee dictionnaireN pour TimeStamp

        @param host: serveur
        @type  host: C{str}
        @param graphtemplate: graphe
        @type  graphtemplate: C{str}
        @param ds: indicateur graphe
        @type  ds: C{str}
        @param start: debut plage export
        @type  start: C{str}
        @param end: fin plage export
        @type  end: C{str}
        @param timezone: décalage en minutes entre l'heure UTC
            et l'heure dans le fuseau horaire de l'utilisateur
            (p.ex. 60 = UTC+01).
        @type  timezone: C{str}
        @param nocache: Valeur aléatoire (généralement un horodatage UNIX)
            destinée à empêcher la mise en cache du fichier exporté par le
            navigateur.
        @type  nocache: C{str}
        '''
        if not start:
            start = time.time() - 86400 # Par défaut: 24 heures avant
        start = int(start)
        now = int(time.time())

        try:
            timezone = int(timezone)
        except (ValueError, TypeError):
            # time.timezone utilise la notation POSIX dans laquelle
            # la direction du temps est inversée
            # (ie. UTC+01:00 = -3600 secondes).
            # Note: time.daylight indique juste que la timezone actuelle
            # supporte le changement d'heure DST, pas qu'il est actif,
            # il faut recourir à localtime() pour avoir cette information.
            if time.daylight and time.localtime().tm_isdst:
                timezone = -time.altzone / 60
            else:
                timezone = -time.timezone / 60

        if start >= now:
            raise HTTPNotFound('No data yet')
        if Host.by_name(host) is None:
            raise HTTPNotFound("No such host")
        if end is None:
            # one hour plus one second, start should be 1 sec in the past
            end = start + 3600 + 1
        else:
            end = int(end)
        if end > now:
            LOGGER.debug("exporting until %d instead of %d" % (now, end))
            end = now
        if ds:
            filename = rrd.getExportFileName(host, ds, start, end,
                                                timezone=timezone)
        else:
            filename = rrd.getExportFileName(host, graphtemplate, start, end,
                                                timezone=timezone)

        # Sans les 2 en-têtes suivants qui désactivent la mise en cache,
        # Internet Explorer refuse de télécharger le fichier CSV (cf. #961).
        response.headers['Pragma'] = 'public'           # Nécessaire pour IE.
        response.headers['Cache-Control'] = 'max-age=0' # Nécessaire pour IE.

        response.headers['Content-Type'] = 'text/csv'
        response.headers['Content-Disposition'] = \
                        'attachment;filename="%s"' % filename
        return rrd.exportCSV(host, graphtemplate, ds, start, end, timezone)