From 3bd9ea49878c195e5239a99a531fa2c3db67e9d3 Mon Sep 17 00:00:00 2001 From: olivier Date: Tue, 7 Jul 2009 09:35:21 +0000 Subject: [PATCH] migration: improve output git-svn-id: http://svn.parisson.org/svn/crem@117 3bf09e05-f825-4182-b9bc-eedd7160adf0 --- trunk/import/migration/migrate.py | 5 ++-- trunk/import/migration/tasks/core.py | 44 +++++++++++++++++++++++----- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/trunk/import/migration/migrate.py b/trunk/import/migration/migrate.py index d2be87d..5e13694 100644 --- a/trunk/import/migration/migrate.py +++ b/trunk/import/migration/migrate.py @@ -92,16 +92,17 @@ class MigrationManager(Component): passwd = self.cfg.get('target', 'pass'), charset = 'utf8') - self.logger = Logger(self.cfg.get('report', 'filename')) - def run(self, only_task = None): """Run all tasks or a single one identified by its name with only_task""" + self.logger = Logger(self.cfg.get('report', 'filename')) self.done = [] try: self.done.extend(self.run_tasks(self.initializers, "initializer", only_task = only_task)) self.done.extend(self.run_tasks(self.migrators, "migrator", only_task = only_task)) if only_task and not len(self.done): raise "No such task: %s" % only_task + else: + self.logger.terminate() except KeyboardInterrupt: self.logger.interrupt() diff --git a/trunk/import/migration/tasks/core.py b/trunk/import/migration/tasks/core.py index dd3dbdc..2ec47ee 100644 --- a/trunk/import/migration/tasks/core.py +++ b/trunk/import/migration/tasks/core.py @@ -38,6 +38,8 @@ from sys import stdout import time import warnings import _mysql_exceptions +import subprocess + class DataMigrationTask(Component): def setup(self, cfg, src_db, target_db, logger): @@ -239,6 +241,22 @@ class Logger(object): def __init__(self, report_filename = None): self.report_filename = report_filename + self.version = subprocess.Popen(["svnversion"], stdout=subprocess.PIPE).communicate()[0].strip() + self.appname = "CREM Database Migrator r%s" % self.version + self.run_start_time = time.time() + s = "%s starting on %s" % (self.appname, time.strftime("%Y-%m-%d %H:%M:%S")) + self.color(s + "\n") + self.sep = "" + for i in range(0,len(s)): + self.sep += "~" + self.color3("%s\n" % self.sep) + if self.report_filename: + self.report_file = open(self.report_filename, "a") + self.report_file.write("========================================================================\n") + self.report_file.write("%s\n" % s) + self.report_file.close() + else: + self.report_file = None def warn(self, message): self.warnings.append(message) @@ -264,10 +282,10 @@ class Logger(object): self.color(msg, self.CRED) def print_progress(self, ratio, end = False): - msg = "Running %s %s..." % (self.task.get_name(), self.task.get_type()) + msg = "* Running %s %s..." % (self.task.get_name(), self.task.get_type()) msg = "%-46s" % msg - barwidth = 10 + barwidth = 18 p = "" r = int(round(ratio * barwidth)) for i in range(0, r): @@ -276,17 +294,17 @@ class Logger(object): p += ' ' self.color1("\r" + msg) - self.color2(" [%s] %d%%" % (p, ratio * 100)) + self.color1(" [%s] %d%%" % (p, ratio * 100)) if end: - self.color2(" (%.2fs)" % (time.time() - self.start_time)) + self.color1(" (%.2fs)" % (time.time() - self.start_time)) - self.color("\n%s" % self.task.__doc__) + self.color("\n %s" % self.task.__doc__) #self.color3(" warnings: %d" % len(self.warnings)) stats = self.task.get_stats() if len(self.warnings): stats['warnings'] = len(self.warnings) if stats: - stdout.write("\n%s" % self.fmt_stats(stats)) + stdout.write("\n %s" % self.fmt_stats(stats)) stdout.write("\n") if not end: stdout.write(self.CREVERSENL + self.CREVERSENL) @@ -331,7 +349,7 @@ class Logger(object): def fmt_stats(self, stats, colors = True): if colors: - fmt = [k + ": " + self.CBOLD + self.CRED + str(stats[k]) + self.CDEFAULT for k in stats] + fmt = [k + ": " + self.CBOLD + self.CCYAN + str(stats[k]) + self.CDEFAULT for k in stats] else: fmt = [k + ": " + str(stats[k]) for k in stats] @@ -357,6 +375,7 @@ class Logger(object): self.print_progress(1, True) if self.report_file: self.write_report(self.report_file) + self.report_file.close() self.need_newline = False self.task = None @@ -372,3 +391,14 @@ class Logger(object): stdout.write(self.CRESET) + def terminate(self): + self.color3(self.sep + "\n") + runtime = "%.2fs" % (time.time() - self.run_start_time) + s = "Done. Total runtime: %s\n" % runtime + self.color(s) + if self.report_filename: + self.report_file = open(self.report_filename, "a") + self.report_file.write("========================================================================\n") + self.report_file.write("%s\n" % s) + self.report_file.close() + -- 2.39.5