コード例 #1
0
ファイル: agent.py プロジェクト: slient2010/ManageGame
 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)
コード例 #2
0
ファイル: agent.py プロジェクト: yxt714245005/swall
 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)
コード例 #3
0
ファイル: agent.py プロジェクト: slient2010/ManageGame
    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)
コード例 #4
0
ファイル: agent.py プロジェクト: fangyijoe/swall
    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
コード例 #5
0
ファイル: agent.py プロジェクト: zzzz123321/swall
    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
コード例 #6
0
ファイル: agent.py プロジェクト: yxt714245005/swall
    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)