Private
Public Access
1
0

Phase 0: Rust project scaffolding (M0 complete)

Completed Rust project initialization:
- Cargo.toml with all dependencies (actix-web, tokio, rustls, etc.)
- Project structure (src/, tests/, configs/)
- Module declarations (api, auth, config, jobs, logging, packages, systemd)
- Clippy and rustfmt configured
- Initial lib.rs and main.rs with logging setup
- Config examples (config.yaml.example, whitelist.yaml.example)

Dependencies resolved and project compiles successfully.
Rust toolchain 1.94.1 installed.
This commit is contained in:
2026-04-09 18:15:35 +00:00
parent eba8849986
commit 46dbbbbfce
19 changed files with 4234 additions and 1 deletions

55
src/jobs/manager.rs Normal file
View File

@ -0,0 +1,55 @@
//! Job Manager - Async job queue management
//!
//! Manages async job execution with concurrency limits and timeout enforcement.
use anyhow::Result;
use std::time::Duration;
use tokio::sync::RwLock;
use uuid::Uuid;
/// Job status
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum JobStatus {
Pending,
Running,
Completed,
Failed,
Cancelled,
TimedOut,
}
/// Job information
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Job {
pub id: Uuid,
pub status: JobStatus,
pub created_at: chrono::DateTime<chrono::Utc>,
}
/// Job Manager - handles async job queue with limits
pub struct JobManager {
max_concurrent: usize,
timeout_minutes: u64,
jobs: RwLock<Vec<Job>>,
}
impl JobManager {
/// Create a new job manager
pub fn new(max_concurrent: usize, timeout_minutes: u64) -> Result<Self> {
Ok(Self {
max_concurrent,
timeout_minutes,
jobs: RwLock::new(Vec::new()),
})
}
/// Get the timeout duration
pub fn timeout(&self) -> Duration {
Duration::from_secs(self.timeout_minutes * 60)
}
/// Get max concurrent jobs
pub fn max_concurrent(&self) -> usize {
self.max_concurrent
}
}