Esempio n. 1
0
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
Esempio n. 2
0
    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)
Esempio n. 3
0
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
Esempio n. 4
0
    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