exc yaml¶
Process yaml file generated by exc utility.
https://github.com/a-services/jbang-catalog/blob/main/exc.java
Extract line numbers for exceptions and print then in chunks of chunk_length
import yaml
import argparse
parser = argparse.ArgumentParser(description="exc yaml")
parser.add_argument("log_path", help="Log path")
parser.add_argument("-c", "--chunk-length", help="Length of exception stack trace chunk", type=int, default=10)
args = parser.parse_args()
log_path = args.log_path
chunk_length = args.chunk_length
def read_yaml(file_path):
with open(file_path, 'r') as file:
# Load all documents from the YAML file
yaml_content = yaml.safe_load(file)
return [item['lno'] for item in yaml_content]
def extract_lines(log_path, line_numbers):
lines_to_extract = set()
# Include the three following lines for each line number
for line in line_numbers:
lines_to_extract.update(range(line, line + chunk_length))
extracted_lines = {}
with open(log_path, 'r') as file:
for i, line in enumerate(file, 1):
if i in lines_to_extract:
extracted_lines[i] = line.rstrip()
return extracted_lines
def write_output(extracted_lines, output_path):
k1 = 0
with open(output_path, 'w') as file:
for k2 in sorted(extracted_lines.keys()):
if k2 > k1 + 1:
file.write("\n\n")
k1 = k2
file.write(f"{k2}: {extracted_lines[k2]}\n")
yaml_path = log_path + '.yml'
output_path = log_path + '.txt'
line_numbers = read_yaml(yaml_path)
extracted_lines = extract_lines(log_path, line_numbers)
write_output(extracted_lines, output_path)
print(f"[exc_yaml] Extraction complete with chunk length: {chunk_length}")
print(f"[exc_yaml] Output file: {output_path}")