Files
Transphase/transphase/transphase.py
2023-05-16 11:52:25 +02:00

52 lines
1.7 KiB
Python

import json
import asyncio
import sys, time
from quart import Quart, websocket
peer_list = {}
TRANSFERRED_DATA = 0
app = Quart(__name__)
def get_var_size(var):
return sys.getsizeof(var) / (1024 * 1024)
@app.route("/")
async def retmain():
return f"Ready to relay\n"
@app.websocket("/ws")
async def handle_websockets():
global TRANSFERRED_DATA
peer_group_id = None
while True:
try:
message = await websocket.receive()
msg = json.loads(message)
if "peer_group_id" in msg:
peer_group_id = msg["peer_group_id"]
if peer_group_id not in peer_list:
peer_list[peer_group_id] = set()
peer_list[peer_group_id].add(websocket._get_current_object())
for peer in peer_list[peer_group_id]:
if peer != websocket._get_current_object():
await peer.send(message)
TRANSFERRED_DATA = round(TRANSFERRED_DATA + get_var_size(message))
except asyncio.exceptions.CancelledError:
peer_list[peer_group_id].remove(websocket._get_current_object())
if len(peer_list[peer_group_id]) < 1:
peer_list.pop(peer_group_id)
@app.route("/stats")
async def return_stats():
process_start_time = time.process_time()
current_time = time.time()
uptime = current_time - process_start_time
uptime_str = time.strftime("%H:%M:%S", time.gmtime(uptime))
peers_connected = 0
for p in peer_list.values():
peers_connected += len(p)
resp = f"<p><b>Uptime: </b>{uptime_str}</p><p><b>Peers: </b>{peers_connected}</p><p><b>Transferred: </b>{TRANSFERRED_DATA} MB</p>"
return resp
app.run()