Job Worker System: - Add polling-based job worker (max 2 concurrent processors) - Create monitor_jobs records when videos are registered - Link videos.job_id to monitor_jobs - Fix type mismatches (i32 vs i64) for database IDs Duplicate Registration: - Check if video already exists before registering - Return existing video info with already_exists: true - Use canonical path for UUID computation USER_DATA_ROOT Configuration: - Add MOMENTRY_USER_DATA_ROOT environment variable - UUID computed from relative path (username/filename) - Ensures consistent UUIDs when data root changes
78 lines
2.0 KiB
Rust
78 lines
2.0 KiB
Rust
use once_cell::sync::Lazy;
|
|
use std::env;
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub struct WorkerConfig {
|
|
pub max_concurrent: usize,
|
|
pub poll_interval_secs: u64,
|
|
pub enabled: bool,
|
|
pub batch_size: i32,
|
|
pub processor_timeout_secs: u64,
|
|
}
|
|
|
|
impl Default for WorkerConfig {
|
|
fn default() -> Self {
|
|
Self {
|
|
max_concurrent: Self::max_concurrent_from_env(),
|
|
poll_interval_secs: Self::poll_interval_from_env(),
|
|
enabled: Self::enabled_from_env(),
|
|
batch_size: Self::batch_size_from_env(),
|
|
processor_timeout_secs: Self::timeout_from_env(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl WorkerConfig {
|
|
fn max_concurrent_from_env() -> usize {
|
|
env::var("MOMENTRY_MAX_CONCURRENT")
|
|
.unwrap_or_else(|_| "2".to_string())
|
|
.parse()
|
|
.unwrap_or(2)
|
|
}
|
|
|
|
fn poll_interval_from_env() -> u64 {
|
|
env::var("MOMENTRY_POLL_INTERVAL")
|
|
.unwrap_or_else(|_| "5".to_string())
|
|
.parse()
|
|
.unwrap_or(5)
|
|
}
|
|
|
|
fn enabled_from_env() -> bool {
|
|
env::var("MOMENTRY_WORKER_ENABLED")
|
|
.unwrap_or_else(|_| "true".to_string())
|
|
.parse()
|
|
.unwrap_or(true)
|
|
}
|
|
|
|
fn batch_size_from_env() -> i32 {
|
|
env::var("MOMENTRY_WORKER_BATCH_SIZE")
|
|
.unwrap_or_else(|_| "10".to_string())
|
|
.parse()
|
|
.unwrap_or(10)
|
|
}
|
|
|
|
fn timeout_from_env() -> u64 {
|
|
env::var("MOMENTRY_WORKER_PROCESSOR_TIMEOUT")
|
|
.unwrap_or_else(|_| "3600".to_string())
|
|
.parse()
|
|
.unwrap_or(3600)
|
|
}
|
|
}
|
|
|
|
pub static WORKER_CONFIG: Lazy<WorkerConfig> = Lazy::new(WorkerConfig::default);
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_worker_config_default() {
|
|
let config = WorkerConfig::default();
|
|
assert_eq!(config.max_concurrent, 2);
|
|
assert_eq!(config.poll_interval_secs, 5);
|
|
assert!(config.enabled);
|
|
assert_eq!(config.batch_size, 10);
|
|
assert_eq!(config.processor_timeout_secs, 3600);
|
|
}
|
|
}
|