commit ffcba03735e7f6ccbf012e0083c7e17e8e4d1f19 Author: Mika Date: Sun Dec 21 11:58:05 2025 +0000 Add trace_agg/src/trace_agg/core.py diff --git a/trace_agg/src/trace_agg/core.py b/trace_agg/src/trace_agg/core.py new file mode 100644 index 0000000..238aad0 --- /dev/null +++ b/trace_agg/src/trace_agg/core.py @@ -0,0 +1,53 @@ +import statistics +from typing import List, Dict, Any + + +def aggregate_traces(trace_data: List[Dict[str, Any]]) -> List[Dict[str, float]]: + """Aggregiert Trace-Daten und berechnet Delta-Werte zwischen Ereignissen. + + Args: + trace_data: Liste von TraceData-Objekten oder ähnlichen Dicts. + + Returns: + Liste von Dictionaries mit berechneten Delta-Ketten. + """ + if not isinstance(trace_data, list): + raise ValueError("trace_data muss eine Liste sein.") + + deltas = [] + for entry in trace_data: + if not isinstance(entry, dict): + continue + entry_time = entry.get("entry_time") + first_read_time = entry.get("first_read_time") + baseline_time = entry.get("baseline_recalc_time") + + # Validierung – alle notwendigen Felder müssen vorhanden und numerisch sein + if not all(isinstance(v, (int, float)) for v in [entry_time, first_read_time, baseline_time] if v is not None): + continue + if None in (entry_time, first_read_time, baseline_time): + continue + + delta_1 = first_read_time - entry_time + delta_2 = baseline_time - first_read_time + total_delta = baseline_time - entry_time + + deltas.append({ + "entry_time": entry_time, + "first_read_time": first_read_time, + "baseline_recalc_time": baseline_time, + "delta_entry_to_first_read": delta_1, + "delta_first_to_baseline": delta_2, + "total_delta": total_delta + }) + + # Optional: Durchschnittliche Offsets als Übersicht am Ende anfügen + if deltas: + summary = { + "avg_delta_entry_to_first_read": statistics.mean(d["delta_entry_to_first_read"] for d in deltas), + "avg_delta_first_to_baseline": statistics.mean(d["delta_first_to_baseline"] for d in deltas), + "avg_total_delta": statistics.mean(d["total_delta"] for d in deltas) + } + deltas.append({"summary": summary}) + + return deltas \ No newline at end of file