use std::sync::Arc;
use super::executor::ExecutableTask;
use super::types::{MAX_HISTORY_TASKS, TASK_POOL, Task, TaskPool, TaskStatus};
use crate::workflow::WorkflowCallback;
pub async fn create_task(task_type: String, input: String) -> String {
let mut pool = TASK_POOL.write().await;
pool.create_task(task_type, input)
}
pub async fn create_task_with_executable(
task_type: String,
input: String,
executable: Arc<dyn ExecutableTask>,
callback: Option<Arc<dyn WorkflowCallback>>,
) -> String {
let mut pool = TASK_POOL.write().await;
pool.create_task_with_executable(task_type, input, executable, callback)
}
pub async fn get_task(task_id: &str) -> Option<Task> {
let pool = TASK_POOL.read().await;
pool.get_task(task_id)
}
pub async fn get_task_status(task_id: &str) -> Option<TaskStatus> {
let pool = TASK_POOL.read().await;
pool.get_task(task_id).map(|t| t.status)
}
pub async fn update_task_status(task_id: &str, status: TaskStatus) -> bool {
let mut pool = TASK_POOL.write().await;
pool.update_task_status(task_id, status)
}
pub async fn cancel_task(task_id: &str) -> bool {
let mut pool = TASK_POOL.write().await;
pool.cancel_task(task_id)
}
pub async fn pause_task(task_id: &str) -> bool {
let mut pool = TASK_POOL.write().await;
pool.pause_task(task_id)
}
pub async fn resume_task(task_id: &str) -> bool {
let mut pool = TASK_POOL.write().await;
pool.resume_task(task_id)
}
pub async fn retry_task(task_id: &str) -> bool {
let mut pool = TASK_POOL.write().await;
pool.retry_task(task_id)
}
pub async fn get_all_tasks(limit: Option<usize>) -> Vec<Task> {
let pool = TASK_POOL.read().await;
pool.get_all_tasks(limit)
}
pub async fn set_max_concurrent(max: usize) {
let mut pool = TASK_POOL.write().await;
pool.set_max_concurrent(max);
}
pub async fn running_count() -> usize {
let pool = TASK_POOL.read().await;
pool.running_count()
}
pub async fn pending_count() -> usize {
let pool = TASK_POOL.read().await;
pool.pending_count()
}
pub async fn shutdown_task_pool() {
let mut pool = TASK_POOL.write().await;
pool.shutdown();
}