changeset 692:c11a4339fccb

bake: Show more stats.
author Ludovic Chabant <ludovic@chabant.com>
date Mon, 21 Mar 2016 22:29:18 -0700
parents 9ae9390192da
children d2a87365b85b
files piecrust/commands/builtin/baking.py
diffstat 1 files changed, 30 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/commands/builtin/baking.py	Mon Mar 21 22:28:57 2016 -0700
+++ b/piecrust/commands/builtin/baking.py	Mon Mar 21 22:29:18 2016 -0700
@@ -128,28 +128,29 @@
         target[name].mergeStats(val)
 
 
-def _show_stats(stats, full=False):
+def _show_stats(stats, *, full=False):
     indent = '    '
     for name in sorted(stats.keys()):
         logger.info('%s:' % name)
         s = stats[name]
 
         logger.info('  Timers:')
-        for name, val in s.timers.items():
-            val_str = '%8.1f s' % val
+        for name in sorted(s.timers.keys()):
+            val_str = '%8.1f s' % s.timers[name]
             logger.info(
                     "%s[%s%s%s] %s" %
                     (indent, Fore.GREEN, val_str, Fore.RESET, name))
 
         logger.info('  Counters:')
-        for name, val in s.counters.items():
-            val_str = '%8d  ' % val
+        for name in sorted(s.counters.keys()):
+            val_str = '%8d  ' % s.counters[name]
             logger.info(
                     "%s[%s%s%s] %s" %
                     (indent, Fore.GREEN, val_str, Fore.RESET, name))
 
         logger.info('  Manifests:')
-        for name, val in s.manifests.items():
+        for name in sorted(s.manifests.keys()):
+            val = s.manifests[name]
             logger.info(
                     "%s[%s%s%s] [%d entries]" %
                     (indent, Fore.CYAN, name, Fore.RESET, len(val)))
@@ -193,6 +194,10 @@
                 '--assets-only',
                 action='store_true',
                 help="Only show records for assets (not from pages).")
+        parser.add_argument(
+                '--show-stats',
+                action='store_true',
+                help="Show stats from the record.")
 
     def run(self, ctx):
         out_dir = ctx.args.output or os.path.join(ctx.app.root_dir, '_counter')
@@ -208,10 +213,22 @@
         if ctx.args.out:
             out_pattern = '*%s*' % ctx.args.out.strip('*')
 
+        bake_rec = None
         if not ctx.args.assets_only:
-            self._showBakeRecord(ctx, record_name, pattern, out_pattern)
+            bake_rec = self._showBakeRecord(
+                    ctx, record_name, pattern, out_pattern)
+        proc_rec = None
         if not ctx.args.html_only:
-            self._showProcessingRecord(ctx, record_name, pattern, out_pattern)
+            proc_rec = self._showProcessingRecord(
+                    ctx, record_name, pattern, out_pattern)
+
+        if ctx.args.show_stats:
+            stats = {}
+            if bake_rec:
+                _merge_stats(bake_rec.stats, stats)
+            if proc_rec:
+                _merge_stats(proc_rec.stats, stats)
+            _show_stats(stats, full=True)
 
     def _showBakeRecord(self, ctx, record_name, pattern, out_pattern):
         # Show the bake record.
@@ -288,7 +305,7 @@
                             PASS_FORMATTING: 'formatting pass',
                             PASS_RENDERING: 'rendering pass'}
                     for p, ri in sub.render_info.items():
-                        logging.info("     - %s" % p)
+                        logging.info("     - %s" % pass_names[p])
                         logging.info("       used sources:  %s" %
                                      _join(ri.used_source_names))
                         pgn_info = 'no'
@@ -310,6 +327,8 @@
                 if sub.errors:
                     logging.error("   errors: %s" % sub.errors)
 
+        return record
+
     def _showProcessingRecord(self, ctx, record_name, pattern, out_pattern):
         record_cache = ctx.app.cache.getCache('proc')
         if not record_cache.has(record_name):
@@ -354,6 +373,8 @@
             if entry.errors:
                 logger.error("   errors: %s" % entry.errors)
 
+        return record
+
 
 def _join(items, sep=', ', text_if_none='none'):
     if items: