diff --git a/.env.example b/.env.example index 57c654f..e8b27fa 100644 --- a/.env.example +++ b/.env.example @@ -41,3 +41,9 @@ UVICORN_PORT = 8000 # VITE_BASE_API="https://example.com/api/" # JWT_ACCESS_TOKEN_EXPIRE_MINUTES = 1440 # AUTH_GENERATION_ALGORITHM=xxh128 + +## Scheduled Tasks Interval in Seconds +# TASKS_RECORD_USER_USAGES_INTERVAL=30 +# TASKS_REVIEW_USERS_INTERVAL=30 +# TASKS_EXPIRE_DAYS_REACHED_INTERVAL=30 +# TASKS_RESET_USER_DATA_USAGE=3600 diff --git a/app/config/env.py b/app/config/env.py index cd5b34e..9b4fdb2 100755 --- a/app/config/env.py +++ b/app/config/env.py @@ -1,6 +1,7 @@ +from enum import Enum + from decouple import config from dotenv import load_dotenv -from enum import Enum load_dotenv() @@ -105,3 +106,16 @@ NOTIFY_DAYS_LEFT = config("NOTIFY_DAYS_LEFT", default=3, cast=int) DISABLE_RECORDING_NODE_USAGE = config( "DISABLE_RECORDING_NODE_USAGE", cast=bool, default=False ) + +TASKS_RECORD_USER_USAGES_INTERVAL = config( + "TASKS_RECORD_USER_USAGES_INTERVAL", default=30, cast=int +) +TASKS_REVIEW_USERS_INTERVAL = config( + "TASKS_REVIEW_USERS_INTERVAL", default=30, cast=int +) +TASKS_EXPIRE_DAYS_REACHED_INTERVAL = config( + "TASKS_EXPIRE_DAYS_REACHED_INTERVAL", default=30, cast=int +) +TASKS_RESET_USER_DATA_USAGE = config( + "TASKS_RESET_USER_DATA_USAGE", default=3600, cast=int +) diff --git a/app/marzneshin.py b/app/marzneshin.py index 5ba31ac..799f481 100644 --- a/app/marzneshin.py +++ b/app/marzneshin.py @@ -22,6 +22,10 @@ from app.config.env import ( UVICORN_SSL_KEYFILE, UVICORN_UDS, DASHBOARD_PATH, + TASKS_RECORD_USER_USAGES_INTERVAL, + TASKS_REVIEW_USERS_INTERVAL, + TASKS_EXPIRE_DAYS_REACHED_INTERVAL, + TASKS_RESET_USER_DATA_USAGE, ) from app.templates import render_template from . import __version__ @@ -74,14 +78,32 @@ app.add_middleware( ) scheduler = AsyncIOScheduler(timezone="UTC") -scheduler.add_job(record_user_usages, "interval", coalesce=True, seconds=30) scheduler.add_job( - review_users, "interval", seconds=30, coalesce=True, max_instances=1 + record_user_usages, + "interval", + coalesce=True, + seconds=TASKS_RECORD_USER_USAGES_INTERVAL, +) +scheduler.add_job( + review_users, + "interval", + seconds=TASKS_REVIEW_USERS_INTERVAL, + coalesce=True, + max_instances=1, ) scheduler.add_job( - expire_days_reached, "interval", seconds=30, coalesce=True, max_instances=1 + expire_days_reached, + "interval", + seconds=TASKS_EXPIRE_DAYS_REACHED_INTERVAL, + coalesce=True, + max_instances=1, +) +scheduler.add_job( + reset_user_data_usage, + "interval", + seconds=TASKS_RESET_USER_DATA_USAGE, + coalesce=True, ) -scheduler.add_job(reset_user_data_usage, "interval", coalesce=True, hours=1) @app.exception_handler(RequestValidationError)