Skip to main content

AdaptiveSloPolicy

Trait AdaptiveSloPolicy 

Source
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§

Source

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);
Source

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,
)?;

Implementors§