diff --git a/Cargo.lock b/Cargo.lock index 06ea8a0..70bc084 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,10 +23,12 @@ version = "0.2.0" dependencies = [ "chrono", "feed-rs", + "log", "maud", "rayon", "reqwest", "scraper", + "simple_logger", ] [[package]] @@ -152,6 +154,16 @@ dependencies = [ "windows-targets 0.52.0", ] +[[package]] +name = "colored" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +dependencies = [ + "lazy_static", + "windows-sys 0.48.0", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -216,6 +228,15 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + [[package]] name = "derive_more" version = "0.99.17" @@ -738,6 +759,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-traits" version = "0.2.18" @@ -757,6 +784,15 @@ dependencies = [ "libc", ] +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + [[package]] name = "object" version = "0.32.2" @@ -917,6 +953,12 @@ version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1165,9 +1207,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scraper" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585480e3719b311b78a573db1c9d9c4c1f8010c2dee4cc59c2efe58ea4dbc3e1" +checksum = "5b80b33679ff7a0ea53d37f3b39de77ea0c75b12c5805ac43ec0c33b3051af1b" dependencies = [ "ahash", "cssparser", @@ -1273,6 +1315,18 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "simple_logger" +version = "4.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e7e46c8c90251d47d08b28b8a419ffb4aede0f87c2eea95e17d1d5bacbf3ef1" +dependencies = [ + "colored", + "log", + "time", + "windows-sys 0.48.0", +] + [[package]] name = "siphasher" version = "0.3.11" @@ -1414,6 +1468,39 @@ dependencies = [ "utf-8", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tinyvec" version = "1.6.0" diff --git a/Cargo.toml b/Cargo.toml index f24e1ee..3d15cb8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,5 +14,7 @@ feed-rs = "1.4.0" reqwest = { version = "0.11.24", features = ["blocking"] } maud = "0.26.0" chrono = "0.4.33" -scraper = "0.18.1" +scraper = "0.19.0" rayon = "1.8.1" +simple_logger = "4.3.3" +log = "0.4" diff --git a/src/index_generator.rs b/src/index_generator.rs index e369bc6..cc8d933 100644 --- a/src/index_generator.rs +++ b/src/index_generator.rs @@ -22,7 +22,7 @@ fn create_featured_card(entry: &Entry) -> Markup { let lang = link.clone().href_lang.unwrap_or("en".to_string()); if lang != "en" { - println!("Non english! {} {}", lang, link.href); + log::warn!("Non english! {} {}", lang, link.href); } let mut image_url = entry @@ -34,7 +34,7 @@ fn create_featured_card(entry: &Entry) -> Markup { // Fallback to fetching social image if direct extraction didn't work if image_url.is_empty() { - println!( + log::info!( "Falling back to searching for a social image for {}", link.href ); @@ -60,7 +60,6 @@ fn create_featured_card(entry: &Entry) -> Markup { let truncated_description = utilities::truncate_description(&cleaned_description, 500); let main_url = utilities::get_root_url(link.href.as_str()); - dbg!(main_url); html! { article { @@ -93,7 +92,7 @@ fn create_post_card(entry: &Entry) -> Markup { let lang = link.clone().href_lang.unwrap_or("en".to_string()); if lang != "en" { - println!("Non english! {} {}", lang, link.href); + log::warn!("Non english! {} {}", lang, link.href); } let mut image_url = entry @@ -105,12 +104,15 @@ fn create_post_card(entry: &Entry) -> Markup { // Fallback to fetching social image if direct extraction didn't work if image_url.is_empty() { - println!( + log::info!( "Falling back to searching for a social image for {}", link.href ); image_url = web_fetchers::fetch_social_image(link.href.as_str()).unwrap_or_default(); } + if image_url.is_empty() { + log::warn!("No image could be gathered for {}", link.href); + } let description = entry.content.as_ref().map_or_else( || { @@ -249,10 +251,10 @@ pub fn generate_index(mut entries: Vec) -> Markup { let featured = entries.remove(0); if running_in_gitlab { - println!("Building for deployment"); + log::info!("Building for deployment"); entries.truncate(30); } else { - println!("Building for development"); + log::info!("Building for development"); entries.truncate(6); } diff --git a/src/main.rs b/src/main.rs index 83d3252..5d10ed3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,13 +14,15 @@ mod utilities; mod web_fetchers; fn main() -> Result<(), Box> { + simple_logger::init_with_level(log::Level::Info).unwrap(); + let featured = read_feed("featured_feeds.txt").first().unwrap().clone(); let mut entries = read_feed("feeds.txt"); // Move featured article to the front entries.retain(|entry| entry != &featured); entries.insert(0, featured); - println!( + log::info!( "Featured article: {}", entries[0].links.first().unwrap().href.as_str() ); @@ -34,8 +36,8 @@ fn main() -> Result<(), Box> { .unwrap(); match write(output_path, index.into_string()) { - Ok(_) => println!("Successfully wrote to {}", output_path.display()), - Err(e) => eprintln!("Failed to write to {}: {}", output_path.display(), e), + Ok(_) => log::info!("Successfully wrote to {}", output_path.display()), + Err(e) => log::error!("Failed to write to {}: {}", output_path.display(), e), } Ok(()) diff --git a/src/utilities.rs b/src/utilities.rs index acc35ca..cd5a03d 100644 --- a/src/utilities.rs +++ b/src/utilities.rs @@ -9,7 +9,7 @@ pub fn read_feed(path: &str) -> Vec { let binding = fs::read_to_string(path).unwrap(); let feed_urls: Vec<&str> = binding.lines().collect(); - println!("Fetching feeds:"); + log::trace!("Fetching feeds:"); let raw_entries: Vec, String>> = feed_urls .into_par_iter() .map(|url| { @@ -22,7 +22,7 @@ pub fn read_feed(path: &str) -> Vec { for entry in raw_entries { match entry { Ok(mut feed_entries) => entries.append(&mut feed_entries), - Err(e) => println!("{}", e), + Err(e) => log::warn!("{}", e), } } diff --git a/src/web_fetchers.rs b/src/web_fetchers.rs index e96b620..8c361fa 100644 --- a/src/web_fetchers.rs +++ b/src/web_fetchers.rs @@ -9,7 +9,11 @@ use std::error::Error; pub fn fetch_feed(url: &str) -> Result, Box> { let content = get(url)?.text()?; let feed = parser::parse(content.as_bytes())?; - println!("\tFeed {} returned {} items", url, feed.entries.len()); + if feed.entries.is_empty() { + log::warn!("Feed {url} returned no items!"); + } else { + log::info!("Feed {} returned {} items", url, feed.entries.len()); + } Ok(feed.entries) }