class Context(object): def __init__(self): self.service = TaskProxyService(self) self.datastore = None self.conn = None self.instance = None self.running = Event() def put_status(self, state, result=None, exception=None): obj = {'status': state, 'result': None} if result: obj['result'] = result if exception: obj['error'] = serialize_error(exception) self.conn.call_sync('task.put_status', obj) def main(self): if len(sys.argv) != 2: print("Invalid number of arguments", file=sys.stderr) sys.exit(errno.EINVAL) key = sys.argv[1] logging.basicConfig(file=sys.stdout, level=logging.DEBUG) try: self.datastore = get_default_datastore() self.conn = Client() self.conn.connect('127.0.0.1') self.conn.login_service('task.{0}'.format(os.getpid())) self.conn.enable_server() self.conn.rpc.register_service_instance('taskproxy', self.service) task = self.conn.call_sync('task.checkin', key) module = imp.load_source('plugin', task['filename']) setproctitle.setproctitle('task executor (tid {0})'.format( task['id'])) try: self.instance = getattr(module, task['class'])( DispatcherWrapper(self.conn), self.datastore) self.instance.configstore = ConfigStore(self.datastore) self.running.set() result = self.instance.run(*task['args']) except BaseException, err: print("Task exception: {0}".format(str(err)), file=sys.stderr) traceback.print_exc(file=sys.stderr) self.put_status('FAILED', exception=err) else:
class Context(object): def __init__(self): self.service = TaskProxyService(self) self.datastore = None self.conn = None self.instance = None self.running = Event() def put_status(self, state, result=None, exception=None): obj = {"status": state, "result": None} if result: obj["result"] = result if exception: obj["error"] = serialize_error(exception) self.conn.call_sync("task.put_status", obj) def main(self): if len(sys.argv) != 2: print("Invalid number of arguments", file=sys.stderr) sys.exit(errno.EINVAL) key = sys.argv[1] logging.basicConfig(file=sys.stdout, level=logging.DEBUG) try: self.datastore = get_default_datastore() self.conn = Client() self.conn.connect("127.0.0.1") self.conn.login_service("task.{0}".format(os.getpid())) self.conn.enable_server() self.conn.rpc.register_service_instance("taskproxy", self.service) task = self.conn.call_sync("task.checkin", key) module = imp.load_source("plugin", task["filename"]) setproctitle.setproctitle("task executor (tid {0})".format(task["id"])) try: self.instance = getattr(module, task["class"])(DispatcherWrapper(self.conn), self.datastore) self.instance.configstore = ConfigStore(self.datastore) self.running.set() result = self.instance.run(*task["args"]) except BaseException, err: print("Task exception: {0}".format(str(err)), file=sys.stderr) traceback.print_exc(file=sys.stderr) self.put_status("FAILED", exception=err) else: