use acton_reactive::prelude::{ActorHandle, ActorHandleInterface};
use super::config::AuditConfig;
use super::event::{AuditEvent, AuditEventKind, AuditSeverity, AuditSource};
#[derive(Clone)]
pub struct AuditLogger {
handle: ActorHandle,
service_name: String,
config: AuditConfig,
}
impl AuditLogger {
pub fn new(handle: ActorHandle, service_name: String, config: AuditConfig) -> Self {
Self {
handle,
service_name,
config,
}
}
pub fn config(&self) -> &AuditConfig {
&self.config
}
pub async fn log(&self, event: AuditEvent) {
let _ = self.handle.send(event).await;
}
pub async fn log_auth(
&self,
kind: AuditEventKind,
severity: AuditSeverity,
source: AuditSource,
) {
let event = AuditEvent::new(kind, severity, self.service_name.clone()).with_source(source);
self.log(event).await;
}
pub async fn log_custom(
&self,
name: &str,
severity: AuditSeverity,
metadata: Option<serde_json::Value>,
) {
let mut event = AuditEvent::new(
AuditEventKind::Custom(name.to_string()),
severity,
self.service_name.clone(),
);
event.metadata = metadata;
self.log(event).await;
}
pub fn service_name(&self) -> &str {
&self.service_name
}
}