8 from abstfilter import AbstractConsumer
10 class Growler(AbstractConsumer):
14 if s is None or type(s) is type(''): return
16 d = dict([(ss[0], len(ss) > 2 and ss[2] or None) for ss in s])
17 if d['tzcspew'] == 'message':
18 zclass = d['class'].lower()
19 zinstance = d['instance'].lower()
20 zop = d['opcode'].lower()
21 zsender = d['sender'].lower()
22 zauth = d['auth'].lower() == 'yes'
23 ztime = ':'.join(d['time'].split(' ')[3].split(':')[0:2])
24 zmessage = d['message']
25 id = '%s/\n%s/\n%s\n %s' % (zclass, zinstance, zsender, ztime)
27 header = '%s (%s)' % (id, zsender)
30 header = '%s (%s)' % (id, zmessage[0])
31 message = '%s' % zmessage[1]
34 g = os.popen("growlnotify -a MacZephyr -n zephyr -d '%s' -t '%s'" % (id, header), 'w')
42 print """barn-growl v.0.0.1
45 barn-growl USERNAME"""
50 if principal.find("@") == -1:
51 principal += '@ATHENA.MIT.EDU'
52 bash = "/bin/bash -lc \"kdo %s ssh %s@linerva.mit.edu 'tzc -si'\" 2>/dev/null </dev/null" % (principal, username)
54 r = sexpr.SExprReader(Growler())
56 flags = fcntl.fcntl(p, fcntl.F_GETFL)
57 fcntl.fcntl(p, fcntl.F_SETFL, flags | os.O_NONBLOCK)
60 [i,o,e] = select.select([p], [], [], 5)
61 if i: s = p.read(1024)
68 if __name__ == "__main__":
69 sys.exit(main(sys.argv))