| | |
| | 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]) |
| |
|