use std::sync::Arc;
use task_daemon::{
core::{Queue, TaskDaemon},
handler::{ContainerRegistry, HandlerConfig},
protocol::http,
storage::SqliteQueue,
};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let queue: Arc<dyn Queue> = Arc::new(SqliteQueue::new("tasks.db").await?);
let containers = Arc::new(
ContainerRegistry::from_config(HandlerConfig::from_file("handlers.toml")?).await?,
);
let daemon = TaskDaemon::builder()
.queue(queue)
.containers(containers)
.num_workers(4)
.batch_size(5)
.timeout_secs(30)
.max_retries(3)
.build();
let (service, handle) = daemon.start_workers();
let result = tokio::select! {
result = http::serve_on(service, "127.0.0.1", 8080) => result,
result = tokio::signal::ctrl_c() => result.map_err(Into::into),
};
handle.shutdown().await;
result
}