aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--run/experiment.py2
-rw-r--r--run/jabber.py40
-rwxr-xr-xrun_exps.py26
3 files changed, 65 insertions, 3 deletions
diff --git a/run/experiment.py b/run/experiment.py
index ecb0241..03d6ab6 100644
--- a/run/experiment.py
+++ b/run/experiment.py
@@ -52,7 +52,7 @@ class Experiment(object):
52 self.log("Enabling sched_trace") 52 self.log("Enabling sched_trace")
53 self.tracers.append( SchedTracer(working_dir) ) 53 self.tracers.append( SchedTracer(working_dir) )
54 if LinuxTracer.enabled(): 54 if LinuxTracer.enabled():
55 self.log("Enabling trace-cmd / ftrace / kernelshark") 55 self.log("Enabling trace-cmd")
56 self.tracers.append( LinuxTracer(working_dir) ) 56 self.tracers.append( LinuxTracer(working_dir) )
57 if LogTracer.enabled(): 57 if LogTracer.enabled():
58 self.log("Enabling logging") 58 self.log("Enabling logging")
diff --git a/run/jabber.py b/run/jabber.py
new file mode 100644
index 0000000..c9dd097
--- /dev/null
+++ b/run/jabber.py
@@ -0,0 +1,40 @@
1#!/usr/bin/env python
2import os
3import sys
4import xmpp
5
6class Jabber(object):
7 def __init__(self, target):
8 self.target = target
9 self.client = self.__create_client()
10
11 def __create_client(self):
12 params = {}
13 conf_file = os.environ['HOME'] + '/.xsend'
14
15 if os.access(conf_file, os.R_OK):
16 for line in open(conf_file, 'r').readlines():
17 key, val = line.strip().split('=', 1)
18 params[key.lower()] = val
19
20 for field in ['login', 'password']:
21 if field not in params.keys():
22 with open(conf_file, 'wc') as f:
23 f.write('#LOGIN=romeo@montague.net\n#PASSWORD=juliet\n')
24 raise IOError("Please ensure the ~/.xsend file has valid "+\
25 "credentials for sending messages.")
26
27 jid = xmpp.protocol.JID(params['login'])
28 client = xmpp.Client(jid.getDomain(), debug=[])
29
30 client.connect(server=(jid.getDomain(), 5223))
31 client.auth(jid.getNode(), params['password'])
32
33 sys.stderr.write(("Jabber client loaded. Add '%s' to your friends " + \
34 "or Jabber messages will not send") % params['login'])
35
36 return client
37
38 def send(self, text):
39 message = xmpp.protocol.Message(to=self.target, body=text, typ='chat')
40 self.client.send(message)
diff --git a/run_exps.py b/run_exps.py
index dd75999..c51f4c6 100755
--- a/run_exps.py
+++ b/run_exps.py
@@ -6,6 +6,7 @@ import config.config as conf
6import os 6import os
7import re 7import re
8import shutil 8import shutil
9import sys
9import traceback 10import traceback
10 11
11from collections import namedtuple 12from collections import namedtuple
@@ -56,6 +57,9 @@ def parse_args():
56 default=conf.DEFAULTS['sched_file']) 57 default=conf.DEFAULTS['sched_file'])
57 parser.add_option('-f', '--force', action='store_true', default=False, 58 parser.add_option('-f', '--force', action='store_true', default=False,
58 dest='force', help='overwrite existing data') 59 dest='force', help='overwrite existing data')
60 parser.add_option('-j', '--jabber', metavar='username@domain',
61 dest='jabber', default=None,
62 help='send a jabber message when an experiment completes')
59 63
60 return parser.parse_args() 64 return parser.parse_args()
61 65
@@ -120,7 +124,7 @@ def verify_environment(kernel, copts):
120 raise InvalidConfig(results) 124 raise InvalidConfig(results)
121 125
122def load_experiment(sched_file, scheduler, duration, 126def load_experiment(sched_file, scheduler, duration,
123 param_file, out_dir, ignore): 127 param_file, out_dir, ignore, jabber):
124 if not os.path.isfile(sched_file): 128 if not os.path.isfile(sched_file):
125 raise IOError("Cannot find schedule file: %s" % sched_file) 129 raise IOError("Cannot find schedule file: %s" % sched_file)
126 130
@@ -161,6 +165,9 @@ def load_experiment(sched_file, scheduler, duration,
161 165
162 run_exp(exp_name, schedule, scheduler, kernel, duration, work_dir, out_dir) 166 run_exp(exp_name, schedule, scheduler, kernel, duration, work_dir, out_dir)
163 167
168 if jabber:
169 jabber.send("Completed '%s'" % exp_name)
170
164 # Save parameters used to run experiment in out_dir 171 # Save parameters used to run experiment in out_dir
165 out_params = dict(params.items() + 172 out_params = dict(params.items() +
166 [(conf.PARAMS['sched'], scheduler), 173 [(conf.PARAMS['sched'], scheduler),
@@ -228,6 +235,16 @@ def run_exp(name, schedule, scheduler, kernel, duration, work_dir, out_dir):
228 235
229 exp.run_exp() 236 exp.run_exp()
230 237
238def setup_jabber(target):
239 try:
240 from run.jabber import Jabber
241
242 return Jabber(target)
243 except ImportError:
244 sys.stderr.write("Failed to import jabber. Is python-xmpppy "+\
245 "installed?\nDisabling Jabber messaging.\n")
246 return None
247
231def main(): 248def main():
232 opts, args = parse_args() 249 opts, args = parse_args()
233 250
@@ -248,6 +265,11 @@ def main():
248 failed = 0 265 failed = 0
249 invalid = 0 266 invalid = 0
250 267
268 if opts.jabber:
269 jabber = setup_jabber(opts.jabber)
270 else:
271 jabber = None
272
251 for exp in args: 273 for exp in args:
252 path = "%s/%s" % (os.getcwd(), exp) 274 path = "%s/%s" % (os.getcwd(), exp)
253 out_dir = "%s/%s" % (out_base, os.path.split(exp.strip('/'))[1]) 275 out_dir = "%s/%s" % (out_base, os.path.split(exp.strip('/'))[1])
@@ -263,7 +285,7 @@ def main():
263 285
264 try: 286 try:
265 load_experiment(path, scheduler, duration, param_file, 287 load_experiment(path, scheduler, duration, param_file,
266 out_dir, opts.ignore) 288 out_dir, opts.ignore, jabber)
267 succ += 1 289 succ += 1
268 except ExperimentDone: 290 except ExperimentDone:
269 done += 1 291 done += 1