github-ci-crawller/CiJobTestsParser.py

114 lines
3.9 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import numpy as np
from numpy import *
import csv
import re
import MySQLdb
import os
logging.basicConfig(format="%(asctime)s : %(levelname)s : %(message)s", level=logging.INFO)
def ScanFiles(directory,prefix=None,postfix=None):
files_list=[]
for root, sub_dirs, files in os.walk(directory):
for special_file in files:
if postfix:
if special_file.endswith(postfix):
files_list.append(int(special_file[:-4]))
elif prefix:
if special_file.startswith(prefix):
files_list.append(os.path.join(root,special_file))
else:
files_list.append(os.path.join(root,special_file))
return files_list
##################
##parse job test##
##################
def ParseTest(rule,content):
values = []
for value in re.findall(rule,content):
values.append(value)
return values
def ParseJobTests(infile_path,repo_id,job_id,builds_id,cur):
try:
input_file = open("%s//%d//%d.txt"%(infile_path,repo_id,job_id),'rb')
job_content = input_file.read()
except IOError, e:
print "Mysql Error!", e;
#parse rule
running_command_rule = re.compile(r"Running command:([\s\S]+?)Run options")
running_command_rule_1 = re.compile(r"skips([\s\S]+?)Run options")
running_rule = re.compile(r"Running:([\s\S]+?)Finished")
run_option_seed_rule = re.compile(r"Run options: --seed ([0-9]+)")
finished_time_rule = re.compile(r"Finished in ([0-9.]+)s,")
runs_time_rule = re.compile(r"([0-9.]+) runs/s,")
assertions_time_rule = re.compile(r"([0-9.]+) assertions/s.")
runs_count_rule = re.compile(r"([0-9]+) runs,")
assertions_count_rule = re.compile(r"([0-9]+) assertions,")
failures_count_rule = re.compile(r"([0-9]+) failures,")
errors_count_rule = re.compile(r"([0-9]+) errors,")
skips_count_rule = re.compile(r"([0-9]+) skips")
#test data
running_command = []
try:
running_command.append(re.search(running_command_rule,job_content).group().replace("\"",""))
except AttributeError:
return
for running_command_t in re.findall(running_command_rule_1,job_content):
running_command.append(running_command_t.replace("\"",""))
running = ParseTest(running_rule,job_content)
run_option_seed = ParseTest(run_option_seed_rule,job_content)
finished_time = ParseTest(finished_time_rule,job_content)
runs_time = ParseTest(runs_time_rule,job_content)
assertions_time = ParseTest(assertions_time_rule,job_content)
runs_count = ParseTest(runs_count_rule,job_content)
assertions_count = ParseTest(assertions_count_rule,job_content)
failures_count = ParseTest(failures_count_rule,job_content)
errors_count = ParseTest(errors_count_rule,job_content)
skips_count = ParseTest(skips_count_rule,job_content)
print len(running_command)
#print len(running)
#print len(run_option_seed)
#print len(finished_time)
#print len(runs_time)
#print len(assertions_time)
#print len(runs_count)
#print len(assertions_count)
#print len(failures_count)
#print len(errors_count)
#print len(skips_count)
for i in range(0,len(runs_time)):
print "test id:"+str(i)
try:
query = "insert into ci_jobs_tests_yu (repo_id,builds_id,job_id,test_id,running_command,run_options,running,finished_time," \
"runs_time,assertions_time,runs_count,assertions_count,failures_count,errors_count,skips_count) " \
"values(%s,%s,%s,%s,\"%s\",%s,\"%s\",%s,%s,%s,%s,%s,%s,%s,%s)"%(repo_id,builds_id,job_id,i,running_command[i],
run_option_seed[i],running[i].replace("\"",""),finished_time[i],runs_time[i],assertions_time[i],runs_count[i],assertions_count[i],failures_count[i],
errors_count[i],skips_count[i])
cur.execute(query)
except IndexError, e:
return
##main###
#job_id=35469369
conn = MySQLdb.connect(host='localhost',user='root',passwd='',db='ci')
cur = conn.cursor()
repo_id = 1334
infile_path = "E://Young//CI//result//jobs_yu"
jobs_list = ScanFiles(infile_path,prefix=None,postfix=".txt")
for job_id in jobs_list:
GetParseJobTests(infile_path,repo_id,data[0],data[1],cur)
cur.close()
conn.close()