Ejemplo n.º 1
0
Archivo: job.py Proyecto: jokar/minion
    def from_message(cls, message, message_data, on_ack=noop, logger=None,
            eventer=None, hostname=None):
        """Create a :class:`TaskRequest` from a task message sent by
        :class:`celery.messaging.TaskPublisher`.

        :raises UnknownTaskError: if the message does not describe a task,
            the message is also rejected.

        :returns :class:`TaskRequest`:

        """
        task_name = message_data["task"]
        task_id = message_data["id"]
        args = message_data["args"]
        kwargs = message_data["kwargs"]
        retries = message_data.get("retries", 0)
        eta = maybe_iso8601(message_data.get("eta"))
        expires = maybe_iso8601(message_data.get("expires"))

        _delivery_info = getattr(message, "delivery_info", {})
        delivery_info = dict((key, _delivery_info.get(key))
                                for key in WANTED_DELIVERY_INFO)

        if not hasattr(kwargs, "items"):
            raise InvalidTaskError("Task kwargs must be a dictionary.")

        return cls(task_name, task_id, args, kwdict(kwargs),
                   retries=retries, on_ack=on_ack,
                   delivery_info=delivery_info, logger=logger,
                   eventer=eventer, hostname=hostname,
                   eta=eta, expires=expires)
Ejemplo n.º 2
0
        return datetime.fromtimestamp(heartbeat)

    def handle_worker(self, (hostname, worker)):
        return self.WorkerState.objects.update_or_create(
                    hostname=hostname,
                    defaults={"last_heartbeat":
                        self.get_heartbeat(worker)})

    def handle_task(self, (uuid, task), worker=None):
        if task.worker.hostname:
            worker = self.handle_worker((task.worker.hostname, task.worker))
        return self.update_task(task.state, task_id=uuid,
                defaults={"name": task.name,
                          "args": task.args,
                          "kwargs": task.kwargs,
                          "eta": maybe_iso8601(task.eta),
                          "expires": maybe_iso8601(task.expires),
                          "state": task.state,
                          "tstamp": datetime.fromtimestamp(task.timestamp),
                          "result": task.result or task.exception,
                          "traceback": task.traceback,
                          "runtime": task.runtime,
                          "worker": worker})

    def update_task(self, state, **kwargs):
        objects = self.TaskState.objects
        defaults = kwargs.pop("defaults", None) or {}
        try:
            obj = objects.get(**kwargs)
        except ObjectDoesNotExist:
            if not defaults.get("name"):
Ejemplo n.º 3
0
        return obj

    def handle_task(self, (uuid, task), worker=None):
        if task.worker and task.worker.hostname:
            worker = self.handle_worker((task.worker.hostname, task.worker))
        return self.update_task(task.state,
                                task_id=uuid,
                                defaults={
                                    "name":
                                    task.name,
                                    "args":
                                    task.args,
                                    "kwargs":
                                    task.kwargs,
                                    "eta":
                                    maybe_iso8601(task.eta),
                                    "expires":
                                    maybe_iso8601(task.expires),
                                    "state":
                                    task.state,
                                    "tstamp":
                                    datetime.fromtimestamp(task.timestamp),
                                    "result":
                                    task.result or task.exception,
                                    "traceback":
                                    task.traceback,
                                    "runtime":
                                    task.runtime,
                                    "worker":
                                    worker
                                })