Skip to content

Commit 984ab38

Browse files
committed
Redo options handling, fix timeout parsing
1 parent 7e894c0 commit 984ab38

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

clography.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
1010
import systemlog
1111

1212
try:
13-
(options, arguments) = getopt(sys.argv[1:], 'i:s:etu',
14-
['interval', 'scale', 'events', 'events-only', 'show-unknown'])
13+
# I am bad at picking single-letter switches, and feel bad
14+
(options, arguments) = getopt(sys.argv[1:], 'i:s:eturm:',
15+
['interval', 'scale', 'events', 'events-only', 'show-unknown', 'sort', 'min-size'])
1516
except GetoptError, error:
1617
sys.stderr.write('%s\n' % str(error))
1718
sys.exit(1)
@@ -24,6 +25,9 @@
2425
allevents = False
2526
eventsonly = False
2627
unknowns = False
28+
sort = False
29+
minsize = 0
30+
2731
for opt, arg in options:
2832
if opt in ('-i', '--interval'):
2933
interval = int(arg)
@@ -35,15 +39,19 @@
3539
eventsonly = True
3640
if opt in ('-u', '--show-unknown'):
3741
unknowns = True
42+
if opt in ('-r', '--sort'):
43+
sort = True
44+
if opt in ('-m', '--min-size'):
45+
minsize = int(arg)
3846

3947
if arguments:
4048
log = fileinput.input(arguments[0])
4149
else:
4250
log = fileinput.input()
4351

44-
stages = {}
45-
data = defaultdict(lambda: defaultdict(int))
52+
stages = defaultdict(int)
4653
enum = 0
54+
data = defaultdict(lambda: defaultdict(int))
4755
for event in systemlog.parse_log(log):
4856
stage = event['thread_name'] + ' ' + event['source_file']
4957
if stage[0:3].isupper() or event['thread_name'] == 'main': # skip rmi, handshaking, streams, etc
@@ -60,14 +68,15 @@
6068
else:
6169
stage = event['event_category'] + ' ' +event['event_type']
6270

63-
if stage not in stages:
71+
if not stage in stages and not sort:
6472
stages[stage] = enum
6573
enum += 1
74+
6675
ts = int(event['date'].strftime('%s')) / interval
6776
if event['event_type'] == 'pause':
6877
data[ts][stage] += event['duration'] / 1000
6978
elif event['event_type'] == 'messages_dropped':
70-
if 'internal_timeout' in event:
79+
if 'internal_timeout' in event and event['internal_timeout'] != None:
7180
data[ts][stage] += event['internal_timeout'] + event['cross_node_timeout']
7281
else:
7382
data[ts][stage] += event['messages_dropped']
@@ -82,6 +91,12 @@
8291
else:
8392
data[ts][stage] += 1
8493

94+
if sort:
95+
enum = 0
96+
for stage in reversed(sorted(stages.keys())):
97+
stages[stage] = enum
98+
enum += 1
99+
size=max(stages[stage]*scale, minsize)
85100
fig, ax = plt.subplots()
86101
colors = cm.rainbow(np.linspace(0, 1, len(stages)))
87102
for ts, info in data.iteritems():

0 commit comments

Comments
 (0)