Skip to main content

AuditTrail

Struct AuditTrail 

Source
pub struct AuditTrail { /* private fields */ }
Expand description

A tamper-evident audit trail with cryptographic hash chain.

Each entry is cryptographically linked to the previous entry using blake3 hashing. This makes it possible to detect any tampering with historical entries.

Implementations§

Source§

impl AuditTrail

Source

pub fn new(max_entries: usize) -> AuditTrail

Create a new audit trail with the given maximum entry count.

Source

pub fn len(&self) -> usize

Get the current number of entries.

Source

pub fn is_empty(&self) -> bool

Check if the trail is empty.

Source

pub fn append( &self, actor: String, action: AuditAction, resource: String, ) -> String

Append an audit entry. Computes hash chain automatically.

Source

pub fn append_with_meta( &self, actor: String, action: AuditAction, resource: String, metadata: Option<Value>, ) -> String

Append an audit entry with optional metadata.

Source

pub fn verify(&self) -> Result<bool, AuditError>

Verify the integrity of the hash chain.

Source

pub fn entries(&self, from_seq: u64, to_seq: u64) -> Vec<TrailEntry>

Get entries within a sequence range (inclusive).

Source

pub fn all_entries(&self) -> Vec<TrailEntry>

Get all entries.

Source

pub fn by_agent(&self, agent_id: &str) -> Vec<TrailEntry>

Query entries by agent ID.

Source

pub fn by_action(&self, action: &AuditAction) -> Vec<TrailEntry>

Query entries by exact action match.

Source

pub fn by_action_type(&self, type_name: &str) -> Vec<TrailEntry>

Query entries by action discriminant name (e.g., “ToolCall”, “AgentSpawn”).

Source

pub fn export_json(&self, from_seq: u64) -> Result<String, AuditError>

Export entries from a sequence number as pretty JSON.

Source

pub fn export_all_json(&self) -> Result<String, AuditError>

Export all entries as pretty JSON.

Source

pub fn flush_to(&self, store: &dyn AuditPersistence) -> Result<(), Error>

Flush entries to a persistence backend.

Source

pub fn restore_from_store( &self, store: &dyn AuditPersistence, ) -> Result<(), Error>

Restore entries from a persistence backend.

Source

pub fn restore_from(&self, entries: Vec<TrailEntry>)

Restore previously persisted entries directly.

Sets seq_counter to max(entries.seq) + 1 so new entries don’t collide with restored ones. Trims to max_entries if needed.

Trait Implementations§

Source§

impl Debug for AuditTrail

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for AuditTrail

Source§

fn default() -> AuditTrail

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more