mirror of
https://github.com/arnaucube/sonobe-playground.git
synced 2026-01-13 17:41:28 +01:00
Analyse logs
This commit is contained in:
85
analysis.py
Normal file
85
analysis.py
Normal file
@@ -0,0 +1,85 @@
|
||||
import json
|
||||
|
||||
|
||||
# Function to convert time units to seconds
|
||||
def convert_to_seconds(time_str):
|
||||
if time_str.endswith('µs'):
|
||||
return float(time_str[:-2]) * 1e-6
|
||||
elif time_str.endswith('ms'):
|
||||
return float(time_str[:-2]) * 1e-3
|
||||
elif time_str.endswith('s'):
|
||||
return float(time_str[:-1])
|
||||
return 0
|
||||
|
||||
|
||||
def report(operation, time):
|
||||
return f"{operation}: {time:.6f} seconds"
|
||||
|
||||
|
||||
scenarios = {}
|
||||
free_logs = []
|
||||
|
||||
|
||||
def process_logline(log):
|
||||
fields = log.get("fields", {})
|
||||
span = log.get("span", {})
|
||||
scenario_name = None
|
||||
time_seconds = convert_to_seconds(fields["time.busy"])
|
||||
|
||||
# A folding scheme scenario is one of our ancestors
|
||||
for s in log.get("spans", []):
|
||||
if s.get("name") == "scenario":
|
||||
scenario_name = s.get("folding_scheme")
|
||||
|
||||
# Top level span
|
||||
if not scenario_name:
|
||||
folding_scheme = span.get("folding_scheme")
|
||||
if folding_scheme is not None:
|
||||
free_logs.append(report(f"{folding_scheme} total time", time_seconds))
|
||||
else:
|
||||
free_logs.append(report(span["name"], time_seconds))
|
||||
return
|
||||
|
||||
# Within a folding scheme scenario
|
||||
if scenario_name not in scenarios:
|
||||
scenarios[scenario_name] = {
|
||||
"Prepare folding": 0,
|
||||
"Transform input": 0,
|
||||
"Folding verification": 0,
|
||||
"Folding steps": []
|
||||
}
|
||||
|
||||
span_name = span.get("name")
|
||||
if span_name == "Folding step":
|
||||
scenarios[scenario_name]["Folding steps"].append(time_seconds)
|
||||
else:
|
||||
scenarios[scenario_name][span_name] = time_seconds
|
||||
|
||||
|
||||
def process_logs(file_path):
|
||||
with open(file_path, 'r') as f:
|
||||
for line in f:
|
||||
process_logline(json.loads(line))
|
||||
|
||||
|
||||
def print_results():
|
||||
for log in free_logs:
|
||||
print(log)
|
||||
print()
|
||||
|
||||
for scenario_name, data in scenarios.items():
|
||||
print("-" * 80)
|
||||
print(f"Scenario: {scenario_name}")
|
||||
print(report(" Prepare folding", data["Prepare folding"]))
|
||||
print(report(" Transform input", data["Transform input"]))
|
||||
print(report(" Folding verification", data["Folding verification"]))
|
||||
|
||||
folding_steps = data["Folding steps"]
|
||||
print(f" Folding Steps:")
|
||||
print(report(" Average", sum(folding_steps) / len(folding_steps)))
|
||||
print(report(" Min", min(folding_steps)))
|
||||
print(report(" Max", max(folding_steps)))
|
||||
|
||||
|
||||
process_logs('out.log')
|
||||
print_results()
|
||||
Reference in New Issue
Block a user