pub struct AnomalyPolicy {
pub enabled: bool,
pub dry_run: bool,
pub signals: Vec<AnomalySignal>,
pub threshold: f64,
pub max_body_inspect_bytes: u64,
}Expand description
Anomaly scoring policy (DW-090, policies[].anomaly): lightweight
statistical detection of abusive request patterns. Each enabled
signal produces a normalized [0, 1] score from the request shape
(header entropy, header count/bytes, path length/depth, query count,
body size, unusual method); the overall score is the average of the
configured signals’ scores. A score at or above threshold is
blocked (403 anomaly_blocked) unless dry_run is set.
Fields§
§enabled: boolWhether anomaly scoring is enabled (default true). A policies[].anomaly
block with enabled: false is a no-op (the scorer is not compiled).
dry_run: boolMonitor mode (DW-041 synergy): the score is computed and the would-block is logged + counted, but the request proceeds. Default false (enforce).
signals: Vec<AnomalySignal>The signals to score. Must be non-empty when enabled is true.
Each signal contributes one normalized [0, 1] sub-score; the
overall score is their average.
threshold: f64Block threshold in [0, 1] (default 0.8). A score >= threshold is blocked (or logged in dry-run mode). Must be in (0, 1].
max_body_inspect_bytes: u64Maximum body bytes to inspect for the body_size signal (default
4096). The signal scores min(body_len, cap) / cap, so a body
at or beyond the cap scores 1.0. Must be > 0.
Trait Implementations§
Source§impl Clone for AnomalyPolicy
impl Clone for AnomalyPolicy
Source§fn clone(&self) -> AnomalyPolicy
fn clone(&self) -> AnomalyPolicy
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AnomalyPolicy
impl Debug for AnomalyPolicy
Source§impl<'de> Deserialize<'de> for AnomalyPolicy
impl<'de> Deserialize<'de> for AnomalyPolicy
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for AnomalyPolicy
impl JsonSchema for AnomalyPolicy
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreSource§impl PartialEq for AnomalyPolicy
impl PartialEq for AnomalyPolicy
Source§impl Serialize for AnomalyPolicy
impl Serialize for AnomalyPolicy
impl StructuralPartialEq for AnomalyPolicy
Auto Trait Implementations§
impl Freeze for AnomalyPolicy
impl RefUnwindSafe for AnomalyPolicy
impl Send for AnomalyPolicy
impl Sync for AnomalyPolicy
impl Unpin for AnomalyPolicy
impl UnwindSafe for AnomalyPolicy
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more