File: //usr/lib/python2.7/site-packages/lap/resque.py
import sys
import imp
import platform
import socket
socket.setdefaulttimeout(5)
def __run__(params):
try:
#import redis
# workaround for import correct redis-client (system), not $(pwd)/redis.py
sys.path = filter(lambda p: p not in ('', '.'), sys.path)
sys.path.append('')
os_distro = platform.dist()[0].lower()
if "debian" in os_distro or "ubuntu" in os_distro:
rediscli = "/usr/share/pyshared/redis/__init__.py"
else:
rediscli = "/usr/lib/python%s.%s/site-packages/redis/__init__.py" %\
(sys.version_info.major, sys.version_info.minor)
redis = imp.load_source("Redis", rediscli)
except (ImportError, IOError):
return [2, "CRITICAL - Error: Redis python client not found. Please install 'python-redis'"]
try:
host = params.get("host", "localhost")
port = int(params.get("port", "6379"))
db = int(params.get("db", "0"))
passwd = params.get("passwd")
queue = params.get("queue")
check_workers = params.get("check_workers", "true")
maxjobs_c = int(params.get("maxjobs", "100"))
maxjobs_w = maxjobs_c * 0.7
except Exception, e:
return [2, "CRITICAL - Error: %s" % repr(e)]
try:
r = redis.Redis(host=host, port=port, db=db, password=passwd)
rsq_workers = r.scard("resque:workers")
rsq_queues = r.smembers("resque:queues")
except Exception, e:
return [2, "CRITICAL - Error: %s" % repr(e)]
if queue not in rsq_queues:
return [2, "CRITICAL - Queue not found: %s" % queue]
rsq_queue_len = r.llen("resque:queue:%s" % queue)
if rsq_queue_len >= maxjobs_c:
return [2, "CRITICAL - Queue '%s' has %s pending jobs" % (queue, rsq_queue_len)]
if rsq_queue_len >= maxjobs_w:
return [1, "WARNING - Queue '%s' has %s pending jobs" % (queue, rsq_queue_len)]
if check_workers.strip().lower() in ("true", "yes") and rsq_workers == 0:
return [1, "WARNING - No workers connected"]
return [0, "OK - Queue '%s' has %s pending jobs" % (queue, rsq_queue_len)]