forked from CGM_Public/pretix_original
Add verbose output to runperiodic management command
This commit is contained in:
@@ -1,6 +1,11 @@
|
|||||||
|
import time
|
||||||
|
import traceback
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.management import call_command
|
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
|
from django.dispatch.dispatcher import NO_RECEIVERS
|
||||||
|
|
||||||
|
from pretix.helpers.periodic import SKIPPED
|
||||||
|
|
||||||
from ...signals import periodic_task
|
from ...signals import periodic_task
|
||||||
|
|
||||||
@@ -9,12 +14,27 @@ class Command(BaseCommand):
|
|||||||
help = "Run periodic tasks"
|
help = "Run periodic tasks"
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
for recv, resp in periodic_task.send_robust(self):
|
verbosity = int(options['verbosity'])
|
||||||
if isinstance(resp, Exception):
|
|
||||||
|
if not periodic_task.receivers or periodic_task.sender_receivers_cache.get(self) is NO_RECEIVERS:
|
||||||
|
return
|
||||||
|
|
||||||
|
for receiver in periodic_task._live_receivers(self):
|
||||||
|
if verbosity > 1:
|
||||||
|
self.stdout.write(f'Running {receiver.__module__}.{receiver.__name__}…')
|
||||||
|
t0 = time.time()
|
||||||
|
try:
|
||||||
|
r = receiver(signal=periodic_task, sender=self)
|
||||||
|
except Exception as err:
|
||||||
if settings.SENTRY_ENABLED:
|
if settings.SENTRY_ENABLED:
|
||||||
from sentry_sdk import capture_exception
|
from sentry_sdk import capture_exception
|
||||||
capture_exception(resp)
|
capture_exception(err)
|
||||||
else:
|
else:
|
||||||
raise resp
|
self.stdout.write(self.style.ERROR(f'FAIL: {str(err)}\n'))
|
||||||
|
traceback.print_exc()
|
||||||
call_command('clearsessions')
|
else:
|
||||||
|
if options.get('verbosity') > 1:
|
||||||
|
if r is SKIPPED:
|
||||||
|
self.stdout.write(self.style.SUCCESS(f'Skipped {receiver.__module__}.{receiver.__name__}'))
|
||||||
|
else:
|
||||||
|
self.stdout.write(self.style.SUCCESS(f'Completed {receiver.__module__}.{receiver.__name__} in {round(time.time() - t0, 3)}s'))
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.core.management import call_command
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
@@ -40,3 +41,9 @@ def clean_cached_tickets(sender, **kwargs):
|
|||||||
cf.delete()
|
cf.delete()
|
||||||
for cf in CachedCombinedTicket.objects.filter(created__lte=now() - timedelta(minutes=30), file__isnull=True):
|
for cf in CachedCombinedTicket.objects.filter(created__lte=now() - timedelta(minutes=30), file__isnull=True):
|
||||||
cf.delete()
|
cf.delete()
|
||||||
|
|
||||||
|
|
||||||
|
@receiver(signal=periodic_task)
|
||||||
|
@scopes_disabled()
|
||||||
|
def clearsessions(sender, **kwargs):
|
||||||
|
call_command('clearsessions')
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ from django.core.cache import cache
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
SKIPPED = object()
|
||||||
|
|
||||||
|
|
||||||
def minimum_interval(minutes_after_success, minutes_after_error=0, minutes_running_timeout=30):
|
def minimum_interval(minutes_after_success, minutes_after_error=0, minutes_running_timeout=30):
|
||||||
"""
|
"""
|
||||||
@@ -26,12 +28,12 @@ def minimum_interval(minutes_after_success, minutes_after_error=0, minutes_runni
|
|||||||
running_val = cache.get(key_running)
|
running_val = cache.get(key_running)
|
||||||
if running_val:
|
if running_val:
|
||||||
# Currently running
|
# Currently running
|
||||||
return
|
return SKIPPED
|
||||||
|
|
||||||
result_val = cache.get(key_result)
|
result_val = cache.get(key_result)
|
||||||
if result_val:
|
if result_val:
|
||||||
# Has run recently
|
# Has run recently
|
||||||
return
|
return SKIPPED
|
||||||
|
|
||||||
uniqid = str(uuid.uuid4())
|
uniqid = str(uuid.uuid4())
|
||||||
cache.set(key_running, uniqid, timeout=minutes_running_timeout * 60)
|
cache.set(key_running, uniqid, timeout=minutes_running_timeout * 60)
|
||||||
|
|||||||
Reference in New Issue
Block a user