diff --git a/app/tasks/record_usages.py b/app/tasks/record_usages.py index 8742359..30ddc56 100644 --- a/app/tasks/record_usages.py +++ b/app/tasks/record_usages.py @@ -11,7 +11,7 @@ from app.db.models import NodeUsage, NodeUserUsage, User from app.marznode import MarzNodeBase -def record_user_stats(params: list, node_id: int, consumption_factor: int = 1): +def record_user_usage_logs(params: list, node_id: int, consumption_factor: int = 1): if not params: return @@ -63,8 +63,8 @@ def record_user_stats(params: list, node_id: int, consumption_factor: int = 1): db.commit() -def record_node_stats(params: dict, node_id: int): - if not params: +def record_node_stats(node_id: int, usage: int): + if not usage: return created_at = datetime.fromisoformat(datetime.utcnow().strftime("%Y-%m-%dT%H:00:00")) @@ -81,21 +81,20 @@ def record_node_stats(params: dict, node_id: int): created_at=created_at, node_id=node_id, uplink=0, downlink=0 ) db.execute(stmt) - db.commit() # record stmt = ( update(NodeUsage) .values( - uplink=NodeUsage.uplink + bindparam("up"), - downlink=NodeUsage.downlink + bindparam("down"), + downlink=NodeUsage.downlink + usage, ) .where( and_(NodeUsage.node_id == node_id, NodeUsage.created_at == created_at) ) ) - db.execute(stmt, params) + db.execute(stmt) + db.commit() async def get_users_stats(node_id: int, node: MarzNodeBase) -> tuple[int, list[dict]]: @@ -122,10 +121,13 @@ async def record_user_usages(): coefficient = ( node.usage_coefficient if (node := marznode.nodes.get(node_id)) else 1 ) + node_usage = 0 for param in params: users_usage[param["uid"]] += ( param["value"] * coefficient ) # apply the usage coefficient + node_usage += param["value"] + record_node_stats(node_id, node_usage) users_usage = list( {"id": uid, "value": value} for uid, value in users_usage.items() @@ -145,7 +147,7 @@ async def record_user_usages(): db.commit() for node_id, params in api_params.items(): - record_user_stats( + record_user_usage_logs( params, node_id, node.usage_coefficient if (node := marznode.nodes.get(node_id)) else 1, diff --git a/app/tasks/reset_user_data_usage.py b/app/tasks/reset_user_data_usage.py index eb17e7e..30923cb 100644 --- a/app/tasks/reset_user_data_usage.py +++ b/app/tasks/reset_user_data_usage.py @@ -36,7 +36,11 @@ async def reset_user_data_usage(): old_status = user.status crud.reset_user_data_usage(db, user) # make user active if limited on usage reset - if user.status == UserStatus.active and old_status == UserStatus.limited: + if ( + user.enabled + and user.status == UserStatus.active + and old_status == UserStatus.limited + ): await marznode.operations.update_user(user) logger.info(f'User data usage reset for User "{user.username}"')