use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct ResourceRef {
pub group: String,
pub kind: String,
pub namespace: String,
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum Operation {
List,
Describe,
Logs,
Diagnose,
Delete,
Scale,
Restart,
Cordon,
Drain,
Evict,
Exec,
PortForward,
GitPrOpened,
SecretViewed,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum Outcome {
Applied,
DryRun,
Rejected,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Source {
Tui,
Gui,
Browser,
Mcp,
Headless,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Actor {
pub kind: ActorKind,
pub name: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ActorKind {
Human,
Agent,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct AuditEvent {
pub timestamp: i64,
pub actor: Actor,
pub context: String,
pub operation: Operation,
pub target: ResourceRef,
pub outcome: Outcome,
pub source: Source,
pub session_id: String,
pub reason: Option<String>,
pub on_behalf_of: Option<String>,
}