|
|
|
|
|
import datetime |
|
|
import os |
|
|
import sys |
|
|
|
|
|
def extract_datetime_from_line(line, year): |
|
|
|
|
|
line = line.strip().split() |
|
|
month = int(line[0][1:3]) |
|
|
day = int(line[0][3:]) |
|
|
timestamp = line[1] |
|
|
pos = timestamp.rfind('.') |
|
|
ts = [int(x) for x in timestamp[:pos].split(':')] |
|
|
hour = ts[0] |
|
|
minute = ts[1] |
|
|
second = ts[2] |
|
|
microsecond = int(timestamp[pos + 1:]) |
|
|
dt = datetime.datetime(year, month, day, hour, minute, second, microsecond) |
|
|
return dt |
|
|
|
|
|
|
|
|
def get_log_created_year(input_file): |
|
|
"""Get year from log file system timestamp |
|
|
""" |
|
|
|
|
|
log_created_time = os.path.getctime(input_file) |
|
|
log_created_year = datetime.datetime.fromtimestamp(log_created_time).year |
|
|
return log_created_year |
|
|
|
|
|
|
|
|
def get_start_time(line_iterable, year): |
|
|
"""Find start time from group of lines |
|
|
""" |
|
|
|
|
|
start_datetime = None |
|
|
for line in line_iterable: |
|
|
line = line.strip() |
|
|
if line.find('Solving') != -1: |
|
|
start_datetime = extract_datetime_from_line(line, year) |
|
|
break |
|
|
return start_datetime |
|
|
|
|
|
|
|
|
def extract_seconds(input_file, output_file): |
|
|
with open(input_file, 'r') as f: |
|
|
lines = f.readlines() |
|
|
log_created_year = get_log_created_year(input_file) |
|
|
start_datetime = get_start_time(lines, log_created_year) |
|
|
assert start_datetime, 'Start time not found' |
|
|
|
|
|
last_dt = start_datetime |
|
|
out = open(output_file, 'w') |
|
|
for line in lines: |
|
|
line = line.strip() |
|
|
if line.find('Iteration') != -1: |
|
|
dt = extract_datetime_from_line(line, log_created_year) |
|
|
|
|
|
|
|
|
if dt.month < last_dt.month: |
|
|
log_created_year += 1 |
|
|
dt = extract_datetime_from_line(line, log_created_year) |
|
|
last_dt = dt |
|
|
|
|
|
elapsed_seconds = (dt - start_datetime).total_seconds() |
|
|
out.write('%f\n' % elapsed_seconds) |
|
|
out.close() |
|
|
|
|
|
if __name__ == '__main__': |
|
|
if len(sys.argv) < 3: |
|
|
print('Usage: ./extract_seconds input_file output_file') |
|
|
exit(1) |
|
|
extract_seconds(sys.argv[1], sys.argv[2]) |
|
|
|