tool for importing nightly isatest logs
authorkrauss
Mon, 18 Apr 2011 10:00:55 +0200
changeset 432550045b85101c9
parent 43254 d7b58dc35cc5
child 43256 c9bf3f8a8930
tool for importing nightly isatest logs
Admin/mira.py
     1.1 --- a/Admin/mira.py	Mon Apr 18 09:10:23 2011 +0200
     1.2 +++ b/Admin/mira.py	Mon Apr 18 10:00:55 2011 +0200
     1.3 @@ -6,10 +6,15 @@
     1.4  from os import path
     1.5  from glob import glob
     1.6  import subprocess
     1.7 +from datetime import datetime
     1.8  import re
     1.9  
    1.10  import util
    1.11 +from util import Lazy
    1.12  
    1.13 +from mira.report import Report, Report_Content
    1.14 +from mira.case import Case
    1.15 +from mira.tools import tool
    1.16  from mira import schedule
    1.17  from mira.environment import scheduler
    1.18  
    1.19 @@ -93,6 +98,37 @@
    1.20      return summary
    1.21  
    1.22  
    1.23 +@tool
    1.24 +def import_isatest_log(env, conf, logfile):
    1.25 +
    1.26 +    """Imports isatest log file as a report."""
    1.27 +
    1.28 +    def the_match(pat, text, name):
    1.29 +        match = re.search(pat, text)
    1.30 +        if not match: raise Exception('No match found for ' + name)
    1.31 +        return match.groups()
    1.32 +
    1.33 +    def parse_date(d):
    1.34 +        return datetime.strptime(d, '%a %b %d %H:%M:%S %Z %Y')
    1.35 +
    1.36 +    log = util.readfile(logfile)
    1.37 +
    1.38 +    (begin_date, host) = the_match(r'-+ starting test -+ ([^-]*) -+ (\S*)', log, 'start tag')
    1.39 +    (isabelle_version,) = the_match(r'Isabelle version: ([a-f0-9]{12})', log, 'Isabelle version')
    1.40 +    (success, end_date) = the_match(r'-+ test (successful|FAILED) -+ ([^-]*) -', log, 'end tag')
    1.41 +    summary = extract_isabelle_run_summary(log)
    1.42 +    data = {'timing': extract_isabelle_run_timing(log)}
    1.43 +    atts = {'log': Lazy.simple(log)}
    1.44 +
    1.45 +    content = Report_Content(summary, host, parse_date(begin_date),
    1.46 +      parse_date(end_date), Lazy.simple(data), atts)
    1.47 +    revision = ('Isabelle', env.repositories.get('Isabelle')[isabelle_version].hex())
    1.48 +    case = Case(conf, [revision])
    1.49 +
    1.50 +    env.report_db.put(case, (success == 'successful'), content)
    1.51 +
    1.52 +
    1.53 +
    1.54  def isabelle_usedir(env, isa_path, isabelle_usedir_opts, base_image, dir_name):
    1.55  
    1.56      return env.run_process('%s/bin/isabelle' % isa_path, 'usedir',