elstat/elstat/blueprints/api.py

59 lines
1.2 KiB
Python

from sanic import Blueprint, response
bp = Blueprint(__name__)
def get_status(manager):
res = {}
for name, state in manager.state.items():
# ignore unitialized workers
if state is None:
continue
res[name] = state
worker = manager.workers[name]
res[name]['description'] = worker.service['description']
return res
def get_graphs(manager):
res = {}
for name, worker in manager.workers.items():
# skip adapters without latency
if 'latency' not in worker.adapter.spec['db']:
continue
cur = manager.conn.cursor()
cur.execute(f"""
SELECT timestamp, latency FROM {name}
ORDER BY timestamp DESC
LIMIT 50
""")
qres = cur.fetchall()
res[name] = qres
return res
@bp.get('/api/current_status')
async def get_cur_status(request):
manager = request.app.manager
return response.json(get_status(manager))
@bp.get('/api/status')
async def get_full_status(request):
manager = request.app.manager
return response.json({
'status': get_status(manager),
'graph': get_graphs(manager),
})