pub trait AdaptiveSloPolicy: Send + Sync {
// Required methods
fn select_slo(
&self,
target: &str,
target_class: TargetClass,
default: BlockedRatioSlo,
) -> BlockedRatioSlo;
fn record_observation(
&self,
target: &str,
target_class: TargetClass,
blocked_ratio: f64,
escalation_level: RequirementLevel,
) -> Result<(), AdaptivePolicyError>;
}Expand description
Pluggable adaptive SLO policy interface.
§Example
use stygian_charon::{AdaptiveSloPolicy, BlockedRatioSlo, RegressionHistoryPolicy, RequirementLevel, TargetClass};
let policy = RegressionHistoryPolicy::new();
policy.record_observation(
"https://example.com",
TargetClass::ContentSite,
0.18,
RequirementLevel::Medium,
)?;
let adapted = policy.select_slo(
"https://example.com",
TargetClass::ContentSite,
BlockedRatioSlo::content_site(),
);
assert!(adapted.acceptable <= adapted.warning);Required Methods§
Sourcefn select_slo(
&self,
target: &str,
target_class: TargetClass,
default: BlockedRatioSlo,
) -> BlockedRatioSlo
fn select_slo( &self, target: &str, target_class: TargetClass, default: BlockedRatioSlo, ) -> BlockedRatioSlo
Select an adjusted SLO for a target using historical observations.
§Example
use stygian_charon::{AdaptiveSloPolicy, BlockedRatioSlo, RegressionHistoryPolicy, TargetClass};
let policy = RegressionHistoryPolicy::new();
let slo = policy.select_slo(
"https://example.com",
TargetClass::Api,
BlockedRatioSlo::api(),
);
assert!(slo.acceptable <= slo.warning);Sourcefn record_observation(
&self,
target: &str,
target_class: TargetClass,
blocked_ratio: f64,
escalation_level: RequirementLevel,
) -> Result<(), AdaptivePolicyError>
fn record_observation( &self, target: &str, target_class: TargetClass, blocked_ratio: f64, escalation_level: RequirementLevel, ) -> Result<(), AdaptivePolicyError>
Record a new blocked-ratio observation for a target.
§Errors
Returns AdaptivePolicyError when persistence fails.
§Example
use stygian_charon::{AdaptiveSloPolicy, RegressionHistoryPolicy, RequirementLevel, TargetClass};
let policy = RegressionHistoryPolicy::new();
policy.record_observation(
"https://example.com",
TargetClass::Api,
0.04,
RequirementLevel::Low,
)?;