mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-09 12:30:15 +02:00
Merge branch 'lock' of https://github.com/R4stl1n/allianceauth
Conflicts: services/managers/eve_api_manager.py
This commit is contained in:
commit
046ecce8a3
@ -9,6 +9,7 @@ zeroc-ice
|
|||||||
slugify
|
slugify
|
||||||
requests-oauthlib
|
requests-oauthlib
|
||||||
sleekxmpp
|
sleekxmpp
|
||||||
|
redis
|
||||||
|
|
||||||
# Django Stuff #
|
# Django Stuff #
|
||||||
django>=1.10,<2.0
|
django>=1.10,<2.0
|
||||||
|
@ -25,9 +25,38 @@ from notifications import notify
|
|||||||
from celery.task import periodic_task
|
from celery.task import periodic_task
|
||||||
from celery.task.schedules import crontab
|
from celery.task.schedules import crontab
|
||||||
from eveonline.managers import EveManager
|
from eveonline.managers import EveManager
|
||||||
|
import redis
|
||||||
|
|
||||||
|
REDIS_CLIENT = redis.Redis()
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# http://loose-bits.com/2010/10/distributed-task-locking-in-celery.html
|
||||||
|
def only_one(function=None, key="", timeout=None):
|
||||||
|
"""Enforce only one celery task at a time."""
|
||||||
|
|
||||||
|
def _dec(run_func):
|
||||||
|
"""Decorator."""
|
||||||
|
|
||||||
|
def _caller(*args, **kwargs):
|
||||||
|
"""Caller."""
|
||||||
|
ret_value = None
|
||||||
|
have_lock = False
|
||||||
|
lock = REDIS_CLIENT.lock(key, timeout=timeout)
|
||||||
|
try:
|
||||||
|
have_lock = lock.acquire(blocking=False)
|
||||||
|
if have_lock:
|
||||||
|
ret_value = run_func(*args, **kwargs)
|
||||||
|
finally:
|
||||||
|
if have_lock:
|
||||||
|
lock.release()
|
||||||
|
|
||||||
|
return ret_value
|
||||||
|
|
||||||
|
return _caller
|
||||||
|
|
||||||
|
return _dec(function) if function is not None else _dec
|
||||||
|
|
||||||
|
|
||||||
@periodic_task(run_every=crontab(minute="*/30"))
|
@periodic_task(run_every=crontab(minute="*/30"))
|
||||||
def run_ts3_group_update():
|
def run_ts3_group_update():
|
||||||
@ -410,6 +439,7 @@ def update_all_teamspeak3_groups():
|
|||||||
|
|
||||||
|
|
||||||
@task(bind=True)
|
@task(bind=True)
|
||||||
|
@only_one(key="Discord", timeout=60*5)
|
||||||
def update_discord_groups(self, pk):
|
def update_discord_groups(self, pk):
|
||||||
user = User.objects.get(pk=pk)
|
user = User.objects.get(pk=pk)
|
||||||
logger.debug("Updating discord groups for user %s" % user)
|
logger.debug("Updating discord groups for user %s" % user)
|
||||||
@ -459,6 +489,7 @@ def update_all_discord_nicknames():
|
|||||||
|
|
||||||
|
|
||||||
@task(bind=True)
|
@task(bind=True)
|
||||||
|
@only_one(key="Discourse", timeout=60*5)
|
||||||
def update_discourse_groups(self, pk):
|
def update_discourse_groups(self, pk):
|
||||||
user = User.objects.get(pk=pk)
|
user = User.objects.get(pk=pk)
|
||||||
logger.debug("Updating discourse groups for user %s" % user)
|
logger.debug("Updating discourse groups for user %s" % user)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user