Commit 7e63ef82 authored by zhuwenwen's avatar zhuwenwen
Browse files

Merge tag 'v0.14.0' into v0.14.0-dev

parents 8cbcac5d b17039bc
...@@ -7,39 +7,45 @@ from dataclasses import dataclass ...@@ -7,39 +7,45 @@ from dataclasses import dataclass
from typing_extensions import override from typing_extensions import override
SLA_EPS = 1e-8
"""Offset used to differentiate margins for equality checks."""
@dataclass @dataclass
class SLACriterionBase(ABC): class SLACriterionBase(ABC):
target: float target: float
@abstractmethod @abstractmethod
def validate(self, actual: float) -> bool: def compute_margin(self, actual: float) -> float:
"""Return `True` if this criterion is met; otherwise `False`.""" """
Return a negative value or `0` if this criterion is met;
otherwise a positive value indicating the distance to the target.
"""
raise NotImplementedError raise NotImplementedError
@abstractmethod @abstractmethod
def format_cond(self, lhs: str) -> str: def format_cond(self, lhs: str) -> str:
raise NotImplementedError raise NotImplementedError
def print_and_validate( def print_and_compute_margin(
self, self,
metrics: dict[str, float], metrics: dict[str, float],
metrics_key: str, metrics_key: str,
) -> bool: ) -> float:
metric = metrics[metrics_key] metric = metrics[metrics_key]
result = self.validate(metric) margin = self.compute_margin(metric)
cond = self.format_cond(f"{metrics_key} = {metric:.2f}") cond = self.format_cond(f"{metrics_key} = {metric:.2f}")
print(f"Validating SLA: {cond} | " + ("PASSED" if result else "FAILED")) print(f"Validating SLA: {cond} | " + ("PASSED" if margin <= 0 else "FAILED"))
return result return margin
@dataclass @dataclass
class SLALessThan(SLACriterionBase): class SLALessThan(SLACriterionBase):
@override @override
def validate(self, actual: float) -> bool: def compute_margin(self, actual: float) -> float:
return actual < self.target return actual + SLA_EPS - self.target
@override @override
def format_cond(self, lhs: str) -> str: def format_cond(self, lhs: str) -> str:
...@@ -49,8 +55,8 @@ class SLALessThan(SLACriterionBase): ...@@ -49,8 +55,8 @@ class SLALessThan(SLACriterionBase):
@dataclass @dataclass
class SLALessThanOrEqualTo(SLACriterionBase): class SLALessThanOrEqualTo(SLACriterionBase):
@override @override
def validate(self, actual: float) -> bool: def compute_margin(self, actual: float) -> float:
return actual <= self.target return actual - self.target
@override @override
def format_cond(self, lhs: str) -> str: def format_cond(self, lhs: str) -> str:
...@@ -60,8 +66,8 @@ class SLALessThanOrEqualTo(SLACriterionBase): ...@@ -60,8 +66,8 @@ class SLALessThanOrEqualTo(SLACriterionBase):
@dataclass @dataclass
class SLAGreaterThan(SLACriterionBase): class SLAGreaterThan(SLACriterionBase):
@override @override
def validate(self, actual: float) -> bool: def compute_margin(self, actual: float) -> float:
return actual > self.target return self.target + SLA_EPS - actual
@override @override
def format_cond(self, lhs: str) -> str: def format_cond(self, lhs: str) -> str:
...@@ -71,8 +77,8 @@ class SLAGreaterThan(SLACriterionBase): ...@@ -71,8 +77,8 @@ class SLAGreaterThan(SLACriterionBase):
@dataclass @dataclass
class SLAGreaterThanOrEqualTo(SLACriterionBase): class SLAGreaterThanOrEqualTo(SLACriterionBase):
@override @override
def validate(self, actual: float) -> bool: def compute_margin(self, actual: float) -> float:
return actual >= self.target return self.target - actual
@override @override
def format_cond(self, lhs: str) -> str: def format_cond(self, lhs: str) -> str:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment