80 lines
2.4 KiB
Python
Raw Normal View History

2026-07-19 22:35:51 +02:00
# retoor <retoor@molodetz.nl>
import time
from collections import defaultdict
from typing import Optional
from devplacepy.services.tunnel.session_manager import get_manager
def get_metrics() -> dict:
manager = get_manager()
active = manager.list_active()
now = time.time()
per_user: dict[str, dict] = defaultdict(
lambda: {
"active_tunnels": 0,
"total_bytes_in": 0,
"total_bytes_out": 0,
"total_requests": 0,
}
)
total_bytes_in = 0
total_bytes_out = 0
total_requests = 0
for session in active:
username = session.username
per_user[username]["active_tunnels"] += 1
per_user[username]["total_bytes_in"] += session.bytes_in
per_user[username]["total_bytes_out"] += session.bytes_out
per_user[username]["total_requests"] += session.requests_count
total_bytes_in += session.bytes_in
total_bytes_out += session.bytes_out
total_requests += session.requests_count
return {
"active_tunnels": len(active),
"total_bytes_in": total_bytes_in,
"total_bytes_out": total_bytes_out,
"total_requests": total_requests,
"uptime_seconds": now - (min(s.started_at for s in active) if active else now),
"per_user": dict(per_user),
}
def get_user_metrics(username: str) -> Optional[dict]:
manager = get_manager()
active = manager.list_by_user(username)
now = time.time()
if not active:
return None
total_bytes_in = sum(s.bytes_in for s in active)
total_bytes_out = sum(s.bytes_out for s in active)
total_requests = sum(s.requests_count for s in active)
return {
"username": username,
"active_tunnels": len(active),
"total_bytes_in": total_bytes_in,
"total_bytes_out": total_bytes_out,
"total_requests": total_requests,
"uptime_seconds": now - min(s.started_at for s in active),
"tunnels": [
{
"session_id": s.session_id,
"subdomain": s.subdomain,
"local_port": s.local_port,
"remote_port": s.remote_port,
"started_at": s.started_at,
"bytes_in": s.bytes_in,
"bytes_out": s.bytes_out,
"requests_count": s.requests_count,
}
for s in active
],
}