def show_major_edges(ns): conf = open_logdag_config(ns) args = arguments.name2args(ns.argname, conf) from . import edge_search ldag = showdag.LogDAG(args) ldag.load() g = showdag.apply_filter(ldag, ns.filters, th=ns.threshold) if ns.detail: context = "detail" elif ns.instruction: context = "instruction" else: context = "edge" from ..__main__ import _parse_condition search_condition = _parse_condition(ns.conditions) print( edge_search.show_sorted_edges(ldag, search_condition=search_condition, feature=ns.feature, score=ns.score, reverse=True, view_context=context, load_cache=(not ns.nocache), graph=g))
def search_similar_dag(ns): conf = open_logdag_config(ns) args = arguments.name2args(ns.argname, conf) from . import edge_search ldag = showdag.LogDAG(args) ldag.load() buf = edge_search.search_similar_dag(ldag, feature=ns.feature, weight=ns.score_weight, dag_topn=10, cause_topn=10) print(buf)
def show_match(ns): conf = open_logdag_config(ns) from . import trouble tm = trouble.init_trouble_manager(conf) from logdag import showdag from . import match_edge tr = tm[ns.tid] d_args = match_edge.match_edges(conf, tr, rule=ns.rule, cond=ns.cond) cnt = sum([len(l_edge) for l_edge in d_args.values()]) print("{0[date]} ({0[group]}): {1}".format(tr.data, cnt)) for name, l_edge in d_args.items(): r = showdag.LogDAG(arguments.name2args(name, conf)) r.load() for edge in l_edge: edgestr = r.edge_str(edge, graph=r.graph.to_undirected()) print(name, edgestr)
def separate_args(conf, tr): """Some troubles can appear among multiple days. This function separates DAG arguments and corresponding logs. """ from logdag import arguments am = arguments.ArgumentManager(conf) am.load() from amulog import log_db ld = log_db.LogData(arguments.open_amulog_config(conf)) d_args = defaultdict(list) for lid in tr.data["message"]: lm = ld.get_line(lid) for args in am.args_from_time(lm.dt): name = arguments.args2name(args) d_args[name].append(lm) return [(arguments.name2args(name, conf), l_lm) for name, l_lm in d_args.items()]
def show_edges_temporal_sort(ns): conf = open_logdag_config(ns) args = arguments.name2args(ns.argname, conf) from . import edge_search ldag = showdag.LogDAG(args) ldag.load() g = showdag.apply_filter(ldag, ns.filters, th=ns.threshold) if ns.detail: context = "detail" elif ns.instruction: context = "instruction" else: context = "edge" from logdag import dtutil if ns.timestr_end is None: dt = dtutil.shortstr2dt(ns.timestr) time_condition = {"time": dt} else: dts = dtutil.shortstr2dt(ns.timestr) dte = dtutil.shortstr2dt(ns.timestr_end) time_condition = {"time_range": (dts, dte)} from ..__main__ import _parse_condition search_condition = _parse_condition(ns.conditions) print( edge_search.edge_temporal_sort(ldag, time_condition, search_condition=search_condition, reverse=ns.reverse, view_context=context, load_cache=(not ns.nocache), graph=g))
def _dag_from_name(conf, name): args = arguments.name2args(name, conf) r = showdag.LogDAG(args) r.load() return r