implement generic way of storing metric vectors in aggregation

Already move sdev to use the new field instead of specialized
hardcoded fields.
This commit is contained in:
2026-07-08 13:36:46 +02:00
parent ccb4f60ff4
commit 00e28edeb2
+16 -13
View File
@@ -482,9 +482,7 @@ class OutputRow:
waste_CPU: float | None # CPU h
waste_Mem: float | None
waste_total: float | None
_cpu_eff_values: list[float] = field(default_factory=list, repr=False)
_mem_eff_values: list[float] = field(default_factory=list, repr=False)
_time_eff_values: list[float] = field(default_factory=list, repr=False)
vectors: dict[str, list[int | float]] # here we can store full vectors of the aggreg.
def as_dict(self, sdev: bool = False) -> dict[str, Any]:
d: dict[str, Any] = {
@@ -516,9 +514,9 @@ class OutputRow:
}
if sdev:
for col, vals in [
("CPU_Eff", self._cpu_eff_values),
("Mem_Eff", self._mem_eff_values),
("Time_Eff", self._time_eff_values),
("CPU_Eff", self.vectors['cpu_eff']),
("Mem_Eff", self.vectors['mem_eff']),
("Time_Eff", self.vectors['time_eff']),
]:
d[f"{col}_sdev"] = stdev_or_none(vals)
d[f"{col}_max"] = max(vals) if vals else None
@@ -1016,9 +1014,9 @@ def make_single_row(rec: JobRecord, dflt_mpcpu: float) -> OutputRow:
waste_Mem=waste_mem,
waste_CPU=waste_cpu,
waste_total=waste_total,
_cpu_eff_values=[rec.cpu_eff] if rec.cpu_eff is not None else [],
_mem_eff_values=[rec.mem_eff] if rec.mem_eff is not None else [],
_time_eff_values=[rec.time_eff] if rec.time_eff is not None else [],
vectors = {"cpu_eff": [rec.cpu_eff] if rec.cpu_eff is not None else [],
"mem_eff": [rec.mem_eff] if rec.mem_eff is not None else [],
"time_eff": [rec.time_eff] if rec.time_eff is not None else []},
)
@@ -1073,7 +1071,14 @@ def make_aggregate_row(records: list[JobRecord], username: str, partition: str,
waste_cpu = count * walltime * (100-cpu_efficiency)/100 * first.cpus
waste_total = waste_cpu + waste_mem/dflt_mpcpu
vectors: dict[str, list[int | float]] = {
"cpu_eff": [r.cpu_eff for r in records if r.cpu_eff is not None],
"mem_eff": [r.mem_eff for r in records if r.mem_eff is not None],
"time_eff": [r.time_eff for r in records if r.time_eff is not None],
}
return OutputRow(
username=username,
JobID="",
@@ -1100,9 +1105,7 @@ def make_aggregate_row(records: list[JobRecord], username: str, partition: str,
waste_Mem=waste_mem,
waste_CPU=waste_cpu,
waste_total=waste_total,
_cpu_eff_values=cpu_eff_vals,
_mem_eff_values=mem_eff_vals,
_time_eff_values=time_eff_vals,
vectors = vectors,
)
def resolve_column_name(name: str) -> str: