mirror of
https://git.ugnet.gay/CrossTalk/azul.git
synced 2026-05-27 22:59:49 +00:00
init
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
from typing import Any, Dict, List
|
||||
from aiohttp import web
|
||||
import json, util.misc
|
||||
|
||||
from core.backend import Backend
|
||||
from core.http import render
|
||||
|
||||
TMPL_DIR = 'front/api/tmpl'
|
||||
|
||||
def register(app: web.Application) -> None:
|
||||
util.misc.add_to_jinja_env(app, 'api', TMPL_DIR)
|
||||
|
||||
# Actual APIs
|
||||
app.router.add_get('/api/ircChats', handle_ircchats)
|
||||
app.router.add_get('/api/stats/{service}', handle_stats_api)
|
||||
|
||||
# API tests
|
||||
app.router.add_route('*', '/api/chats-test', handle_chat_list)
|
||||
|
||||
async def handle_ircchats(req: web.Request) -> web.Response:
|
||||
backend = req.app['backend'] # type: Backend
|
||||
|
||||
result = [] # type: List[Dict[str, Any]]
|
||||
|
||||
for chat in backend.get_chats_by_scope('irc'):
|
||||
nicks = [cs.user.email for cs in chat.get_roster_single()]
|
||||
|
||||
result.append({
|
||||
'channel': chat.ids['irc'],
|
||||
'users': nicks,
|
||||
})
|
||||
|
||||
return web.Response(status = 200, body = json.dumps(result))
|
||||
|
||||
async def handle_stats_api(req: web.Request) -> web.Response:
|
||||
backend = req.app['backend'] # type: Backend
|
||||
|
||||
service = req.match_info['service']
|
||||
result = {} # type: Dict[str, Any]
|
||||
|
||||
if service == 'usersActive':
|
||||
result['users_active'] = str(backend._stats.logged_in)
|
||||
return web.Response(status = 200, body = json.dumps(result))
|
||||
if service == 'messages':
|
||||
# TODO: Support message count by client ID
|
||||
|
||||
messages_received = 0
|
||||
messages_sent = 0
|
||||
|
||||
for stats_raw in backend._stats.by_client.values():
|
||||
from core.stats import _stats_to_json as stats_json
|
||||
stats = stats_json(stats_raw) # type: Dict[str, Any]
|
||||
|
||||
if 'messages_received' in stats:
|
||||
messages_received += int(stats['messages_received'])
|
||||
if 'messages_sent' in stats:
|
||||
messages_sent += int(stats['messages_sent'])
|
||||
|
||||
result['messages_received'] = str(messages_received)
|
||||
result['messages_sent'] = str(messages_sent)
|
||||
|
||||
return web.Response(status = 200, body = json.dumps(result))
|
||||
|
||||
return web.Response(status = 400)
|
||||
|
||||
async def handle_chat_list(req: web.Request) -> web.Response:
|
||||
return render(req, 'api:chats-test.html')
|
||||
Reference in New Issue
Block a user