From 637ff144c3ddc514d2faef6661c9b32b51d2cc24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20W=C3=B6lfer?= Date: Tue, 22 Jul 2025 01:47:43 +0200 Subject: [PATCH] Failsafe ignore already failed id generations --- src/watchdog.rs | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/watchdog.rs b/src/watchdog.rs index fd8ae54..23a734b 100644 --- a/src/watchdog.rs +++ b/src/watchdog.rs @@ -49,31 +49,42 @@ fn page_from_info(info: DanceInfo) -> Result { pub async fn watch_wanted(bot: Bot) { let span = tracing::span!(Level::INFO, "wanted_watchdog"); let _enter = span.enter(); - loop { - tracing::info!("Watchdog check..."); - let wanted = wanted_ids(bot.clone()).await; - for (id, page) in wanted { - generate_page(id, page).await; + let mut ignored_ids = vec![]; + loop { + if ignored_ids.is_empty() { + tracing::info!("Watchdog check..."); + } else { + tracing::info!("Watchdog check [{} failed ids]...", ignored_ids.len()); + } + let wanted = wanted_ids(bot.clone()).await; + let mut new_ignored = vec![]; + for (id, page) in wanted.into_iter().filter(|(x, _)| ignored_ids.contains(x)) { + if !generate_page(id, page).await { + new_ignored.push(id); + } + } + if !new_ignored.is_empty() { + ignored_ids.extend(new_ignored); } tokio::time::sleep(Duration::from_secs(30)).await; } } -async fn generate_page(id: u32, page: mwbot::Page) { +async fn generate_page(id: u32, page: mwbot::Page) -> bool { tracing::info!("Taking care of {id}"); let info = match fetch_wsdc_info(id).await { Ok(o) => o, Err(e) => { tracing::error!("Error fetching wsdc info for {id}: {e}"); - return; + return false; } }; let code = match page_from_info(info) { Ok(o) => o, Err(e) => { tracing::error!("Creating wikicode for {id}: {e}"); - return; + return false; } }; @@ -86,9 +97,10 @@ async fn generate_page(id: u32, page: mwbot::Page) { ) .await { - Ok(_) => (), + Ok(_) => true, Err(e) => { tracing::error!("Could not save page for {id}: {e}"); + false } } }