fix: fire-and-forget checks so slow monitors don't delay fast ones

This commit is contained in:
M1 2026-03-16 15:37:00 +04:00
parent 3368dbdd7f
commit 9b970a90e0
2 changed files with 4 additions and 6 deletions

View File

@ -9,7 +9,6 @@ reqwest = { version = "0.12", features = ["json", "rustls-tls"], default-fe
serde = { version = "1", features = ["derive"] } serde = { version = "1", features = ["derive"] }
serde_json = "1" serde_json = "1"
scraper = "0.21" # CSS selector / HTML parsing scraper = "0.21" # CSS selector / HTML parsing
futures = "0.3"
regex = "1" regex = "1"
anyhow = "1" anyhow = "1"
tracing = "0.1" tracing = "0.1"

View File

@ -25,8 +25,8 @@ pub async fn fetch_and_run(
let n = monitors.len(); let n = monitors.len();
if n == 0 { return Ok(0); } if n == 0 { return Ok(0); }
// Run all checks concurrently // Spawn all checks — fire and forget, don't block the cycle
let tasks: Vec<_> = monitors.into_iter().map(|monitor| { for monitor in monitors {
let client = client.clone(); let client = client.clone();
let coordinator_url = coordinator_url.to_string(); let coordinator_url = coordinator_url.to_string();
let token = token.to_string(); let token = token.to_string();
@ -35,10 +35,9 @@ pub async fn fetch_and_run(
if let Err(e) = post_result(&client, &coordinator_url, &token, result).await { if let Err(e) = post_result(&client, &coordinator_url, &token, result).await {
warn!("Failed to post result for {}: {e}", monitor.id); warn!("Failed to post result for {}: {e}", monitor.id);
} }
}) });
}).collect(); }
futures::future::join_all(tasks).await;
Ok(n) Ok(n)
} }