コード例 #1
0
ファイル: test_retry.py プロジェクト: gjn/tilegenerator
    def test_dump_load(self):
        service = tilecache_service()
        raster = service.layers.get("valid-raster")

        in_tiles = [_ for _ in grid(raster, bbox=[655000,194000,672500,206000], levels=(19,20))]
        f = StringIO()
        dump(raster, in_tiles, f)
        f.seek(0)
        out_layername, out_tiles = load(f, service)
        f.close()

        assert out_layername == raster.name
        assert out_tiles == in_tiles
コード例 #2
0
ファイル: manager.py プロジェクト: gjn/tilegenerator
    def send_notification_email(self):
        attachements = []
        body_text = "started at: %s\n" % (datetime.fromtimestamp(int(self.started_at)))
        body_text += "ended at: %s\n" % (datetime.fromtimestamp(int(self.stopped_at)))

        times_stats = "%d threads have generate %d tiles in %s (%.1f tiles/s)"
        times_stats %= (
            self.poolsize,
            self.success_count,
            timedelta(seconds=int(self.stopped_at - self.started_at)),
            self.success_count / (self.stopped_at - self.started_at),
        )
        logger.info(times_stats)
        body_text += times_stats + "\n"

        if self.success_count > 0:
            times_stats = "average time: render = %.3fs, post-proc = %.3fs, save = %.3fs"
            times_stats %= (
                self.duration["render"] / self.success_count,
                self.duration["post-proc"] / self.success_count,
                self.duration["save"] / self.success_count,
            )
            logger.info(times_stats)
            body_text += times_stats + "\n\n"

        body_text += "Uses metatiling: %s\n" % (self.layer.metaTile)
        body_text += "WMTS dimension: %s\n" % (self.layer.metadata.get("dimension", "n/a"))
        body_text += "WMTS matrix set: %s\n" % (self.layer.metadata.get("matrix_set", "n/a"))
        body_text += "bounding box: %s\n" % (str(self.bbox))
        body_text += "levels: %s\n" % (str(self.levels))

        if len(self.failures) or self.fatal:
            logger.info("errors saved to %s" % self.error_logs.name)
            if not self.fatal:
                tiles = os.path.join(self.error_dir, self.layer.name + "." + str(int(time.time())) + ".retry")
                logger.info("retry file saved to %s" % tiles)

                # dump(self.layer, [item.get("item") for item in self.failures], open(tiles, 'w'))
                dump(self.layer, self.failures, open(tiles, "w"))
                attachements.append(tiles)

            subject = self.metadata.get("mail_subject_error", "error while generating layer '%layer' on host '%host'")
            # fixme: display cmd line to retry
            body_text += "\n\nErrors list:\n\n%s" % open(self.error_logs.name).read()
        else:
            subject = self.metadata.get(
                "mail_subject_success", "all tiles generated for layer '%layer' on host '%host'"
            )
            body_text += "\n\nWithout any errors!"
        if self.metadata.get("mail_to"):
            mail_to = [mail.strip() for mail in self.metadata.get("mail_to").split(",")]
            send_email(
                to=mail_to,
                sender=self.metadata.get("mail_from", "*****@*****.**"),
                subject=subject.replace("%layer", self.layer.name).replace("%host", gethostname()),
                body_text=body_text,
                files=attachements,
                server=self.metadata.get("mail_server_host", "localhost"),
                port=int(self.metadata.get("mail_server_port", "25")),
            )
            logger.info("notification e-mail sent to %s" % mail_to)
        else:
            logger.warning("no 'mail_to' option found. no e-mail sent.")