mirror of
https://git.ugnet.gay/CrossTalk/azul.git
synced 2026-05-27 22:59:49 +00:00
production init
This commit is contained in:
@@ -0,0 +1 @@
|
||||
from .entry import register
|
||||
@@ -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')
|
||||
@@ -0,0 +1,36 @@
|
||||
<html>
|
||||
<body>
|
||||
<h1>IRC Chats</h1>
|
||||
<div id="chats">
|
||||
</div>
|
||||
<script>
|
||||
var xhr = new XMLHttpRequest();
|
||||
|
||||
xhr.open('GET', '/api/ircChats', true);
|
||||
xhr.onreadystatechange = function() {
|
||||
if (this.readyState == 4 && this.status == 200) {
|
||||
chats_div = document.getElementById('chats');
|
||||
|
||||
innerHtml = '';
|
||||
response = JSON.parse(this.responseText);
|
||||
for (i in response) {
|
||||
channel = response[i]
|
||||
users = channel['users'];
|
||||
innerHtml += '<h3>' + channel['channel'] + '</h3>';
|
||||
innerHtml += '<br/>';
|
||||
innerHtml += 'Total users: ' + users.length.toString();
|
||||
innerHtml += '<br/><br/>';
|
||||
innerHtml += 'Users:';
|
||||
innerHtml += '<ul>';
|
||||
for (j in users) {
|
||||
innerHtml += '<li>' + users[j] + '</li>';
|
||||
}
|
||||
innerHtml += '</ul>';
|
||||
}
|
||||
chats_div.innerHTML = innerHtml;
|
||||
}
|
||||
}
|
||||
xhr.send();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user