コード例 #1
0
def task_status_ajax(request, task_id):
    """returns a JSON representation of the task state"""
    if settings.DEBUG:  # show results for task in debug mode
        valid_request = True
    else:
        valid_request = request.is_ajax()

    if valid_request:
        try:
            task = celery.AsyncResult(task_id)
            if task.state == TaskState.PENDING:
                response = {
                    "state": "pending",
                    "status_message": "try to start task"
                }

            elif task.state == TaskState.STARTED or task.state.lower() == TaskState.PROCESSING:
                response = {
                    "state": "processing",
                    "status_message": task.info.get("status_message", "")
                }

            elif task.state == TaskState.SUCCESS:
                response = {
                    "state": "success",
                    "status_message": task.info.get("status_message", "")
                }
                if "error_message" in task.info:
                    response["error_message"] = task.info["error_message"]

                if "data" in task.info:
                    response["data"] = task.info["data"]

            else:
                # something went wrong in the within the task
                response = {
                    "state": "failed",
                    "error_message": str(task.info),  # this is the exception that was raised
                }

        except redis.ConnectionError:
            logger.error("cannot get task update", exc_info=True)
            response = {
                "state": "failed",
                "error_message": "A server process (redis) is not running, please contact the administrator"
            }

        except Exception:  # catch any exception
            logger.error("cannot get task update", exc_info=True)
            response = {
                "state": "failed",
                "error_message": "Unknown error: " + str(task.info),  # this is the exception raised
            }
        logger.debug("task state for %s is\n%s" % (task_id, str(response)))

        return JsonResponse(response)

    else:
        return HttpResponse("Bad Request", status=400)
コード例 #2
0
ファイル: __init__.py プロジェクト: yhz231/product-database
def get_task_state_message(task_id):
    if task_id is None:
        return "Task ID not found, the initial import was not executed or the results are already deleted"

    result = "(Task not found)"

    task = celery.AsyncResult(task_id)
    if task.status != "PENDING":
        result = "State:   %s\nMessage: %s" % (
            task.state, task.info.get("status_message", "Status not found"))

    return result
コード例 #3
0
ファイル: monitor.py プロジェクト: gstrat/synenosis
    def get(self, request, *args, **kwargs):
        job_id = request.GET.get('job')

        from django_project.celery import app
        try:
            job = app.AsyncResult(job_id)
        except:
            return HttpResponseBadRequest()

        if job.state == 'SUCCESS':
            try:
                fmessage = job.info.get('fmessage')
            except:
                result = {
                    'message': 'The process has finished.',
                    'progress': 100
                }
            else:
                # the task has actually failed but we caught the exception to
                # display an appropriate message to the user
                result = {'error': 1, 'message': fmessage}
        elif job.state == 'PENDING':
            result = {
                'message': 'Waiting for the importer to start...',
                'progress': 3
            }
        elif job.state == 'STARTED':
            result = {'message': 'The import has started.', 'progress': 5}
        elif job.state == 'FAILURE':
            result = {
                'error': 1,
                'message': 'The import has failed. Please retry later.'
            }
        elif job.state == 'PROGRESS':
            message = job.info.get('message')
            progress = job.info.get('progress')
            result = {'message': message, 'progress': progress}
        else:
            result = {'message': 'The import state is unknown...'}

        return JsonResponse(result)