Exemplo n.º 1
0
    def publish(self, resp):
        line = self._marshaller.to_string(resp)

        start = time.time()
        try:
            r = self._session.post(self._url, data=line, auth=self._auth,
                                   timeout=5)
            if r.status_code != 201:
                log.error("Error [%s], Request [%s]", r.text, line)
        finally:
            log_request(resp, log, 'Response: %s [%s] seconds', line,
                        time.time() - start)
Exemplo n.º 2
0
def _worker_main(worker_name, queue, ppid):
    agent = Agent()
    marshaller = type_manager.get_type(type_manager.MARSHALLER)
    publisher = type_manager.get_type(type_manager.PUBLISHER)
    while True:
        try:
            req = None
            line = queue.get(True, 5)

            req = marshaller.from_string(line)

            utils.log_request(req, log, 'Request: %s', line)

            id = req.id
            start = time.time()
            try:
                utils.log_request(req, log, '%s : Starting request %s for %s',
                                  worker_name, id, req.name)
                resp = agent.execute(req)
                if resp is not None:
                    publisher.publish(resp)
            finally:
                duration = time.time() - start
                utils.log_request(req, log,
                                  '%s : Done request %s for %s [%s] seconds',
                                  worker_name, id, req.name, duration)
        except Empty:
            if not _should_run(ppid):
                break
        except FailedToLock as e:
            log.info("%s for %s", e, req.name)
            if not _should_run(ppid):
                break
        except Exception as e:
            error_id = str(uuid.uuid4())
            log.exception("%s : Unknown error", error_id)
            if not _should_run(ppid):
                break

            if req is not None:
                msg = "{0} : {1}".format(error_id, e)

                resp = utils.reply(req)
                if resp is not None:
                    resp["transitioning"] = "error"
                    resp["transitioningInternalMessage"] = msg
                    publisher.publish(resp)