1
2 """
3 StarCluster SunGrinEngine stats visualizer module
4 """
5 import os
6 import numpy as np
7 from datetime import datetime
8 import matplotlib.pyplot as plt
9
10 from starcluster.logger import log
11
12
14 """
15 Stats Visualizer for SGE Load Balancer
16 stats_file - file containing SGE load balancer stats
17 pngpath - directory to dump the stat plots to
18 """
19 - def __init__(self, stats_file, pngpath):
20 self.pngpath = pngpath
21 self.stats_file = stats_file
22 self.records = None
23
25 list = []
26 file = open(self.stats_file, 'r')
27 for line in file:
28 parts = line.rstrip().split(',')
29 a = [datetime.strptime(parts[0], '%Y-%m-%d %H:%M:%S.%f'),
30 int(parts[1]), int(parts[2]), int(parts[3]), int(parts[4]),
31 int(parts[5]), int(parts[6]), float(parts[7])]
32 list.append(a)
33 file.close()
34 names = ['dt', 'hosts', 'running_jobs', 'queued_jobs',
35 'slots', 'avg_duration', 'avg_wait', 'avg_load']
36 self.records = np.rec.fromrecords(list, names=','.join(names))
37
38 - def graph(self, yaxis, title):
39 if self.records is None:
40 log.error("ERROR: File hasn't been read() yet.")
41 return -1
42 fig = plt.figure()
43 ax = fig.add_subplot(111)
44 ax.plot(self.records.dt, yaxis)
45 ax.grid(True)
46 fig.autofmt_xdate()
47 filename = os.path.join(self.pngpath, title + '.png')
48 plt.savefig(filename, dpi=100)
49 log.debug("saved graph %s." % title)
50 plt.close(fig)
51
53 self.read()
54 vals = {'queued': self.records.queued_jobs,
55 'running': self.records.running_jobs,
56 'num_hosts': self.records.hosts,
57
58 'avg_duration': self.records.avg_duration,
59 'avg_wait': self.records.avg_wait,
60 'avg_load': self.records.avg_load}
61 for sub in vals:
62 self.graph(vals[sub], sub)
63 log.info("Done making graphs.")
64