]> git.parisson.com Git - telemeta-data.git/commitdiff
migration: improve output
authorolivier <olivier@3bf09e05-f825-4182-b9bc-eedd7160adf0>
Tue, 7 Jul 2009 09:35:21 +0000 (09:35 +0000)
committerolivier <olivier@3bf09e05-f825-4182-b9bc-eedd7160adf0>
Tue, 7 Jul 2009 09:35:21 +0000 (09:35 +0000)
git-svn-id: http://svn.parisson.org/svn/crem@117 3bf09e05-f825-4182-b9bc-eedd7160adf0

trunk/import/migration/migrate.py
trunk/import/migration/tasks/core.py

index d2be87de0b743c2bcf08887b30e69fb283bd22ec..5e136949b4b4ead16db5e599afa05efaf86a2d79 100644 (file)
@@ -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()
 
index dd3dbdc8dad870a8ff3435248b6c5caa3e6a358c..2ec47eecf8e189445a26a5bf934eadaccea2f28f 100644 (file)
@@ -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()
+