def generate_json(iter_fp, conf): ha = host_alias.HostAlias(conf["general"]["host_alias_filename"]) sources = conf.options("source") d_group = defaultdict(list) for fp in iter_fp: try: tmp_host, mod_cls, mod_id = parse_filename(fp, conf) host = ha.resolve_host(tmp_host) if host is not None: d_group[(host, mod_cls, mod_id)].append(fp) except ValueError: pass d_source = defaultdict(list) for (host, mod_cls, mod_id), l_fp in d_group.items(): for source_name in sources: if mod_cls in config.getlist(conf, "source", source_name): d_source[source_name].append({ "filelist": l_fp, "host": host, "mod_cls": mod_cls, "mod_id": mod_id }) # generate vsource: dict with src, func d_vsource = {} for vsource_name in conf.options("vsource"): src, func = config.getlist(conf, "vsource", vsource_name) d = {"src": src, "func": func} d_vsource[vsource_name] = d # generate features: dict of feature # feature: name, source, column, func_list d_feature = {} for feature_name in sorted(conf.options("feature")): tmp = config.getlist(conf, "feature", feature_name) sourcename = tmp[0] keyfunc = tmp[1] l_postfunc = tmp[2:] d = { "name": feature_name, "source": sourcename, "column": keyfunc, "func_list": l_postfunc } if "in" in keyfunc: d["direction"] = "in" d["group"] = "interface" elif "out" in keyfunc: d["direction"] = "out" d["group"] = "interface" else: d["group"] = "system" d_feature[feature_name] = d js = {"source": d_source, "vsource": d_vsource, "feature": d_feature} return js
def __init__(self, conf, fn=None, pos_unknown="unknown"): self._ext = {} self._re = {} self.pos_unknown = pos_unknown self.conf = conf self._ha = host_alias.HostAlias(conf) if fn is not None: self._load_rule(fn)
def generate_json(iter_fp, conf): ha = host_alias.HostAlias(conf["general"]["host_alias_filename"]) sources = conf["source"].keys() d_group = defaultdict(list) for fp in iter_fp: try: tmp_host, mod_cls, mod_id = parse_filename(fp, conf) host = ha.resolve_host(tmp_host) if host is not None: d_group[(host, mod_cls, mod_id)].append(fp) except ValueError: pass d_source = defaultdict(list) for (host, mod_cls, mod_id), l_fp in d_group.items(): for source_name in sources: if mod_cls in conf["source"][source_name]: d_source[source_name].append({"filelist": l_fp, "host": host, "mod_cls": mod_cls, "mod_id": mod_id}) # generate vsource: dict with src, func d_vsource = {} for vsource_name, d_tmp in conf["vsource"].items(): d = {"src": d_tmp["org"], "func": d_tmp["func"]} d_vsource[vsource_name] = d # generate features: dict of feature # feature: name, source, column, func_list d_feature = conf['feature'] #d_feature = {} #for tmp_dict in conf["feature"]: #tmp = config.getlist(conf, "feature", feature_name) #sourcename = tmp[0] #keyfunc = tmp[1] #l_postfunc = tmp[2:] #d = {"name": feature_name, # "source": sourcename, # "column": keyfunc, # "func_list": l_postfunc} #if "in" in keyfunc: # d["direction"] = "in" # d["group"] = "interface" #elif "out" in keyfunc: # d["direction"] = "out" # d["group"] = "interface" #else: # d["group"] = "system" #d_feature[feature_name] = d js = {"source": d_source, "vsource": d_vsource, "feature": d_feature} return js
def __init__(self, conf, parallel=None, dry=False): super().__init__(conf, dry=dry) self.parallel = parallel self._srcdb = conf["general"]["snmp_source"] if self._srcdb == "rrd": from . import src_rrd self.source = src_rrd.RRDLoader(conf) elif self._srcdb == "influx": source_dbname = conf["database_influx"]["snmp_source_dbname"] from . import influx self.source = influx.init_influx(conf, source_dbname, df=False) else: raise NotImplementedError self.evdb = self._init_evdb(conf, "snmp_dbname") # self._dstdb = conf["general"]["evdb"] # if self._dstdb == "influx": # dbname = conf["database_influx"]["snmp_dbname"] # from . import influx # self.evdb = influx.init_influx(conf, dbname, df=False) # else: # raise NotImplementedError self._ha = host_alias.HostAlias(conf["general"]["host_alias_filename"]) snmp_def = conf["general"]["snmp_feature_def"] with open(snmp_def, "r") as f: jsobj = json.load(f) # self._d_source: list of dict: seriesdef # seriesdef keys: filelist, host, mod_cls, mod_id self._d_source = jsobj["source"] self._d_vsourcedef = jsobj["vsource"] self._init_vsource() if isinstance(jsobj["feature"], list): self._d_feature = jsobj["feature"] elif isinstance(jsobj["feature"], dict): # for backward compatibility with configparser-style rule self._d_feature = [] for name, fdef in jsobj["feature"].items(): fdef["name"] = name self._d_feature.append(fdef) #self._d_feature = jsobj["feature"] self._d_rfeature = defaultdict(list) for fdef in self._d_feature: src = fdef["source"] #d = {"name": fdef["name"], # "column": self._d_feature[name]["column"], # "func_list": self._d_feature[name]["func_list"]} self._d_rfeature[src].append(fdef) self._feature_unit_term = config.getdur(conf, "general", "evdb_unit_term") self._feature_unit_diff = config.getdur(conf, "general", "evdb_unit_diff") self._feature_bin_size = config.getdur(conf, "general", "evdb_binsize") self._feature_convolve_radius = conf.getint("general", "evdb_convolve_radius") self._mproc = None