gitscope
← marzneshin / v0.3.0-alpha7 / app/routes/system.py
https://dev.kronoz.win/r/marzneshin.git
app/routes/system.py · Python
Blame Raw
 1from typing import Union
 2
 3from fastapi import APIRouter
 4
 5from app import __version__
 6from app.db import crud
 7from app.dependencies import DBDep, AdminDep
 8from app.models.admin import Admin
 9from app.models.system import SystemStats
10from app.models.user import UserStatus
11from app.utils.system import memory_usage, cpu_usage, realtime_bandwidth
12
13router = APIRouter(tags=["System"])
14
15
16@router.get("/system", response_model=SystemStats)
17def get_system_stats(db: DBDep, admin: AdminDep):
18    mem = memory_usage()
19    cpu = cpu_usage()
20    system = crud.get_system_usage(db)
21    dbadmin: Union[Admin, None] = crud.get_admin(db, admin.username)
22
23    total_user = crud.get_users_count(db, admin=dbadmin if not admin.is_sudo else None)
24    users_active = crud.get_users_count(
25        db, status=UserStatus.active, admin=dbadmin if not admin.is_sudo else None
26    )
27    realtime_bandwidth_stats = realtime_bandwidth()
28
29    return SystemStats(
30        version=__version__,
31        mem_total=mem.total,
32        mem_used=mem.used,
33        cpu_cores=cpu.cores,
34        cpu_usage=cpu.percent,
35        total_user=total_user,
36        users_active=users_active,
37        incoming_bandwidth=system.uplink,
38        outgoing_bandwidth=system.downlink,
39        incoming_bandwidth_speed=realtime_bandwidth_stats.incoming_bytes,
40        outgoing_bandwidth_speed=realtime_bandwidth_stats.outgoing_bytes,
41    )