Пример #1
0
def clear_cache():
    _apps = Application.objects.all()
    time_threshold = datetime.now() - timedelta(days=2)
    for app in _apps:
        camel_case = "".join(x.title() for x in app.pk.split('_'))
        task_model = apps.get_model(".".join([app.pk, camel_case + "Task"]))
        history_model = apps.get_model(".".join([app.pk, "UserHistory"]))
        tasks = task_model.objects.filter(execution_start__lt=time_threshold)
        for task in tasks:
            history_model.objects.filter(task_id=task.pk).delete()
            shutil.rmtree(task.get_result_path())
            task.delete()
    print("Cache Cleared.")
Пример #2
0
def get_tasks(djsurvey):
    result = list()
    try:
        for task in models.ScheduledTasks.objects.filter(survey=djsurvey).all():
            # Prune any tasks that are done or resulted in an error.
            if not AsyncResult(task.celeryid).state in [states.PENDING, states.RETRY]:
                task.delete()
            else:
                result.append(task)

        return result

    except models.ScheduledTasks.DoesNotExist:
        return []
Пример #3
0
def cancel_task(task_manager=None, booking_id=None, task=None):
    task_id = task if task else task_manager.get(booking_id)

    if task_id:
        qs = PeriodicTask.objects.filter(id=task_id)

        if qs.exists():
            task = qs.first()
            qs_cron = CrontabSchedule.objects.filter(id=task.crontab.id)

            if qs_cron.exists():
                crontab = qs_cron.first()
                crontab.delete()

            task.delete()
Пример #4
0
def queue_timed_write_and_render(djsurvey):
    with models.LockedSurvey(djsurvey.id):
        try:
            task = models.ScheduledTasks.objects.get(survey=djsurvey, task='render')

            # Will the task still run?
            if AsyncResult(task.celeryid).state in [states.PENDING, states.RETRY]:
                return

            # Seems like the task will not run, so remove the old one
            task.delete()
        except models.ScheduledTasks.DoesNotExist:
            pass

        # And queue a new task
        result = write_and_render_questionnaire.apply_async(args=(djsurvey.id, ), countdown=1)

        # Note in DB, that it is queued
        models.ScheduledTasks(celeryid=result.task_id, survey=djsurvey, task='render').save()