def do_server_status(self): conn = Connection(self.host, self.port) srv_stats = conn.stats() for cmd in ('put', 'reserve-with-timeout', 'delete'): self.submit('counter', cmd, srv_stats['cmd-%s' % cmd]) self.submit('counter', 'total_jobs', srv_stats['total-jobs']) for tube in conn.tubes(): for prefix in self.tubes_prefix: if tube.startswith(prefix): tube_stats = conn.stats_tube(tube) self.submit('records', 'current_ready', tube_stats['current-jobs-ready'], tube) self.submit('counter', 'total_jobs', tube_stats['total-jobs'], tube) conn.close()
class HandlerBase(object): def __init__(self, args): self.__b = Connection(host=args.hostname, port=args.port) def __del__(self): self.__b.close() def get_job_string(self, job): if getattr(job, 'jid', None) is None: return ('<JOB (LOOKUP FAILED)>') else: return ('<JOB (%d)>' % (job.jid)) def write_human(self, message): stderr.write(message + "\n") def write_data(self, data, encode=True): if encode is True: data = dumps(data, indent=2, separators=(',', ': ')) stdout.write(data) stdout.write("\n") def build_job(self, job_id, body=None): # beanstalkc does a poor job of tracking (or, rather, guessing) whether # or not a job is properly reserved in order to do most things. Not # only does it just not do anything if not reserved, but this state- # tracking doesn't at all work for our use case (one-offs). We set # 'reserved' to True no matter what. return Job(self.__b, job_id, body, True) def check_job_valid(self, job): if job is None: raise KeyError("Job was not found (1).") elif issubclass(job.__class__, Job) is False: raise ValueError("Job is not valid.") elif getattr(job, 'jid', None) is None: raise KeyError("Job was not found (2).") @property def beanstalk(self): return self.__b
class JobWorkerClient(object): """ job client. """ def __init__(self, host, port, tube=None): self.__host = host self.__port = port self.__tube = tube self.__bs = None def _ensure_connect(self): if self.__bs is None: print 'beanstalkc client connecting ...' self.__bs = Connection(self.__host, self.__port) print 'beanstalkc client connected to %s:%s:[%s]' % ( self.__host, self.__port, self.__tube) if not self.__tube is None: self.__bs.use(self.__tube) print 'beanstalkc client using %s' % self.__bs.using() def put(self, obj): self._ensure_connect() self.__bs.put(json.dumps(obj)) def use_put(self, tube, obj): self._ensure_connect() self.__bs.use(tube) self.__bs.put(json.dumps(obj)) def use(self, tube): self._ensure_connect() self.__bs.use(tube) self.__tube = tube def close(self): try: self.__bs.close() except: pass
class JobWorkerClient(object): """ job client. """ def __init__(self, host, port, tube=None): self.__host = host self.__port = port self.__tube = tube self.__bs = None def _ensure_connect(self): if self.__bs is None: print 'beanstalkc client connecting ...' self.__bs = Connection(self.__host, self.__port) print 'beanstalkc client connected to %s:%s:[%s]' % (self.__host, self.__port, self.__tube) if not self.__tube is None: self.__bs.use(self.__tube) print 'beanstalkc client using %s' % self.__bs.using() def put(self,obj): self._ensure_connect() self.__bs.put(json.dumps(obj)) def use_put(self, tube, obj): self._ensure_connect() self.__bs.use(tube) self.__bs.put(json.dumps(obj)) def use(self, tube): self._ensure_connect() self.__bs.use(tube) self.__tube = tube def close(self): try: self.__bs.close() except: pass