Exemple #1
0
    def create_flow(self, process_id):
        flow = Flow()  # 初始化一个flow实例
        config = self.get_config()

        # 检查配置项是否存在
        if not config.get("common")["inputdir"]:
            logging.error("ERROR>>no inputdir in %s<< " % self.config_file)
            sys.exit()
        self.input_dir = config.get("common")["inputdir"]

        if not config.get("common")["input_rule_exp"]:
            logging.error("ERROR>>no input_rule_exp in %s<< " %
                          self.config_file)
            sys.exit()

        self.match_expr = config.get("common")["input_rule_exp"]

        if not config.get("common")["redopath"]:
            logging.error("ERROR>>no redopath in %s<< " % self.config_file)
            sys.exit()
        redo_path = config.get("common")["redopath"]

        if not config.get("common")["fieldlen"]:
            logging.error("ERROR>>no fieldlen in %s<< " % self.config_file)
            sys.exit()
        fieldlen = config.get("common")["fieldlen"]

        if not config.get("common")["line_limit"]:
            logging.error("ERROR>>no line_limit in %s<< " % self.config_file)
            sys.exit()
        line_limit = config.get("common")["line_limit"]
        if line_limit == "":
            line_limit = 20000
        if not config.get("common")["rules"]:
            logging.error('ERROR>>no rules in config<<')
            sys.exit()
        rule_list = config.get("common")["rules"].split(",")

        self.batch_size = config.get("common")["batchsize"]

        if not config.get("common")["bakpath"]:
            logging.error('ERROR>>no bakpath in config<<')
            sys.exit()
        bak_path = config.get("common")["bakpath"]

        flow.set_fieldlen(fieldlen)
        flow.set_line_limit(int(line_limit))
        flow.set_process_id(process_id)
        flow.set_redo_path(redo_path)
        flow.set_bak(bak_path)

        output_dirs = {}
        # 检查各rule是否配置了输出目录
        for rule in rule_list:
            output_dir = config.get(rule)["destdir"]
            if output_dir == "":
                logging.error("rule:%s no destdir" % rule)
                sys.exit()
            output_dirs = {rule: output_dir}

        # 检查配置文件中的路径信息是否存在
        all_path = {
            'inputdir': self.input_dir,
            'redopath': redo_path,
            'bakpath': bak_path
        }
        all_path.update(output_dirs)
        self.output_dirs = all_path
        verify = Verify(all_path)
        if not verify.check_path():
            sys.exit()

        self.process_input_dir = self.input_dir + "/" + process_id
        flow.set_dir(self.process_input_dir)

        for rule_name in rule_list:
            _config = {'rulename': rule_name}
            rule_items = config.get(rule_name)
            _config.update(rule_items)
            flow.add_rule(Rule(_config))  # 返回一个fields
        flow.config = config
        return flow