| 1 |
f7af2b3 |
Dawsh |
2y ago |
from fastapi import APIRouter |
| 2 |
f7af2b3 |
Dawsh |
2y ago |
|
| 3 |
c13a1aa |
Dawsh |
2y ago |
from app.db import crud |
| 4 |
0178858 |
Dawsh |
2y ago |
from app.db.models import Admin as DBAdmin, User, Settings |
| 5 |
e5dcd82 |
Dawsh |
2y ago |
from app.db.models import Node |
| 6 |
e5dcd82 |
Dawsh |
2y ago |
from app.dependencies import DBDep, AdminDep, SudoAdminDep |
| 7 |
e5dcd82 |
Dawsh |
2y ago |
from app.models.node import NodeStatus |
| 8 |
0178858 |
Dawsh |
2y ago |
from app.models.settings import SubscriptionSettings, TelegramSettings |
| 9 |
0178858 |
Dawsh |
2y ago |
from app.models.system import UsersStats, NodesStats, AdminsStats |
| 10 |
d377c4c |
Dawsh |
2y ago |
from app.models.user import UserExpireStrategy |
| 11 |
f7af2b3 |
Dawsh |
2y ago |
|
| 12 |
e5dcd82 |
Dawsh |
2y ago |
router = APIRouter(tags=["System"], prefix="/system") |
| 13 |
e5dcd82 |
Dawsh |
2y ago |
|
| 14 |
a47eb4c |
Dawsh |
2y ago |
|
| 15 |
0178858 |
Dawsh |
2y ago |
@router.get("/settings/subscription", response_model=SubscriptionSettings) |
| 16 |
0178858 |
Dawsh |
2y ago |
def get_subscription_settings(db: DBDep, admin: SudoAdminDep): |
| 17 |
0178858 |
Dawsh |
2y ago |
return db.query(Settings.subscription).first()[0] |
| 18 |
0178858 |
Dawsh |
2y ago |
|
| 19 |
0178858 |
Dawsh |
2y ago |
|
| 20 |
0178858 |
Dawsh |
2y ago |
@router.put("/settings/subscription", response_model=SubscriptionSettings) |
| 21 |
0178858 |
Dawsh |
2y ago |
def update_subscription_settings( |
| 22 |
0178858 |
Dawsh |
2y ago |
db: DBDep, modifications: SubscriptionSettings, admin: SudoAdminDep |
| 23 |
0178858 |
Dawsh |
2y ago |
): |
| 24 |
0178858 |
Dawsh |
2y ago |
settings = db.query(Settings).first() |
| 25 |
0178858 |
Dawsh |
2y ago |
settings.subscription = modifications.model_dump(mode="json") |
| 26 |
0178858 |
Dawsh |
2y ago |
db.commit() |
| 27 |
0178858 |
Dawsh |
2y ago |
return settings.subscription |
| 28 |
0178858 |
Dawsh |
2y ago |
|
| 29 |
0178858 |
Dawsh |
2y ago |
|
| 30 |
0178858 |
Dawsh |
2y ago |
@router.get("/settings/telegram", response_model=TelegramSettings | None) |
| 31 |
0178858 |
Dawsh |
2y ago |
def get_telegram_settings(db: DBDep, admin: SudoAdminDep): |
| 32 |
0178858 |
Dawsh |
2y ago |
return db.query(Settings.telegram).first().telegram |
| 33 |
0178858 |
Dawsh |
2y ago |
|
| 34 |
0178858 |
Dawsh |
2y ago |
|
| 35 |
0178858 |
Dawsh |
2y ago |
@router.put("/settings/telegram", response_model=TelegramSettings | None) |
| 36 |
0178858 |
Dawsh |
2y ago |
def update_telegram_settings( |
| 37 |
0178858 |
Dawsh |
2y ago |
db: DBDep, new_telegram: TelegramSettings | None, admin: SudoAdminDep |
| 38 |
0178858 |
Dawsh |
2y ago |
): |
| 39 |
0178858 |
Dawsh |
2y ago |
settings = db.query(Settings.telegram).first() |
| 40 |
0178858 |
Dawsh |
2y ago |
settings.telegram = new_telegram |
| 41 |
0178858 |
Dawsh |
2y ago |
db.commit() |
| 42 |
0178858 |
Dawsh |
2y ago |
return settings.telegram |
| 43 |
0178858 |
Dawsh |
2y ago |
|
| 44 |
0178858 |
Dawsh |
2y ago |
|
| 45 |
e5dcd82 |
Dawsh |
2y ago |
@router.get("/stats/admins", response_model=AdminsStats) |
| 46 |
e5dcd82 |
Dawsh |
2y ago |
def get_admins_stats(db: DBDep, admin: SudoAdminDep): |
| 47 |
e5dcd82 |
Dawsh |
2y ago |
return AdminsStats(total=db.query(DBAdmin).count()) |
| 48 |
a47eb4c |
Dawsh |
2y ago |
|
| 49 |
a47eb4c |
Dawsh |
2y ago |
|
| 50 |
e5dcd82 |
Dawsh |
2y ago |
@router.get("/stats/nodes", response_model=NodesStats) |
| 51 |
e5dcd82 |
Dawsh |
2y ago |
def get_nodes_stats(db: DBDep, admin: SudoAdminDep): |
| 52 |
e5dcd82 |
Dawsh |
2y ago |
return NodesStats( |
| 53 |
e5dcd82 |
Dawsh |
2y ago |
total=db.query(Node).count(), |
| 54 |
f1ab16c |
Dawsh |
2y ago |
healthy=db.query(Node) |
| 55 |
f1ab16c |
Dawsh |
2y ago |
.filter(Node.status == NodeStatus.healthy) |
| 56 |
f1ab16c |
Dawsh |
2y ago |
.count(), |
| 57 |
f1ab16c |
Dawsh |
2y ago |
unhealthy=db.query(Node) |
| 58 |
f1ab16c |
Dawsh |
2y ago |
.filter(Node.status == NodeStatus.unhealthy) |
| 59 |
f1ab16c |
Dawsh |
2y ago |
.count(), |
| 60 |
01cdf2e |
Dawsh |
2y ago |
) |
| 61 |
e5dcd82 |
Dawsh |
2y ago |
|
| 62 |
e5dcd82 |
Dawsh |
2y ago |
|
| 63 |
e5dcd82 |
Dawsh |
2y ago |
@router.get("/stats/users", response_model=UsersStats) |
| 64 |
e5dcd82 |
Dawsh |
2y ago |
def get_users_stats(db: DBDep, admin: AdminDep): |
| 65 |
e5dcd82 |
Dawsh |
2y ago |
return UsersStats( |
| 66 |
f1ab16c |
Dawsh |
2y ago |
total=crud.get_users_count( |
| 67 |
f1ab16c |
Dawsh |
2y ago |
db, admin=admin if not admin.is_sudo else None |
| 68 |
f1ab16c |
Dawsh |
2y ago |
), |
| 69 |
e5dcd82 |
Dawsh |
2y ago |
active=crud.get_users_count( |
| 70 |
d377c4c |
Dawsh |
2y ago |
db, admin=admin if not admin.is_sudo else None, is_active=True |
| 71 |
e5dcd82 |
Dawsh |
2y ago |
), |
| 72 |
e5dcd82 |
Dawsh |
2y ago |
on_hold=crud.get_users_count( |
| 73 |
e5dcd82 |
Dawsh |
2y ago |
db, |
| 74 |
e5dcd82 |
Dawsh |
2y ago |
admin=admin if not admin.is_sudo else None, |
| 75 |
d377c4c |
Dawsh |
2y ago |
expire_strategy=UserExpireStrategy.START_ON_FIRST_USE, |
| 76 |
e5dcd82 |
Dawsh |
2y ago |
), |
| 77 |
e5dcd82 |
Dawsh |
2y ago |
expired=crud.get_users_count( |
| 78 |
e5dcd82 |
Dawsh |
2y ago |
db, |
| 79 |
e5dcd82 |
Dawsh |
2y ago |
admin=admin if not admin.is_sudo else None, |
| 80 |
d377c4c |
Dawsh |
2y ago |
expired=True, |
| 81 |
e5dcd82 |
Dawsh |
2y ago |
), |
| 82 |
e5dcd82 |
Dawsh |
2y ago |
limited=crud.get_users_count( |
| 83 |
e5dcd82 |
Dawsh |
2y ago |
db, |
| 84 |
e5dcd82 |
Dawsh |
2y ago |
admin=admin if not admin.is_sudo else None, |
| 85 |
d377c4c |
Dawsh |
2y ago |
data_limit_reached=True, |
| 86 |
e5dcd82 |
Dawsh |
2y ago |
), |
| 87 |
e5dcd82 |
Dawsh |
2y ago |
online=crud.get_users_count( |
| 88 |
e5dcd82 |
Dawsh |
2y ago |
db, admin=admin if not admin.is_sudo else None, online=True |
| 89 |
e5dcd82 |
Dawsh |
2y ago |
), |
| 90 |
e5dcd82 |
Dawsh |
2y ago |
recent_subscription_updates=list( |
| 91 |
e5dcd82 |
Dawsh |
2y ago |
i[0] |
| 92 |
e5dcd82 |
Dawsh |
2y ago |
for i in db.query(User.username) |
| 93 |
e5dcd82 |
Dawsh |
2y ago |
.filter(User.sub_updated_at != None) |
| 94 |
e5dcd82 |
Dawsh |
2y ago |
.order_by(User.sub_updated_at) |
| 95 |
e5dcd82 |
Dawsh |
2y ago |
.limit(5) |
| 96 |
e5dcd82 |
Dawsh |
2y ago |
), |
| 97 |
a47eb4c |
Dawsh |
2y ago |
) |