def do(data): #判断是否需要返回函数help信息 os.chdir(prog_dir()) try: if len(data["payload"]["args"]) == 1 and data["payload"]["args"][0] == "help": ret = self.node_funcs[role][cmd].__doc__ else: ret = self.node_funcs[role][cmd]( *data["payload"]["args"], **data["payload"]["kwargs"] ) except KeyError as exc: ret = "cmd %s not found: %s" % (cmd, str(exc)) except SwallCommandExecutionError as exc: ret = "cmd %s running error: %s" % (cmd, str(exc)) except TypeError as exc: ret = "cmd %s argument error: %s" % (cmd, str(exc)) except: ret = traceback.format_exc() log.error(ret) finally: os.chdir(prog_dir()) data["payload"]["return"] = ret data["payload"]["status"] = "FINISH" self.queues["ret_job"].put(msgpack.dumps(data), timeout=5)
def do(data): #判断是否需要返回函数help信息 os.chdir(prog_dir()) try: if len(data["payload"]["args"] ) == 1 and data["payload"]["args"][0] == "help": ret = self.node_funcs[role][cmd].__doc__ else: ret = self.node_funcs[role][cmd]( *data["payload"]["args"], **data["payload"]["kwargs"]) except KeyError as exc: ret = "cmd %s not found: %s" % (cmd, str(exc)) except SwallCommandExecutionError as exc: ret = "cmd %s running error: %s" % (cmd, str(exc)) except TypeError as exc: ret = "cmd %s argument error: %s" % (cmd, str(exc)) except: ret = traceback.format_exc() log.error(ret) finally: os.chdir(prog_dir()) data["payload"]["return"] = ret data["payload"]["status"] = "FINISH" self.queues["ret_job"].put(msgpack.dumps(data), timeout=5)
def run_job(self): """ 执行任务 """ env_regx = re.compile(r'{([a-zA-Z0-9]+)}') while 1: if self._stop: log.warn("run_job stopping") return if self.locks["mult_run"].acquire(): if self.queues["mult_run"].empty(): self.locks["mult_run"].release() time.sleep(0.5) continue data = msgpack.loads(self.queues["mult_run"].get(timeout=5)) self.queues["mult_run"].task_done() self.locks["mult_run"].release() os.chdir(prog_dir()) ret = '' try: role, cmd, node_name = data["payload"]["role"], data["payload"]["cmd"], data["payload"][ "node_name"] #做一些变量替换,把变量中如{ip}、{node}替换为具体的值 i = 0 args = list(data["payload"]["args"]) data["payload"]["kwargs"].update(self.nodes.get(node_name, {})) while i < len(args): if not isinstance(args[i], str): continue matchs = env_regx.findall(args[i]) for match in matchs: if match in self.sys_envs[role]: val = self.sys_envs[role][match](**data["payload"]["kwargs"]) args[i] = env_regx.sub(val, args[i], count=1) data["payload"]["args"] = args i += 1 kwargs = data["payload"]["kwargs"] for key in kwargs.iterkeys(): if not isinstance(kwargs[key], str): continue matchs = env_regx.findall(kwargs[key]) for match in matchs: if match in self.sys_envs[role]: val = self.sys_envs[role][match](**data["payload"]["kwargs"]) kwargs[key] = env_regx.sub(val, kwargs[key], count=1) log.info("[%s %s] start run job [%s]" % ( data["payload"]["role"], data["payload"]["node_name"], data["payload"]["jid"]) ) #判断是否需要返回函数help信息 if len(data["payload"]["args"]) == 1 and data["payload"]["args"][0] == "help": ret = self.node_funcs[role][cmd].__doc__ else: ret = self.node_funcs[role][cmd]( *data["payload"]["args"], **data["payload"]["kwargs"] ) except KeyError as exc: ret = "cmd %s not found: %s" % (cmd, str(exc)) except SwallCommandExecutionError as exc: ret = "cmd %s running error: %s" % (cmd, str(exc)) except TypeError as exc: ret = "cmd %s argument error: %s" % (cmd, str(exc)) except: ret = traceback.format_exc() log.error(ret) finally: os.chdir(prog_dir()) data["payload"]["return"] = ret data["payload"]["status"] = "FINISH" self.queues["ret_job"].put(msgpack.dumps(data), timeout=5)
def update(self, data): """ 执行任务 """ try: if data["env"] == "aes": data["payload"] = self.crypt.loads(data.get("payload")) cmd = data["payload"]["cmd"] args = list(data["payload"]["args"]) kwargs = data["payload"]["kwargs"] jid = data["payload"]["jid"] # 修改任务状态为RUNNING data_t = deepcopy(data) data_t["payload"]["status"] = "RUNNING" if data_t["env"] == "aes": data_t["payload"] = self.crypt.dumps(data_t.get("payload")) self.mq.set_res(self.node, jid, data_t) os.chdir(prog_dir()) ret = "" # 做一些变量替换,把变量中如{ip}、{node}替换为具体的值 i = 0 kwargs.update({"node_name": self.node, "node_ip": self.node_ip}) env_regx = re.compile(r"{([a-zA-Z0-9]+)}") while i < len(args): if not isinstance(args[i], str): continue matchs = env_regx.findall(args[i]) for match in matchs: if match in self.sys_envs: val = self.sys_envs[match](**kwargs) args[i] = env_regx.sub(val, args[i], count=1) i += 1 data["payload"]["args"] = args for key in kwargs.iterkeys(): if not isinstance(kwargs[key], str): continue matchs = env_regx.findall(kwargs[key]) for match in matchs: if match in self.sys_envs: val = self.sys_envs[match](**kwargs) kwargs[key] = env_regx.sub(val, kwargs[key], count=1) data["payload"]["kwargs"] = kwargs # 判断是否需要返回函数help信息 if len(args) == 1 and args[0] == "help": ret = self.node_funcs[cmd].__doc__ else: ret = self.node_funcs[cmd](*args, **kwargs) except KeyError as exc: ret = "cmd %s not found: %s" % (cmd, str(exc)) except SwallCommandExecutionError as exc: ret = "cmd %s running error: %s" % (cmd, str(exc)) except TypeError as exc: ret = "cmd %s argument error: %s" % (cmd, str(exc)) except: ret = traceback.format_exc() log.error(ret) finally: os.chdir(prog_dir()) data["payload"]["return"] = ret data["payload"]["status"] = "FINISH" if data["env"] == "aes": data["payload"] = self.crypt.dumps(data.get("payload")) self.mq.set_res(self.node, jid, data) return True
def update(self, data): """ 执行任务 """ try: if data["env"] == "aes": data["payload"] = self.crypt.loads(data.get("payload")) cmd = data["payload"]["cmd"] args = list(data["payload"]["args"]) kwargs = data["payload"]["kwargs"] jid = data["payload"]["jid"] #修改任务状态为RUNNING data_t = deepcopy(data) data_t["payload"]["status"] = "RUNNING" if data_t["env"] == "aes": data_t["payload"] = self.crypt.dumps(data_t.get("payload")) self.mq.set_res(self.node, jid, data_t) os.chdir(prog_dir()) ret = '' #做一些变量替换,把变量中如{ip}、{node}替换为具体的值 i = 0 kwargs.update({"node_name": self.node, "node_ip": self.node_ip}) env_regx = re.compile(r'{([a-zA-Z0-9]+)}') while i < len(args): if not isinstance(args[i], str): continue matchs = env_regx.findall(args[i]) for match in matchs: if match in self.sys_envs: val = self.sys_envs[match](**kwargs) args[i] = env_regx.sub(val, args[i], count=1) i += 1 data["payload"]["args"] = args for key in kwargs.iterkeys(): if not isinstance(kwargs[key], str): continue matchs = env_regx.findall(kwargs[key]) for match in matchs: if match in self.sys_envs: val = self.sys_envs[match](**kwargs) kwargs[key] = env_regx.sub(val, kwargs[key], count=1) data["payload"]["kwargs"] = kwargs #判断是否需要返回函数help信息 if len(args) == 1 and args[0] == "help": ret = self.node_funcs[cmd].__doc__ else: ret = self.node_funcs[cmd](*args, **kwargs) except KeyError as exc: ret = "cmd %s not found: %s" % (cmd, str(exc)) except SwallCommandExecutionError as exc: ret = "cmd %s running error: %s" % (cmd, str(exc)) except TypeError as exc: ret = "cmd %s argument error: %s" % (cmd, str(exc)) except: ret = traceback.format_exc() log.error(ret) finally: os.chdir(prog_dir()) data["payload"]["return"] = ret data["payload"]["status"] = "FINISH" if data["env"] == "aes": data["payload"] = self.crypt.dumps(data.get("payload")) self.mq.set_res(self.node, jid, data) return True
def run_job(self): """ 执行任务 """ env_regx = re.compile(r'{([a-zA-Z0-9]+)}') while 1: if self._stop: log.warn("run_job stopping") return if self.locks["mult_run"].acquire(): if self.queues["mult_run"].empty(): self.locks["mult_run"].release() time.sleep(0.5) continue data = msgpack.loads(self.queues["mult_run"].get(timeout=5)) self.queues["mult_run"].task_done() self.locks["mult_run"].release() os.chdir(prog_dir()) ret = '' try: role, cmd, node_name = data["payload"]["role"], data[ "payload"]["cmd"], data["payload"]["node_name"] #做一些变量替换,把变量中如{ip}、{node}替换为具体的值 i = 0 args = list(data["payload"]["args"]) data["payload"]["kwargs"].update( self.nodes.get(node_name, {})) while i < len(args): if not isinstance(args[i], str): continue matchs = env_regx.findall(args[i]) for match in matchs: if match in self.sys_envs[role]: val = self.sys_envs[role][match]( **data["payload"]["kwargs"]) args[i] = env_regx.sub(val, args[i], count=1) data["payload"]["args"] = args i += 1 kwargs = data["payload"]["kwargs"] for key in kwargs.iterkeys(): if not isinstance(kwargs[key], str): continue matchs = env_regx.findall(kwargs[key]) for match in matchs: if match in self.sys_envs[role]: val = self.sys_envs[role][match]( **data["payload"]["kwargs"]) kwargs[key] = env_regx.sub(val, kwargs[key], count=1) log.info( "[%s %s] start run job [%s]" % (data["payload"]["role"], data["payload"]["node_name"], data["payload"]["jid"])) #判断是否需要返回函数help信息 if len(data["payload"]["args"] ) == 1 and data["payload"]["args"][0] == "help": ret = self.node_funcs[role][cmd].__doc__ else: ret = self.node_funcs[role][cmd]( *data["payload"]["args"], **data["payload"]["kwargs"]) except KeyError as exc: ret = "cmd %s not found: %s" % (cmd, str(exc)) except SwallCommandExecutionError as exc: ret = "cmd %s running error: %s" % (cmd, str(exc)) except TypeError as exc: ret = "cmd %s argument error: %s" % (cmd, str(exc)) except: ret = traceback.format_exc() log.error(ret) finally: os.chdir(prog_dir()) data["payload"]["return"] = ret data["payload"]["status"] = "FINISH" self.queues["ret_job"].put(msgpack.dumps(data), timeout=5)