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()
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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