https://dev.kronoz.win/r/marzneshin.git
1import logging
2from datetime import datetime
3
4from app import marznode
5from app.db import crud, GetDB, get_users
6from app.models.user import UserDataUsageResetStrategy
7
8logger = logging.getLogger(__name__)
9
10reset_strategy_to_days = {
11 UserDataUsageResetStrategy.day.value: 1,
12 UserDataUsageResetStrategy.week.value: 7,
13 UserDataUsageResetStrategy.month.value: 30,
14 UserDataUsageResetStrategy.year.value: 365,
15}
16
17
18async def reset_user_data_usage():
19 now = datetime.utcnow()
20 with GetDB() as db:
21 for user in get_users(
22 db,
23 reset_strategy=[
24 UserDataUsageResetStrategy.day.value,
25 UserDataUsageResetStrategy.week.value,
26 UserDataUsageResetStrategy.month.value,
27 UserDataUsageResetStrategy.year.value,
28 ],
29 ):
30 last_reset_time = user.traffic_reset_at or user.created_at
31 num_days_to_reset = reset_strategy_to_days[
32 user.data_limit_reset_strategy
33 ]
34
35 if not (now - last_reset_time).days >= num_days_to_reset:
36 continue
37
38 was_active = user.is_active
39 crud.reset_user_data_usage(db, user)
40 # make user active if limited on usage reset
41 if user.is_active and not was_active:
42 marznode.operations.update_user(user)
43 user.activated = True
44 db.commit()
45
46 logger.info("User data usage reset for User `%s`", user.username)