oxicode_sdk/observability/
mod.rs1mod audit;
4pub mod audit_trail;
5mod cost;
6mod decorator;
7mod event_store;
8mod trace;
9
10pub use audit::{AuditEntry, AuditFilter, AuditLog};
12pub use audit_trail::{
13 AuditAction, AuditError, AuditPersistence, AuditTrail, HashDigest, TrailEntry,
14};
15pub use cost::{
16 CostBreakdown, CostSnapshot, CostTracker, CostTrackerConfig, GlobalCostSnapshot, TokenUsage,
17};
18pub use decorator::{AgentDecorator, ObservabilityDecorator};
19pub use event_store::{EventQuery, EventStore, EventStoreConfig, StoredEvent};
20pub use trace::{Span, SpanContext, SpanGuard, SpanId, SpanKind, SpanStatus, TraceId, Tracer};
21
22#[cfg(test)]
23mod tests {
24 use super::*;
25
26 #[test]
27 fn smoke() {
28 let tracer = std::sync::Arc::new(Tracer::new());
30 let _guard = tracer.start("test", SpanKind::Agent);
31 drop(_guard);
32 let log = AuditLog::new(64);
34 log.log(AuditEntry::lifecycle("test".into(), "smoke".into()));
35 let registry = std::sync::Arc::new(oxicode_ai::ModelRegistry::new());
37 let tracker = CostTracker::new(registry, CostTrackerConfig::default());
38 let model = oxicode_ai::Model::new(
39 "dummy/model",
40 "Dummy",
41 oxicode_ai::Api::AnthropicMessages,
42 "dummy",
43 "https://dummy.com",
44 );
45 tracker.record("agent-1", &model, TokenUsage::default());
46 let snap = tracker.snapshot("agent-1");
47 assert!(snap.is_some());
48 let store = EventStore::default();
50 let seq = store.append("s1", "test", serde_json::json!({"x": 1}));
51 assert_eq!(seq, 1);
52 }
53}