|
21 | 21 | reset_node_usage, |
22 | 22 | update_node_status, |
23 | 23 | ) |
24 | | -from app.db.crud.user import get_user |
25 | | -from app.db.models import Node, NodeStatus |
| 24 | +from app.db.crud.user import get_user, get_users_count_by_status |
| 25 | +from app.db.models import Node, NodeStatus, UserStatus |
26 | 26 | from app.models.admin import AdminDetails |
27 | 27 | from app.models.node import ( |
28 | 28 | NodeCoreUpdate, |
|
37 | 37 | UserIPListAll, |
38 | 38 | ) |
39 | 39 | from app.models.stats import NodeRealtimeStats, NodeStatsList, NodeUsageStatsList, Period |
40 | | -from app.node import core_users, node_manager |
| 40 | +from app.node import calculate_max_message_size, core_users, node_manager |
41 | 41 | from app.operation import BaseOperation |
42 | 42 | from app.utils.logger import get_logger |
43 | 43 |
|
@@ -197,8 +197,13 @@ async def create_node(self, db: AsyncSession, new_node: NodeCreate, admin: Admin |
197 | 197 | except IntegrityError: |
198 | 198 | await self.raise_error(message=f'Node "{new_node.name}" already exists', code=409, db=db) |
199 | 199 |
|
| 200 | + # Calculate max_message_size based on active users count |
| 201 | + user_counts = await get_users_count_by_status(db, [UserStatus.active]) |
| 202 | + active_users_count = user_counts.get(UserStatus.active.value, 0) |
| 203 | + max_message_size = calculate_max_message_size(active_users_count) |
| 204 | + |
200 | 205 | try: |
201 | | - await node_manager.update_node(db_node) |
| 206 | + await node_manager.update_node(db_node, max_message_size=max_message_size) |
202 | 207 | asyncio.create_task(self.connect_single_node(db, db_node.id)) |
203 | 208 | except NodeAPIError as e: |
204 | 209 | await self._update_single_node_status(db, db_node.id, NodeStatus.error, message=e.detail) |
@@ -226,8 +231,13 @@ async def modify_node( |
226 | 231 | if db_node.status in (NodeStatus.disabled, NodeStatus.limited): |
227 | 232 | await self.disconnect_single_node(db_node.id) |
228 | 233 | else: |
| 234 | + # Calculate max_message_size based on active users count |
| 235 | + user_counts = await get_users_count_by_status(db, [UserStatus.active]) |
| 236 | + active_users_count = user_counts.get(UserStatus.active.value, 0) |
| 237 | + max_message_size = calculate_max_message_size(active_users_count) |
| 238 | + |
229 | 239 | try: |
230 | | - await node_manager.update_node(db_node) |
| 240 | + await node_manager.update_node(db_node, max_message_size=max_message_size) |
231 | 241 | asyncio.create_task(self.connect_single_node(db, db_node.id)) |
232 | 242 | except NodeAPIError as e: |
233 | 243 | await self._update_single_node_status(db, db_node.id, NodeStatus.error, message=e.detail) |
@@ -300,12 +310,17 @@ async def connect_nodes_bulk( |
300 | 310 | # Fetch users ONCE for all nodes |
301 | 311 | users = await core_users(db=db) |
302 | 312 |
|
| 313 | + # Calculate max_message_size based on active users count (once for all nodes) |
| 314 | + user_counts = await get_users_count_by_status(db, [UserStatus.active]) |
| 315 | + active_users_count = user_counts.get(UserStatus.active.value, 0) |
| 316 | + max_message_size = calculate_max_message_size(active_users_count) |
| 317 | + |
303 | 318 | async def connect_single(node: Node) -> dict | None: |
304 | 319 | if node is None or node.status in (NodeStatus.disabled, NodeStatus.limited): |
305 | 320 | return |
306 | 321 |
|
307 | 322 | try: |
308 | | - await node_manager.update_node(node) |
| 323 | + await node_manager.update_node(node, max_message_size=max_message_size) |
309 | 324 | except NodeAPIError as e: |
310 | 325 | return { |
311 | 326 | "node_id": node.id, |
@@ -376,9 +391,14 @@ async def connect_single_node(self, db: AsyncSession, node_id: int) -> None: |
376 | 391 | # Get core users once |
377 | 392 | users = await core_users(db=db) |
378 | 393 |
|
| 394 | + # Calculate max_message_size based on active users count |
| 395 | + user_counts = await get_users_count_by_status(db, [UserStatus.active]) |
| 396 | + active_users_count = user_counts.get(UserStatus.active.value, 0) |
| 397 | + max_message_size = calculate_max_message_size(active_users_count) |
| 398 | + |
379 | 399 | # Update node manager |
380 | 400 | try: |
381 | | - await node_manager.update_node(db_node) |
| 401 | + await node_manager.update_node(db_node, max_message_size=max_message_size) |
382 | 402 | except NodeAPIError as e: |
383 | 403 | # Update status to error using simple CRUD |
384 | 404 | await update_node_status( |
|
0 commit comments