gitscope
https://dev.kronoz.win/r/marzneshin.git
app/routes/system.py · v0.3.2
Source
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 )