def test_match_only(self): config = TemplateMinerConfig() config.drain_extra_delimiters = ["_"] mi = MaskingInstruction( "((?<=[^A-Za-z0-9])|^)([\\-\\+]?\\d+)((?=[^A-Za-z0-9])|$)", "NUM") config.masking_instructions.append(mi) tm = TemplateMiner(None, config) res = tm.add_log_message("aa aa aa") print(res) res = tm.add_log_message("aa aa bb") print(res) res = tm.add_log_message("xx yy zz") print(res) res = tm.add_log_message("rrr qqq 123") print(res) c = tm.match("aa aa tt") self.assertEqual(1, c.cluster_id) c = tm.match("aa aa 12") self.assertEqual(1, c.cluster_id) c = tm.match("xx yy zz") self.assertEqual(2, c.cluster_id) c = tm.match("xx yy rr") self.assertIsNone(c) c = tm.match("nothing") self.assertIsNone(c) c = tm.match("rrr qqq 456 ") self.assertEqual(3, c.cluster_id) c = tm.match("rrr qqq 555.2") self.assertIsNone(c) c = tm.match("rrr qqq num") self.assertIsNone(c)
def test_match_strategies(self): miner = TemplateMiner() print(miner.add_log_message("training4Model start")) print(miner.add_log_message("loadModel start")) print(miner.add_log_message("loadModel stop")) print(miner.add_log_message("this is a test")) miner.drain.print_tree() self.assertIsNotNone( miner.match("loadModel start", full_search_strategy="fallback")) self.assertIsNotNone( miner.match("loadModel start", full_search_strategy="always")) self.assertIsNone( miner.match("loadModel start", full_search_strategy="never")) print(miner.add_log_message("loadModel start")) self.assertIsNotNone( miner.match("loadModel start", full_search_strategy="fallback")) self.assertIsNotNone( miner.match("loadModel start", full_search_strategy="always")) self.assertIsNotNone( miner.match("loadModel start", full_search_strategy="never")) config = TemplateMinerConfig() config.parametrize_numeric_tokens = False miner = TemplateMiner(config=config) print(miner.add_log_message("training4Model start")) print(miner.add_log_message("loadModel start")) print(miner.add_log_message("loadModel stop")) print(miner.add_log_message("this is a test")) self.assertIsNotNone( miner.match("loadModel start", full_search_strategy="fallback")) self.assertIsNotNone( miner.match("loadModel start", full_search_strategy="always")) self.assertIsNotNone( miner.match("loadModel start", full_search_strategy="never")) self.assertIsNone(miner.match("", full_search_strategy="never")) self.assertIsNone(miner.match("", full_search_strategy="always")) self.assertIsNone(miner.match("", full_search_strategy="fallback")) print(miner.add_log_message("")) self.assertIsNotNone(miner.match("", full_search_strategy="never")) self.assertIsNotNone(miner.match("", full_search_strategy="always")) self.assertIsNotNone(miner.match("", full_search_strategy="fallback"))
log_line = input("> ") if log_line == 'q': break result = template_miner.add_log_message(log_line) result_json = json.dumps(result) print(result_json) template = result["template_mined"] params = template_miner.extract_parameters(template, log_line) print("Parameters: " + str(params)) print("Training done. Mined clusters:") for cluster in template_miner.drain.clusters: print(cluster) print( f"Starting inference mode, matching to pre-trained clusters. Input log lines or 'q' to finish" ) while True: log_line = input("> ") if log_line == 'q': break cluster = template_miner.match(log_line) if cluster is None: print(f"No match found") else: template = cluster.get_template() print(f"Matched template #{cluster.cluster_id}: {template}") print( f"Parameters: {template_miner.get_parameter_list(template, log_line)}" )