mirror of
https://github.com/workhardbekind/workout-challenge.git
synced 2026-07-04 09:23:32 -04:00
first commit
This commit is contained in:
commit
e7f627801f
152 changed files with 35352 additions and 0 deletions
77
src-backend/workout_challenge/celery.py
Normal file
77
src-backend/workout_challenge/celery.py
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
"""Celery task config"""
|
||||
|
||||
import os
|
||||
|
||||
from celery import Celery
|
||||
from celery.schedules import crontab
|
||||
|
||||
# Set the default Django settings module for the 'celery' program.
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "workout_challenge.settings")
|
||||
|
||||
app = Celery("workout_challenge")
|
||||
|
||||
# Using a string here means the worker doesn't have to serialize
|
||||
# the configuration object to child processes.
|
||||
# - namespace='CELERY' means all celery-related configuration keys
|
||||
# should have a `CELERY_` prefix.
|
||||
app.config_from_object("django.conf:settings", namespace="CELERY")
|
||||
|
||||
# Load task modules from all registered Django apps.
|
||||
app.autodiscover_tasks()
|
||||
|
||||
app.conf.beat_schedule = {
|
||||
# every morning import users strava workouts
|
||||
"strava_sync": {
|
||||
"task": "custom_user.strava.daily_strava_sync",
|
||||
"schedule": crontab(minute="44", hour="4"),
|
||||
"args": (),
|
||||
},
|
||||
# not needed - just fallback - do all pending point recalc tasks in the morning
|
||||
"point_recal": {
|
||||
"task": "custom_user.point_recalc.recalc_points",
|
||||
"schedule": crontab(minute="55", hour="5"),
|
||||
"args": (),
|
||||
},
|
||||
# every Monday morning ask people who didn't connect Strava to please log their workouts
|
||||
"send_all_log_workouts_email": {
|
||||
"task": "custom_user.emails.celery_emails.send_all_log_workouts_email",
|
||||
"schedule": crontab(day_of_week="1", minute="5", hour="9"),
|
||||
"args": (),
|
||||
},
|
||||
# every Monday afternoon send competition leaderboards out
|
||||
"send_all_leaderboard_emails": {
|
||||
"task": "custom_user.emails.celery_emails.send_all_leaderboard_emails",
|
||||
"schedule": crontab(day_of_week="1", minute="5", hour="15"),
|
||||
"args": (),
|
||||
},
|
||||
# every Thursday afternoon send weekly check-ins out
|
||||
"send_all_weekly_emails": {
|
||||
"task": "custom_user.emails.celery_emails.send_all_weekly_emails",
|
||||
"schedule": crontab(day_of_week="4", minute="5", hour="15"),
|
||||
"args": (),
|
||||
},
|
||||
# every day at noon send start competition email
|
||||
"send_all_competition_start_email": {
|
||||
"task": "custom_user.emails.celery_emails.send_all_competition_start_email",
|
||||
"schedule": crontab(minute="5", hour="12"),
|
||||
"args": (),
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def is_task_already_executing(task_name: str) -> bool:
|
||||
"""Returns whether the task with given task_name is already being executed.
|
||||
|
||||
Args:
|
||||
task_name: Name of the task to check if it is running currently.
|
||||
Returns: A boolean indicating whether the task with the given task name is
|
||||
running currently.
|
||||
"""
|
||||
active_tasks = app.control.inspect().active()
|
||||
task_count = 0
|
||||
for worker, running_tasks in active_tasks.items():
|
||||
for task in running_tasks:
|
||||
if task["name"] == task_name:
|
||||
task_count += 1
|
||||
|
||||
return task_count > 1
|
||||
Loading…
Add table
Add a link
Reference in a new issue