Remove some dev-dependencies. (#200)
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:
@@ -43,9 +43,6 @@ log = "0.4.11"
|
|||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
rayon = "1.3.0"
|
|
||||||
rayon-core = "1.7.0"
|
|
||||||
chrono = "0.4.11"
|
|
||||||
env_logger = "0.8.1"
|
env_logger = "0.8.1"
|
||||||
|
|
||||||
[[example]]
|
[[example]]
|
||||||
|
|||||||
@@ -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.get(url).call()?;
|
let response = agent.get(url).call()?;
|
||||||
let mut reader = response.into_reader();
|
let mut reader = response.into_reader();
|
||||||
let mut bytes = vec![];
|
let mut bytes = vec![];
|
||||||
@@ -47,13 +40,12 @@ 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<()> {
|
||||||
@@ -61,12 +53,26 @@ fn get_many(urls: Vec<String>, simultaneous_fetches: usize) -> Result<()> {
|
|||||||
.timeout_connect(Duration::from_secs(5))
|
.timeout_connect(Duration::from_secs(5))
|
||||||
.timeout(Duration::from_secs(20))
|
.timeout(Duration::from_secs(20))
|
||||||
.build();
|
.build();
|
||||||
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(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user