diff options
author | Mac Mollison <mollison@cs.unc.edu> | 2010-03-26 16:17:42 -0400 |
---|---|---|
committer | Mac Mollison <mollison@cs.unc.edu> | 2010-03-26 16:17:42 -0400 |
commit | 13b237b07c09942b6229c23a81f200b2565475ca (patch) | |
tree | 39a593b0c1fc6ce41fb23e7c60684e23f325eb7d /unit_trace | |
parent | d486ddadacd9e9308e64c251388ff262d4b2d198 (diff) |
Improve stats.py to show longest n inversions
Diffstat (limited to 'unit_trace')
-rw-r--r-- | unit_trace/stats.py | 34 | ||||
-rw-r--r-- | unit_trace/stdout_printer.py | 3 |
2 files changed, 36 insertions, 1 deletions
diff --git a/unit_trace/stats.py b/unit_trace/stats.py index 17c5fc9..4462ef1 100644 --- a/unit_trace/stats.py +++ b/unit_trace/stats.py | |||
@@ -8,11 +8,16 @@ | |||
8 | # Public Functions | 8 | # Public Functions |
9 | ############################################################################### | 9 | ############################################################################### |
10 | 10 | ||
11 | def stats(stream): | 11 | def stats(stream,num): |
12 | |||
13 | # State | ||
12 | min_inversion = -1 | 14 | min_inversion = -1 |
13 | max_inversion = -1 | 15 | max_inversion = -1 |
14 | sum_inversions = 0 | 16 | sum_inversions = 0 |
15 | num_inversions = 0 | 17 | num_inversions = 0 |
18 | longest_inversions = [] | ||
19 | |||
20 | # Iterate over records, updating state | ||
16 | for record in stream: | 21 | for record in stream: |
17 | if record.type_name == 'inversion_end': | 22 | if record.type_name == 'inversion_end': |
18 | length = record.job.inversion_end - record.job.inversion_start | 23 | length = record.job.inversion_end - record.job.inversion_start |
@@ -23,11 +28,29 @@ def stats(stream): | |||
23 | if length < min_inversion or min_inversion == -1: | 28 | if length < min_inversion or min_inversion == -1: |
24 | min_inversion = length | 29 | min_inversion = length |
25 | sum_inversions += length | 30 | sum_inversions += length |
31 | if len(longest_inversions) == num: | ||
32 | si = longest_inversions[0] | ||
33 | if length > (si.job.inversion_end - | ||
34 | si.job.inversion_start): | ||
35 | longest_inversions.append(record) | ||
36 | longest_inversions = _sort_longest_inversions( | ||
37 | longest_inversions) | ||
38 | del longest_inversions[0] | ||
39 | else: | ||
40 | longest_inversions.append(record) | ||
41 | longest_inversions = _sort_longest_inversions( | ||
42 | longest_inversions) | ||
43 | |||
26 | yield record | 44 | yield record |
45 | |||
46 | # We've seen all records. | ||
47 | # Further update state | ||
27 | if num_inversions > 0: | 48 | if num_inversions > 0: |
28 | avg_inversion = int(sum_inversions / num_inversions) | 49 | avg_inversion = int(sum_inversions / num_inversions) |
29 | else: | 50 | else: |
30 | avg_inversion = 0 | 51 | avg_inversion = 0 |
52 | |||
53 | # Produce a meta type record with all our information. | ||
31 | class Obj(object): pass | 54 | class Obj(object): pass |
32 | rec = Obj() | 55 | rec = Obj() |
33 | rec.record_type = "meta" | 56 | rec.record_type = "meta" |
@@ -36,4 +59,13 @@ def stats(stream): | |||
36 | rec.min_inversion = min_inversion | 59 | rec.min_inversion = min_inversion |
37 | rec.max_inversion = max_inversion | 60 | rec.max_inversion = max_inversion |
38 | rec.avg_inversion = avg_inversion | 61 | rec.avg_inversion = avg_inversion |
62 | longest_inversions = _sort_longest_inversions(longest_inversions) | ||
63 | rec.longest_inversions = longest_inversions | ||
39 | yield rec | 64 | yield rec |
65 | |||
66 | def _sort_longest_inversions(longest_inversions): | ||
67 | """ Sort longest inversions""" | ||
68 | def sortkey(x): | ||
69 | return x.job.inversion_end - x.job.inversion_start | ||
70 | longest_inversions.sort(key=sortkey) | ||
71 | return longest_inversions | ||
diff --git a/unit_trace/stdout_printer.py b/unit_trace/stdout_printer.py index a56acce..dd1e2bd 100644 --- a/unit_trace/stdout_printer.py +++ b/unit_trace/stdout_printer.py | |||
@@ -75,3 +75,6 @@ def _print_stats(record): | |||
75 | print "Min inversion: %d" % (record.min_inversion) | 75 | print "Min inversion: %d" % (record.min_inversion) |
76 | print "Max inversion: %d" % (record.max_inversion) | 76 | print "Max inversion: %d" % (record.max_inversion) |
77 | print "Avg inversion: %d" % (record.avg_inversion) | 77 | print "Avg inversion: %d" % (record.avg_inversion) |
78 | for inv in record.longest_inversions: | ||
79 | print "" | ||
80 | _print_inversion_end(inv) | ||