gitscope
https://dev.kronoz.win/r/marzneshin.git
app/routes/system.py · master
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 6a4fee1 Dawsh 2y ago from app.db.models import Admin as DBAdmin, Settings
5 e5dcd82 Dawsh 2y ago from app.db.models import Node
6 6a4fee1 Dawsh 2y ago from app.dependencies import (
7 6a4fee1 Dawsh 2y ago DBDep,
8 6a4fee1 Dawsh 2y ago AdminDep,
9 6a4fee1 Dawsh 2y ago SudoAdminDep,
10 6a4fee1 Dawsh 2y ago EndDateDep,
11 6a4fee1 Dawsh 2y ago StartDateDep,
12 6a4fee1 Dawsh 2y ago )
13 e5dcd82 Dawsh 2y ago from app.models.node import NodeStatus
14 0178858 Dawsh 2y ago from app.models.settings import SubscriptionSettings, TelegramSettings
15 6a4fee1 Dawsh 2y ago from app.models.system import (
16 6a4fee1 Dawsh 2y ago UsersStats,
17 6a4fee1 Dawsh 2y ago NodesStats,
18 6a4fee1 Dawsh 2y ago AdminsStats,
19 6a4fee1 Dawsh 2y ago TrafficUsageSeries,
20 6a4fee1 Dawsh 2y ago )
21 d377c4c Dawsh 2y ago from app.models.user import UserExpireStrategy
22 f7af2b3 Dawsh 2y ago
23 e5dcd82 Dawsh 2y ago router = APIRouter(tags=["System"], prefix="/system")
24 e5dcd82 Dawsh 2y ago
25 a47eb4c Dawsh 2y ago
26 0178858 Dawsh 2y ago @router.get("/settings/subscription", response_model=SubscriptionSettings)
27 0178858 Dawsh 2y ago def get_subscription_settings(db: DBDep, admin: SudoAdminDep):
28 0178858 Dawsh 2y ago return db.query(Settings.subscription).first()[0]
29 0178858 Dawsh 2y ago
30 0178858 Dawsh 2y ago
31 0178858 Dawsh 2y ago @router.put("/settings/subscription", response_model=SubscriptionSettings)
32 0178858 Dawsh 2y ago def update_subscription_settings(
33 0178858 Dawsh 2y ago db: DBDep, modifications: SubscriptionSettings, admin: SudoAdminDep
34 0178858 Dawsh 2y ago ):
35 0178858 Dawsh 2y ago settings = db.query(Settings).first()
36 0178858 Dawsh 2y ago settings.subscription = modifications.model_dump(mode="json")
37 0178858 Dawsh 2y ago db.commit()
38 0178858 Dawsh 2y ago return settings.subscription
39 0178858 Dawsh 2y ago
40 0178858 Dawsh 2y ago
41 0178858 Dawsh 2y ago @router.get("/settings/telegram", response_model=TelegramSettings | None)
42 0178858 Dawsh 2y ago def get_telegram_settings(db: DBDep, admin: SudoAdminDep):
43 0178858 Dawsh 2y ago return db.query(Settings.telegram).first().telegram
44 0178858 Dawsh 2y ago
45 0178858 Dawsh 2y ago
46 0178858 Dawsh 2y ago @router.put("/settings/telegram", response_model=TelegramSettings | None)
47 0178858 Dawsh 2y ago def update_telegram_settings(
48 0178858 Dawsh 2y ago db: DBDep, new_telegram: TelegramSettings | None, admin: SudoAdminDep
49 0178858 Dawsh 2y ago ):
50 0178858 Dawsh 2y ago settings = db.query(Settings.telegram).first()
51 0178858 Dawsh 2y ago settings.telegram = new_telegram
52 0178858 Dawsh 2y ago db.commit()
53 0178858 Dawsh 2y ago return settings.telegram
54 0178858 Dawsh 2y ago
55 0178858 Dawsh 2y ago
56 e5dcd82 Dawsh 2y ago @router.get("/stats/admins", response_model=AdminsStats)
57 e5dcd82 Dawsh 2y ago def get_admins_stats(db: DBDep, admin: SudoAdminDep):
58 e5dcd82 Dawsh 2y ago return AdminsStats(total=db.query(DBAdmin).count())
59 a47eb4c Dawsh 2y ago
60 a47eb4c Dawsh 2y ago
61 e5dcd82 Dawsh 2y ago @router.get("/stats/nodes", response_model=NodesStats)
62 e5dcd82 Dawsh 2y ago def get_nodes_stats(db: DBDep, admin: SudoAdminDep):
63 e5dcd82 Dawsh 2y ago return NodesStats(
64 e5dcd82 Dawsh 2y ago total=db.query(Node).count(),
65 f1ab16c Dawsh 2y ago healthy=db.query(Node)
66 f1ab16c Dawsh 2y ago .filter(Node.status == NodeStatus.healthy)
67 f1ab16c Dawsh 2y ago .count(),
68 f1ab16c Dawsh 2y ago unhealthy=db.query(Node)
69 f1ab16c Dawsh 2y ago .filter(Node.status == NodeStatus.unhealthy)
70 f1ab16c Dawsh 2y ago .count(),
71 01cdf2e Dawsh 2y ago )
72 e5dcd82 Dawsh 2y ago
73 e5dcd82 Dawsh 2y ago
74 6a4fee1 Dawsh 2y ago @router.get("/stats/traffic", response_model=TrafficUsageSeries)
75 6a4fee1 Dawsh 2y ago def get_total_traffic_stats(
76 6a4fee1 Dawsh 2y ago db: DBDep, admin: AdminDep, start_date: StartDateDep, end_date: EndDateDep
77 6a4fee1 Dawsh 2y ago ):
78 6a4fee1 Dawsh 2y ago return crud.get_total_usages(db, admin, start_date, end_date)
79 6a4fee1 Dawsh 2y ago
80 6a4fee1 Dawsh 2y ago
81 e5dcd82 Dawsh 2y ago @router.get("/stats/users", response_model=UsersStats)
82 e5dcd82 Dawsh 2y ago def get_users_stats(db: DBDep, admin: AdminDep):
83 e5dcd82 Dawsh 2y ago return UsersStats(
84 f1ab16c Dawsh 2y ago total=crud.get_users_count(
85 f1ab16c Dawsh 2y ago db, admin=admin if not admin.is_sudo else None
86 f1ab16c Dawsh 2y ago ),
87 e5dcd82 Dawsh 2y ago active=crud.get_users_count(
88 d377c4c Dawsh 2y ago db, admin=admin if not admin.is_sudo else None, is_active=True
89 e5dcd82 Dawsh 2y ago ),
90 e5dcd82 Dawsh 2y ago on_hold=crud.get_users_count(
91 e5dcd82 Dawsh 2y ago db,
92 e5dcd82 Dawsh 2y ago admin=admin if not admin.is_sudo else None,
93 d377c4c Dawsh 2y ago expire_strategy=UserExpireStrategy.START_ON_FIRST_USE,
94 e5dcd82 Dawsh 2y ago ),
95 e5dcd82 Dawsh 2y ago expired=crud.get_users_count(
96 e5dcd82 Dawsh 2y ago db,
97 e5dcd82 Dawsh 2y ago admin=admin if not admin.is_sudo else None,
98 d377c4c Dawsh 2y ago expired=True,
99 e5dcd82 Dawsh 2y ago ),
100 e5dcd82 Dawsh 2y ago limited=crud.get_users_count(
101 e5dcd82 Dawsh 2y ago db,
102 e5dcd82 Dawsh 2y ago admin=admin if not admin.is_sudo else None,
103 d377c4c Dawsh 2y ago data_limit_reached=True,
104 e5dcd82 Dawsh 2y ago ),
105 e5dcd82 Dawsh 2y ago online=crud.get_users_count(
106 e5dcd82 Dawsh 2y ago db, admin=admin if not admin.is_sudo else None, online=True
107 e5dcd82 Dawsh 2y ago ),
108 a47eb4c Dawsh 2y ago )