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:
+16
-13
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user