3 import logging.handlers
11 from benderjab.bot import BenderFactory
15 def __init__(self, pwfile):
17 self.cmd = ['/usr/bin/rsync', ]
18 self.cmd.append('--password-file=%s' % (pwfile))
19 self.source_base = 'rsync://sequencer@jumpgate.caltech.edu:8730/sequencer/'
20 self.dest_base = '/home/diane/gec/'
25 """Get a directory listing"""
27 args = copy.copy(self.cmd)
28 args.append(self.source_base)
30 logging.debug("Rsync cmd:" + " ".join(args))
31 short_process = subprocess.Popen(args, stdout=subprocess.PIPE)
32 direntries = [ x.split() for x in short_process.stdout ]
33 for permissions, size, filedate, filetime, filename in direntries:
34 if permissions[0] == 'd':
35 # hey its a directory, the first step to being something we want to
37 if re.match("[0-9]{6}", filename):
38 # it starts with something that looks like a 6 digit date
39 # aka good enough for me
40 dirs_to_copy.append(filename)
43 def create_copy_process(self, dirname):
44 args = copy.copy(self.cmd)
45 # we want to copy everything
48 args.append(os.path.join(self.source_base, dirname))
50 args.append(self.dest_base)
51 logging.debug("Rsync cmd:" + " ".join(args))
52 return subprocess.Popen(args)
55 """copy any interesting looking directories over
57 dirs_to_copy = self.list()
58 for d in dirs_to_copy:
59 process = self.processes.get(d, None)
61 # we don't have a process, so make one
62 logging.info("rsyncing %s" % (d))
63 self.processes[d] = self.create_copy_process(d)
65 retcode = process.poll()
66 if retcode is not None:
68 logging.info("finished rsyncing %s, exitcode %d" % (d, retcode))
71 class copier_bot_parser(object):
73 self.rsync = rsync('/home/diane/.sequencer')
75 def __call__(self, msg, who):
77 if re.match("start copy", msg):
78 logging.info("starting copy for %s" % (who.getStripped()))
81 errmsg = "Exception: " + str(e)
83 logging.error(traceback.format_exc())
88 print "need .benderjab config name"
91 logging.basicConfig(level=logging.INFO,
92 format='%(asctime)s %(levelname)s %(message)s')
93 log = logging.getLogger()
94 log.addHandler(logging.handlers.RotatingFileHandler(
95 '/tmp/copier_bot.log', maxBytes=1000000, backupCount = 3)
97 bot = BenderFactory(configname)
98 bot.parser = copier_bot_parser()
104 if __name__ == "__main__":
105 sys.exit(main(sys.argv[1:]))