Files
momentry_core/src/worker/config.rs
accusys 12a7b59232 feat: add job worker and duplicate registration check
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
2026-03-25 14:53:41 +08:00

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);
}
}