Add trace_agg/src/trace_agg/core.py
This commit is contained in:
commit
ffcba03735
1 changed files with 53 additions and 0 deletions
53
trace_agg/src/trace_agg/core.py
Normal file
53
trace_agg/src/trace_agg/core.py
Normal file
|
|
@ -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
|
||||
Loading…
Reference in a new issue