From e8447067492b8b11e6ccb38be6c013cf23c326e1 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Fri, 9 Oct 2015 23:29:52 +0300 Subject: Create summary page with jinja2 --- obbench | 123 ++++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 69 insertions(+), 54 deletions(-) (limited to 'obbench') diff --git a/obbench b/obbench index 5463c86..d2ec72f 100755 --- a/obbench +++ b/obbench @@ -25,9 +25,60 @@ import tempfile import time import cliapp +import jinja2 import yaml +summary_j2 = '''\ +{% autoescape true %} + + + Obnam benchmark: summary + + + +

Obnam benchmark: summary

+ +

Benchmark results

+ + + + + + + {% for name in benchmark_names %} + + {% endfor %} + + + {% for run in runs %} + + + + + + {% for name in benchmark_names %} + + {% endfor %} + + {% endfor %} + +
datecommitcommit msg{{ name }} (seconds)
(% of goal)
{{ run.date }}{{ run.commit_id }}{{ run.commit_msg }} + + {{ run.durations[name] }} + ({{ run.references[name] }}) +
+ +

Benchmark spec

+

{{ spec }}

+ + + + +{% endautoescape %} +''' + + class ObnamBenchmarker(cliapp.Application): def process_args(self, args): @@ -285,45 +336,10 @@ class ObnamBenchmarker(cliapp.Application): filename = os.path.join(spec['html_dir'], 'index.html') with open(filename, 'w') as f: - f.write('\n') - - f.write('\n') - f.write('Obnam benchmark: summary\n') - f.write('\n') - f.write('\n') - - f.write('\n') - f.write('

Obnam benchmark: summary

\n') - - f.write('

Benchmark results

\n') - f.write('\n') - f.write('\n') - f.write('\n') - f.write('\n') - f.write('\n') - for name in benchmark_names: - f.write('\n'.format(name=self.q(name))) - f.write('\n') - for run in runs: - f.write('\n') - f.write( - '\n'.format( - date=self.q(run['date']))) - f.write( - '\n'.format( - commit=self.q(run['commit_id']))) - f.write('\n'.format( - msg=self.q(run['commit_msg']))) - + run['links'] = {} + run['references'] = {} for name in benchmark_names: - link = '{commit}_{name}.html'.format( - commit=self.q(run['commit_id']), - name=self.q(name)) - duration = '%.1f' % run['durations'][name] - reference = sum( sum(x.get('reference', 0) for x in b['steps']) for b in spec['benchmarks'] @@ -333,27 +349,26 @@ class ObnamBenchmarker(cliapp.Application): 100.0 * run['durations'][name] / reference) else: reference = 'unknown' + run['references'][name] = reference - f.write( - '\n'.format( - link=link, - duration=self.q(duration), - reference=reference)) - f.write('\n') + run['links'][name] = '{commit}_{name}.html'.format( + commit=self.q(run['commit_id']), + name=self.q(name)) + run['durations'][name] = '%.1f' % run['durations'][name] - f.write('
datecommitcommit msg{name} (seconds)' - '
(% of goal)
{date}{commit}{msg}' - '{duration} ' - '({reference})
\n') + vars = { + 'benchmark_names': benchmark_names, + 'runs': runs, + 'spec': yaml.safe_dump( + spec, default_flow_style=False, indent=4), + } - f.write('

Benchmark spec

\n') - f.write('

')
-            f.write(
-                self.q(
-                    yaml.safe_dump(spec, default_flow_style=False, indent=4)))
-            f.write('

\n') + env = jinja2.Environment( + autoescape=lambda foo: True, + extensions=['jinja2.ext.autoescape']) + template = env.from_string(summary_j2) + f.write(template.render(**vars)) - f.write('\n') - f.write('\n') def find_benchmark_names(self, objs): return list(sorted(set(o['name'] for o in objs))) -- cgit v1.2.1