Skip to content

Commit b9e1850

Browse files
fix: get users usage error
1 parent c039a94 commit b9e1850

File tree

4 files changed

+20
-19
lines changed

4 files changed

+20
-19
lines changed

app/operation/__init__.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime as dt, timezone as tz
1+
from datetime import datetime as dt, timedelta as td, timezone as tz
22
from enum import IntEnum
33

44
from fastapi import HTTPException
@@ -48,7 +48,7 @@ async def raise_error(self, message: str, code: int, db: AsyncSession | None = N
4848
else:
4949
raise ValueError(message)
5050

51-
async def validate_dates(self, start: dt | None, end: dt | None) -> tuple[dt, dt]:
51+
async def validate_dates(self, start: dt | None, end: dt | None, set_default_values: bool) -> tuple[dt, dt]:
5252
"""Validate if start and end dates are correct and if end is after start."""
5353

5454
start_date = None
@@ -60,8 +60,11 @@ async def validate_dates(self, start: dt | None, end: dt | None) -> tuple[dt, dt
6060
if end:
6161
end_date = fix_datetime_timezone(end)
6262

63-
if not end_date:
64-
end_date = dt.now(tz.utc)
63+
if set_default_values:
64+
if not start_date:
65+
start_date = dt.now(tz.utc) - td(days=30)
66+
if not end_date:
67+
end_date = dt.now(tz.utc)
6568

6669
# Compare dates only after both are set
6770
if (start_date and end_date) and end_date < start_date:

app/operation/node.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from datetime import datetime as dt
33
from typing import AsyncIterator, Callable
44

5-
from PasarGuardNodeBridge import PasarGuardNode, NodeAPIError
5+
from PasarGuardNodeBridge import NodeAPIError, PasarGuardNode
66
from sqlalchemy.exc import IntegrityError
77

88
from app import notification
@@ -288,13 +288,11 @@ async def connect_single(node: Node) -> dict | None:
288288
message=result.get("message"),
289289
)
290290

291-
notifications_to_send.append(
292-
{
293-
"node": node_notif,
294-
"status": result["status"],
295-
"old_status": result["old_status"],
296-
}
297-
)
291+
notifications_to_send.append({
292+
"node": node_notif,
293+
"status": result["status"],
294+
"old_status": result["old_status"],
295+
})
298296

299297
# Bulk update all statuses in ONE query
300298
await bulk_update_node_status(db, valid_results)
@@ -396,7 +394,7 @@ async def get_usage(
396394
node_id: int | None = None,
397395
group_by_node: bool = False,
398396
) -> NodeUsageStatsList:
399-
start, end = await self.validate_dates(start, end)
397+
start, end = await self.validate_dates(start, end, True)
400398
return await get_nodes_usage(db, start, end, period=period, node_id=node_id, group_by_node=group_by_node)
401399

402400
async def get_logs(self, node_id: Node) -> Callable[[], AsyncIterator[asyncio.Queue]]:
@@ -410,7 +408,7 @@ async def get_logs(self, node_id: Node) -> Callable[[], AsyncIterator[asyncio.Qu
410408
async def get_node_stats_periodic(
411409
self, db: AsyncSession, node_id: id, start: dt = None, end: dt = None, period: Period = Period.hour
412410
) -> NodeStatsList:
413-
start, end = await self.validate_dates(start, end)
411+
start, end = await self.validate_dates(start, end,True)
414412

415413
return await get_node_stats(db, node_id, start, end, period=period)
416414

app/operation/subscription.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ async def get_user_usage(
201201
period: Period = Period.hour,
202202
) -> UserUsageStatsList:
203203
"""Fetches the usage statistics for the user within a specified date range."""
204-
start, end = await self.validate_dates(start, end)
204+
start, end = await self.validate_dates(start, end, True)
205205

206206
db_user = await self.get_validated_sub(db, token=token)
207207

app/operation/user.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ async def get_user_usage(
240240
node_id: int | None = None,
241241
group_by_node: bool = False,
242242
) -> UserUsageStatsList:
243-
start, end = await self.validate_dates(start, end)
243+
start, end = await self.validate_dates(start, end, True)
244244
db_user = await self.get_validated_user(db, username, admin)
245245

246246
if not admin.is_sudo:
@@ -320,7 +320,7 @@ async def get_users_usage(
320320
group_by_node: bool = False,
321321
) -> UserUsageStatsList:
322322
"""Get all users usage"""
323-
start, end = await self.validate_dates(start, end)
323+
start, end = await self.validate_dates(start, end, True)
324324

325325
if not admin.is_sudo:
326326
node_id = None
@@ -357,7 +357,7 @@ async def get_expired_users(
357357
- If both are omitted, returns all expired users
358358
"""
359359

360-
expired_after, expired_before = await self.validate_dates(expired_after, expired_before)
360+
expired_after, expired_before = await self.validate_dates(expired_after, expired_before, False)
361361
if admin_username:
362362
admin_id = (await self.get_validated_admin(db, admin_username)).id
363363
else:
@@ -381,7 +381,7 @@ async def delete_expired_users(
381381
- At least one of expired_after or expired_before must be provided
382382
"""
383383

384-
expired_after, expired_before = await self.validate_dates(expired_after, expired_before)
384+
expired_after, expired_before = await self.validate_dates(expired_after, expired_before, False)
385385

386386
if admin_username:
387387
admin_id = (await self.get_validated_admin(db, admin_username)).id

0 commit comments

Comments
 (0)