Пример #1
0
    def processNextResponse(self, socket: zmq.Socket):
        try:
            self.log("Awaiting responses")
            response = socket.recv_multipart()
            sId = b2s(response[0])
            header = json.loads(b2s(response[1]))
            type = header["type"]
            self._status = Status.decode(header["status"])

            if type == "xarray" and len(response) > 2:
                dataset = pickle.loads(response[2])
                self.cacheResult(header, dataset)
            elif self._status == Status.ERROR:
                self._exception = Exception(header["error"])
            else:
                self.cacheResult(header, None)

            self.log(f"[{sId}]: Received response: " + str(header) +
                     ", new status = " + str(self._status) + ", exception = " +
                     str(self._exception))

        except Exception as err:
            self.log("EDAS error: {0}\n{1}\n".format(err,
                                                     traceback.format_exc()))
            self._exception = err
Пример #2
0
 def updateStatus(self, message: Dict) -> Dict:
     if "status" in message:
         rid = message["rid"]
         status = Status.decode(message["status"])
         self.statusMap[rid] = status
         message["status"] = status
         if self.debug:
             self.logger.info(f"REST_CLIENT: Update Status Map[{rid}]: " +
                              str(status))
     return message
Пример #3
0
 def updateStatus(self, message: Dict) -> Dict:
     if "status" in message:
         rid = message.get("rid")
         if rid is not None:
             status = Status.decode(message["status"])
             self.statusMap[rid] = status
             message["status"] = status
             if self.debug or status == Status.ERROR:
                 self.logger.info(
                     f"REST_CLIENT: Update Status Map[{rid}]: " +
                     str(status))
     return message
Пример #4
0
 def request(self,
             requestSpec: Dict,
             inputs: List[TaskResult] = None,
             **kwargs) -> TaskHandle:
     response = self.sendMessage("exe", requestSpec, **kwargs)
     self.log(f"Got exe response: {response}")
     if "error" in response:
         raise Exception(f"Server Error: {response['error']}")
     status = Status.decode(response.get('status'))
     self.log(str(response))
     response_manager = ResponseManager(self.context, self.connector,
                                        response["rid"], self.host_address,
                                        self.response_port, status,
                                        self.cache_dir, **kwargs)
     response_manager.start()
     return zmqTask(self.cid, response_manager)
Пример #5
0
    def run(self):
        debug = False
        try:
            self.log("Run RM thread")
            while (self.active):
                if len(self.active_requests) > 0:
                    statMap = self._getStatusMap()
                    for key, value in statMap.items():
                        self.statusMap[key] = Status.decode(value)
                    if debug:
                        self.logger.info("Server Job Status: " + str(statMap) +
                                         ";  Client Job Status: " +
                                         str(self.statusMap))
                time.sleep(self.poll_freq)

        except Exception as err:
            self.log("ResponseManager error: " + str(err))
            self.log(traceback.format_exc())
            self.statusMap.clear()