entrenar/monitor/inference/provenance/
attack.rs1use super::edge::ProvenanceEdge;
4use super::node::{NodeId, ProvenanceNode};
5
6#[derive(Debug, Clone)]
8pub struct AttackPath {
9 pub nodes: Vec<(NodeId, ProvenanceNode)>,
11 pub edges: Vec<ProvenanceEdge>,
13 pub duration_ns: u64,
15 pub anomaly_indices: Vec<usize>,
17}
18
19impl AttackPath {
20 pub fn len(&self) -> usize {
22 self.nodes.len()
23 }
24
25 pub fn is_empty(&self) -> bool {
27 self.nodes.is_empty()
28 }
29
30 pub fn has_anomalies(&self) -> bool {
32 !self.anomaly_indices.is_empty()
33 }
34}
35
36#[derive(Debug, Clone)]
38pub struct Anomaly {
39 pub node_id: NodeId,
41 pub description: String,
43 pub severity: f32,
45}