From c8301d14e16db8de60fddbd05f37b1fc8c8eeab6 Mon Sep 17 00:00:00 2001 From: Greg Shuflin Date: Wed, 5 Feb 2025 20:50:58 -0800 Subject: [PATCH] Timeout when fetching feeds --- src/feed_utils.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/feed_utils.rs b/src/feed_utils.rs index 1230f3f..00d3b12 100644 --- a/src/feed_utils.rs +++ b/src/feed_utils.rs @@ -1,4 +1,5 @@ use feed_rs; +use std::time::Duration; use tracing::{error, info}; use url::Url; @@ -8,9 +9,22 @@ pub struct FeedError; pub async fn fetch_feed(url: &Url) -> Result { info!("Making a request to fetch feed `{url}`"); + // Create a client with a 10 second timeout + let client = reqwest::Client::builder() + .timeout(Duration::from_secs(10)) + .build() + .map_err(|e| { + error!("Failed to create HTTP client: {}", e); + FeedError + })?; + // Fetch the feed content - let response = reqwest::get(url.as_ref()).await.map_err(|e| { - error!("Failed to fetch feed: {}", e); + let response = client.get(url.as_ref()).send().await.map_err(|e| { + if e.is_timeout() { + error!("Request timed out after 10 seconds: {}", e); + } else { + error!("Failed to fetch feed: {}", e); + } FeedError })?;