pub mod redis; pub mod types; pub mod worker; pub use redis::RedisConsumer; pub use types::{HookTask, PoolConfig, TaskType}; pub use worker::HookWorker; use db::cache::AppCache; use db::database::AppDatabase; use deadpool_redis::cluster::Pool as RedisPool; use slog::Logger; use std::sync::Arc; use tokio_util::sync::CancellationToken; /// Start the hook worker background task. /// Returns a handle to the cancellation token so the caller can shut it down. pub fn start_worker( db: AppDatabase, cache: AppCache, redis_pool: RedisPool, logger: Logger, config: PoolConfig, ) -> CancellationToken { let consumer = RedisConsumer::new( redis_pool.clone(), config.redis_list_prefix.clone(), config.redis_block_timeout_secs, logger.clone(), ); let http_client = Arc::new(reqwest::Client::new()); let worker = HookWorker::new(db, cache, logger, consumer, http_client); let cancel = CancellationToken::new(); let cancel_clone = cancel.clone(); tokio::spawn(async move { worker.run(cancel_clone).await; }); cancel }