from flask import request, render_template
import settings
from handlers import get, post, jsonify
from redis import Redis
from redis.cli import RedisCli
queue_data = dict(
lists = [
'kiln:queue',
'kiln:queue:high',
'kiln:queue:low',
'kiln:cancelations',
'kiln:queue:running',
'opengrok:index:running',
'opengrok:cancelations',
],
zsets = [
'opengrok:index',
],
keys = [
'updaterepo:*:repo',
'updaterepo:*:__failcount',
'httppost:*:url',
'httppost:*:__failcount',
],
)
def _get_redis():
return Redis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, db=settings.REDIS_DB)
@get('/queuestats/', as_json=False)
def queuestats():
r = _get_redis()
data = {}
for l in queue_data['lists']:
data[l] = r.llen(l)
for z in queue_data['zsets']:
data[z] = r.zcard(z)
for k in queue_data['keys']:
data[k] = len(r.keys(k))
if request.headers.get('X-Requested-With', '').lower() == 'xmlhttprequest':
return jsonify(data)
return render_template('queuestats.html', data=data)
@post('/queuestats/redis/cli/')
def cli():
cmd = request.form['cmd']
try:
r = RedisCli(settings.REDIS_HOST, settings.REDIS_PORT).onecmd(cmd)
except Exception, e:
r = '*** Unknown exception: %s' % e
if r is None:
r = ''
elif isinstance(r, list):
r = '\n'.join(r)
d = dict(response=r)
if isinstance(r, basestring) and (r.startswith('Error') or r.startswith('***')):
d['type'] = 'error'
else:
d['type'] = 'success'
return d
|
Loading...