use serde::{Deserialize, Serialize};
use std::time::{Duration, SystemTime};
use uuid::Uuid;
pub mod agent;
pub mod communication;
pub mod error;
pub mod resource;
pub mod security;
pub use agent::*;
pub use communication::*;
pub use error::*;
pub use resource::*;
pub use security::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct AgentId(pub Uuid);
impl AgentId {
pub fn new() -> Self {
Self(Uuid::new_v4())
}
}
impl Default for AgentId {
fn default() -> Self {
Self::new()
}
}
impl std::fmt::Display for AgentId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
impl std::str::FromStr for AgentId {
type Err = uuid::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(Self(Uuid::parse_str(s)?))
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MessageId(pub Uuid);
impl std::fmt::Display for MessageId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
impl MessageId {
pub fn new() -> Self {
Self(Uuid::new_v4())
}
}
impl Default for MessageId {
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct RequestId(pub Uuid);
impl RequestId {
pub fn new() -> Self {
Self(Uuid::new_v4())
}
}
impl Default for RequestId {
fn default() -> Self {
Self::new()
}
}
impl std::fmt::Display for RequestId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PolicyId(pub Uuid);
impl std::fmt::Display for PolicyId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
impl PolicyId {
pub fn new() -> Self {
Self(Uuid::new_v4())
}
}
impl Default for PolicyId {
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct AuditId(pub Uuid);
impl AuditId {
pub fn new() -> Self {
Self(Uuid::new_v4())
}
}
impl Default for AuditId {
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, Default)]
pub enum Priority {
Low = 0,
#[default]
Normal = 1,
High = 2,
Critical = 3,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SystemStatus {
pub total_agents: usize,
pub running_agents: usize,
pub suspended_agents: usize,
pub resource_utilization: ResourceUsage,
pub uptime: Duration,
pub last_updated: SystemTime,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Capability {
FileSystem,
Network,
Database,
Computation,
Communication,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Dependency {
pub name: String,
pub version: String,
pub required: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum SchedulingAlgorithm {
FirstComeFirstServe,
#[default]
PriorityBased,
RoundRobin,
ShortestJobFirst,
WeightedFairQueuing,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum LoadBalancingStrategy {
RoundRobin,
LeastConnections,
#[default]
ResourceBased,
WeightedRoundRobin,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum HealthStatus {
Healthy,
Degraded,
Unhealthy,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ComponentHealth {
pub status: HealthStatus,
pub message: Option<String>,
pub last_check: SystemTime,
pub uptime: Duration,
pub metrics: std::collections::HashMap<String, String>,
}
impl ComponentHealth {
pub fn healthy(message: Option<String>) -> Self {
Self {
status: HealthStatus::Healthy,
message,
last_check: SystemTime::now(),
uptime: Duration::default(),
metrics: std::collections::HashMap::new(),
}
}
pub fn degraded(message: String) -> Self {
Self {
status: HealthStatus::Degraded,
message: Some(message),
last_check: SystemTime::now(),
uptime: Duration::default(),
metrics: std::collections::HashMap::new(),
}
}
pub fn unhealthy(message: String) -> Self {
Self {
status: HealthStatus::Unhealthy,
message: Some(message),
last_check: SystemTime::now(),
uptime: Duration::default(),
metrics: std::collections::HashMap::new(),
}
}
pub fn with_uptime(mut self, uptime: Duration) -> Self {
self.uptime = uptime;
self
}
pub fn with_metric(mut self, key: String, value: String) -> Self {
self.metrics.insert(key, value);
self
}
}