|
11 | 11 | log_regexp = re.compile('^I[0-9]+ ([0-9:.]+) .* (Running sync|Done syncing) for ([^ ]+) "([^"]+)" \(([0-9]+) of ([0-9]+)\)')
|
12 | 12 |
|
13 | 13 | resources = {}
|
14 |
| -reference_time = None |
| 14 | +reference_time = last_log = None |
15 | 15 | for line in sys.stdin.readlines():
|
16 | 16 | match = log_regexp.match(line)
|
17 | 17 | if not match:
|
|
20 | 20 | timestamp = datetime.datetime.strptime(time, '%H:%M:%S.%f')
|
21 | 21 | if reference_time is None:
|
22 | 22 | reference_time = timestamp
|
| 23 | + last_log = timestamp |
23 | 24 | if objType not in resources:
|
24 | 25 | resources[objType] = {}
|
25 | 26 | if name not in resources[objType]:
|
|
33 | 34 | time_ranges = []
|
34 | 35 | for objType, names in resources.items():
|
35 | 36 | for name, data in names.items():
|
36 |
| - if 'Done syncing' not in data: |
37 |
| - logging.warning('not finished: {} {}'.format(objType, name)) |
38 |
| - continue |
39 | 37 | start = (data['Running sync'] - reference_time).total_seconds()
|
40 |
| - stop = (data['Done syncing'] - reference_time).total_seconds() |
| 38 | + if 'Done syncing' in data: |
| 39 | + stop = (data['Done syncing'] - reference_time).total_seconds() |
| 40 | + else: |
| 41 | + stop = None |
| 42 | + logging.warning('not finished: {} {}'.format(objType, name)) |
41 | 43 | time_ranges.append((start, stop, objType, name, data))
|
42 | 44 |
|
43 | 45 | rectangles = []
|
44 | 46 | y = 0
|
45 | 47 | step = 4
|
46 | 48 | last_stop = 0
|
| 49 | +max_stop = (last_log - reference_time).total_seconds() |
47 | 50 | for start, stop, objType, name, data in sorted(time_ranges):
|
48 |
| - rectangles.append('<rect x="{}" y="{}" width="{}" height="{}" fill="blue"><title>{} {} {}/{} ({})</title></rect>'.format(start, y, stop - start, step, objType, name, data['index'], data['total'], data['Done syncing'] - data['Running sync'])) |
| 51 | + if stop is None: |
| 52 | + stop = max_stop |
| 53 | + data['Done syncing'] = last_log |
| 54 | + fill = 'red' |
| 55 | + else: |
| 56 | + fill = 'blue' |
| 57 | + rectangles.append('<rect x="{}" y="{}" width="{}" height="{}" fill="{}"><title>{} {} {}/{} ({})</title></rect>'.format(start, y, stop - start, step, fill, objType, name, data['index'], data['total'], data['Done syncing'] - data['Running sync'])) |
49 | 58 | y += step
|
50 | 59 | if stop > last_stop:
|
51 | 60 | last_stop = stop
|
|
0 commit comments