Remove some dev-dependencies.

We don't really need rayon for the parallelism in smoke-test.

Also, now that we use log, smoke-test can just use that.
This commit is contained in:
Jacob Hoffman-Andrews
2020-10-22 22:55:16 -07:00
parent 703ca41960
commit 1c5dcc0096
2 changed files with 28 additions and 26 deletions

View File

@@ -43,10 +43,6 @@ cookie_store = { version = "0.12.0", optional = true }
log = "0.4.11" log = "0.4.11"
[dev-dependencies] [dev-dependencies]
serde = { version = "1", features = ["derive"] }
rayon = "1.3.0"
rayon-core = "1.7.0"
chrono = "0.4.11"
env_logger = "0.7.1" env_logger = "0.7.1"
[[example]] [[example]]

View File

@@ -1,11 +1,10 @@
use chrono::Local;
use rayon::prelude::*;
use std::io::{self, BufRead, BufReader, Read}; use std::io::{self, BufRead, BufReader, Read};
use std::iter::Iterator; use std::sync::{Arc, Mutex};
use std::thread::{self, JoinHandle};
use std::time::Duration; use std::time::Duration;
use std::{env, error, fmt, result}; use std::{env, error, fmt, result};
use log::{error, info};
use ureq; use ureq;
#[derive(Debug)] #[derive(Debug)]
@@ -23,12 +22,6 @@ impl From<ureq::Error> for Oops {
} }
} }
impl From<rayon_core::ThreadPoolBuildError> for Oops {
fn from(e: rayon_core::ThreadPoolBuildError) -> Oops {
Oops(e.to_string())
}
}
impl error::Error for Oops {} impl error::Error for Oops {}
impl fmt::Display for Oops { impl fmt::Display for Oops {
@@ -39,7 +32,7 @@ impl fmt::Display for Oops {
type Result<T> = result::Result<T, Oops>; type Result<T> = result::Result<T, Oops>;
fn get(agent: &ureq::Agent, url: &String) -> Result<Vec<u8>> { fn get(agent: &ureq::Agent, url: &str) -> Result<Vec<u8>> {
let response = agent let response = agent
.get(url) .get(url)
.timeout_connect(std::time::Duration::from_secs(5)) .timeout_connect(std::time::Duration::from_secs(5))
@@ -51,23 +44,36 @@ fn get(agent: &ureq::Agent, url: &String) -> Result<Vec<u8>> {
Ok(bytes) Ok(bytes)
} }
fn get_and_write(agent: &ureq::Agent, url: &String) -> Result<()> { fn get_and_write(agent: &ureq::Agent, url: &str) {
println!("🕷️ {} {}", Local::now(), url); info!("🕷️ {}", url);
match get(agent, url) { match get(agent, url) {
Ok(_) => println!("✔️ {} {}", Local::now(), url), Ok(_) => info!("✔️ {}", url),
Err(e) => println!("⚠️ {} {} {}", Local::now(), url, e), Err(e) => error!("⚠️ {} {}", url, e),
} }
Ok(())
} }
fn get_many(urls: Vec<String>, simultaneous_fetches: usize) -> Result<()> { fn get_many(urls: Vec<String>, simultaneous_fetches: usize) -> Result<()> {
let agent = ureq::Agent::default(); let agent = ureq::Agent::default();
let pool = rayon::ThreadPoolBuilder::new() let mutex = Arc::new(Mutex::new(urls));
.num_threads(simultaneous_fetches) let mut join_handles: Vec<JoinHandle<()>> = vec![];
.build()?; for _ in 0..simultaneous_fetches {
pool.scope(|_| { let mutex = mutex.clone();
urls.par_iter().map(|u| get_and_write(&agent, u)).count(); let agent = agent.clone();
}); join_handles.push(thread::spawn(move || loop {
let mut guard = mutex.lock().unwrap();
let u = match guard.pop() {
Some(u) => u,
None => return,
};
drop(guard);
get_and_write(&agent, &u);
}));
}
for h in join_handles {
h.join().map_err(|e| Oops(format!("{:?}", e)))?;
}
Ok(()) Ok(())
} }