from __future__ import annotations
from dataclasses import dataclass
from typing import List
@dataclass
[docs]
class DispatchStats:
[docs]
def record_applied(self, name: str):
self.applied.append(name)
[docs]
def record_skipped(self, name: str):
self.skipped.append(name)
[docs]
def record_failed(self, name: str):
self.failed.append(name)
@property
[docs]
def attempted(self) -> int:
return len(self.applied) + len(self.failed)
@property
[docs]
def coverage(self) -> float:
total = self.attempted + len(self.skipped)
return (self.attempted / total) if total else 0.0
@property
[docs]
def success_rate(self) -> float:
return (len(self.applied) / self.attempted) if self.attempted else 0.0