def _handle_connection_thread(self, sock: SCTSock): try: with ConnectionsWrapper(sock, self._connections): self._timeout.reset() with self._lock: version = sock.recv().payload if not self._plugin.checkVersion(version): sock.send_init("init") data = sock.recv().payload self._plugin.setSettings(version, data) sock.send_init("data") con_pool = multiprocessing.pool.ThreadPool(1) data = sock.recv().payload result = con_pool.apply_async(self._plugin.exec, [data]).get( self._request_timout ) con_pool.close() self.send_data(sock, ErrorCodes.none, result) except multiprocessing.TimeoutError: self.send_data(sock, ErrorCodes.execution_timeout) except TooManyConnectionsError: self.send_data(sock, ErrorCodes.too_many_connections) except Exception as e: traceback = get_traceback(e) self.send_data(sock, ErrorCodes.exception, traceback) print(traceback) finally: sock.close()
def _run_all(self, schedule): try: for c in schedule: if not c.done: self.callback.start(c) self._run_one(c) self.callback.finish(c) c.done = True except: self.callback.unfinish(c) self.callback.log(util.get_traceback())
def request_handler(self, request): try: deserialized_request = self.serializer.deserialize(request) decoded_request = EngineRequest().decode_self(deserialized_request) response = self.execute(decoded_request) encoded_response = response.encode() serialized_response = self.serializer.serialize(encoded_response) return serialized_response except Exception: err = util.get_traceback() self.logger.log(err) response = EngineResponse() \ .set_property('status', 'error') \ .set_property('error', err) encoded_response = response.encode() serialized_response = self.serializer.serialize(encoded_response) return serialized_response
def load_plugins(self): import sys import glob import os.path dirs = glob.glob(os.path.join('plugin', '*')) dirs.sort() for dir in dirs: if not os.path.isdir(dir): continue sys.path.append(dir) files = glob.glob(os.path.join(dir, '*_plugin.py')) files.sort() category = os.path.split(dir)[1] for f in files: try: p = plugin(category, __import__(os.path.split(f)[-1][:-3])) if (p.category, p.name) in [(q.category, q.name) for q in self.plugins]: raise Exception, "Duplicate plugin name: %s/%s" % ( p.category, p.name) self.plugins.append(p) except: MsgBox("Cannot load %s -- \n%s" % (f, util.get_traceback()))
def LogException(self): self.WriteLog(util.get_traceback())