Admin/mira.py
changeset 42392 0045b85101c9
parent 42197 5f311600ba26
child 42393 c9bf3f8a8930
equal deleted inserted replaced
42391:d7b58dc35cc5 42392:0045b85101c9
     4 
     4 
     5 import os
     5 import os
     6 from os import path
     6 from os import path
     7 from glob import glob
     7 from glob import glob
     8 import subprocess
     8 import subprocess
       
     9 from datetime import datetime
     9 import re
    10 import re
    10 
    11 
    11 import util
    12 import util
    12 
    13 from util import Lazy
       
    14 
       
    15 from mira.report import Report, Report_Content
       
    16 from mira.case import Case
       
    17 from mira.tools import tool
    13 from mira import schedule
    18 from mira import schedule
    14 from mira.environment import scheduler
    19 from mira.environment import scheduler
    15 
    20 
    16 
    21 
    17 # build and evaluation tools
    22 # build and evaluation tools
    89     summary = '\n'.join(re_error.findall(logdata))
    94     summary = '\n'.join(re_error.findall(logdata))
    90     if summary == '':
    95     if summary == '':
    91         summary = 'ok'
    96         summary = 'ok'
    92 
    97 
    93     return summary
    98     return summary
       
    99 
       
   100 
       
   101 @tool
       
   102 def import_isatest_log(env, conf, logfile):
       
   103 
       
   104     """Imports isatest log file as a report."""
       
   105 
       
   106     def the_match(pat, text, name):
       
   107         match = re.search(pat, text)
       
   108         if not match: raise Exception('No match found for ' + name)
       
   109         return match.groups()
       
   110 
       
   111     def parse_date(d):
       
   112         return datetime.strptime(d, '%a %b %d %H:%M:%S %Z %Y')
       
   113 
       
   114     log = util.readfile(logfile)
       
   115 
       
   116     (begin_date, host) = the_match(r'-+ starting test -+ ([^-]*) -+ (\S*)', log, 'start tag')
       
   117     (isabelle_version,) = the_match(r'Isabelle version: ([a-f0-9]{12})', log, 'Isabelle version')
       
   118     (success, end_date) = the_match(r'-+ test (successful|FAILED) -+ ([^-]*) -', log, 'end tag')
       
   119     summary = extract_isabelle_run_summary(log)
       
   120     data = {'timing': extract_isabelle_run_timing(log)}
       
   121     atts = {'log': Lazy.simple(log)}
       
   122 
       
   123     content = Report_Content(summary, host, parse_date(begin_date),
       
   124       parse_date(end_date), Lazy.simple(data), atts)
       
   125     revision = ('Isabelle', env.repositories.get('Isabelle')[isabelle_version].hex())
       
   126     case = Case(conf, [revision])
       
   127 
       
   128     env.report_db.put(case, (success == 'successful'), content)
       
   129 
    94 
   130 
    95 
   131 
    96 def isabelle_usedir(env, isa_path, isabelle_usedir_opts, base_image, dir_name):
   132 def isabelle_usedir(env, isa_path, isabelle_usedir_opts, base_image, dir_name):
    97 
   133 
    98     return env.run_process('%s/bin/isabelle' % isa_path, 'usedir',
   134     return env.run_process('%s/bin/isabelle' % isa_path, 'usedir',