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