mirror of
https://github.com/deps-rs/deps.rs.git
synced 2024-11-22 02:16:30 +00:00
instrument analyze timings
This commit is contained in:
parent
fec6f12a48
commit
c4337ae698
4 changed files with 53 additions and 8 deletions
16
Cargo.lock
generated
16
Cargo.lock
generated
|
@ -68,6 +68,14 @@ dependencies = [
|
||||||
"iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cadence"
|
||||||
|
version = "0.13.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.0.4"
|
version = "1.0.4"
|
||||||
|
@ -104,6 +112,11 @@ dependencies = [
|
||||||
"libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crossbeam"
|
||||||
|
version = "0.2.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dtoa"
|
name = "dtoa"
|
||||||
version = "0.4.2"
|
version = "0.4.2"
|
||||||
|
@ -682,6 +695,7 @@ name = "shiny-robots"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"badge 0.2.0",
|
"badge 0.2.0",
|
||||||
|
"cadence 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"futures 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
"futures 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"hyper 0.11.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
"hyper 0.11.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -947,11 +961,13 @@ dependencies = [
|
||||||
"checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf"
|
"checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf"
|
||||||
"checksum byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "652805b7e73fada9d85e9a6682a4abd490cb52d96aeecc12e33a0de34dfd0d23"
|
"checksum byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "652805b7e73fada9d85e9a6682a4abd490cb52d96aeecc12e33a0de34dfd0d23"
|
||||||
"checksum bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1b7db437d718977f6dc9b2e3fd6fc343c02ac6b899b73fdd2179163447bd9ce9"
|
"checksum bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1b7db437d718977f6dc9b2e3fd6fc343c02ac6b899b73fdd2179163447bd9ce9"
|
||||||
|
"checksum cadence 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f1725ad9d5c8251726f1d7207d49e635e92448010fca03bddc7f07f0a4488a33"
|
||||||
"checksum cc 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "deaf9ec656256bb25b404c51ef50097207b9cbb29c933d31f92cae5a8a0ffee0"
|
"checksum cc 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "deaf9ec656256bb25b404c51ef50097207b9cbb29c933d31f92cae5a8a0ffee0"
|
||||||
"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"
|
"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"
|
||||||
"checksum chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7c20ebe0b2b08b0aeddba49c609fe7957ba2e33449882cb186a180bc60682fa9"
|
"checksum chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7c20ebe0b2b08b0aeddba49c609fe7957ba2e33449882cb186a180bc60682fa9"
|
||||||
"checksum core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25bfd746d203017f7d5cbd31ee5d8e17f94b6521c7af77ece6c9e4b2d4b16c67"
|
"checksum core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25bfd746d203017f7d5cbd31ee5d8e17f94b6521c7af77ece6c9e4b2d4b16c67"
|
||||||
"checksum core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d"
|
"checksum core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d"
|
||||||
|
"checksum crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "bd66663db5a988098a89599d4857919b3acf7f61402e61365acfd3919857b9be"
|
||||||
"checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab"
|
"checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab"
|
||||||
"checksum failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "934799b6c1de475a012a02dab0ace1ace43789ee4b99bcfbf1a2e3e8ced5de82"
|
"checksum failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "934799b6c1de475a012a02dab0ace1ace43789ee4b99bcfbf1a2e3e8ced5de82"
|
||||||
"checksum failure_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c7cdda555bb90c9bb67a3b670a0f42de8e73f5981524123ad8578aafec8ddb8b"
|
"checksum failure_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c7cdda555bb90c9bb67a3b670a0f42de8e73f5981524123ad8578aafec8ddb8b"
|
||||||
|
|
|
@ -4,6 +4,7 @@ version = "0.1.0"
|
||||||
authors = ["Sam Rijs <srijs@airpost.net>"]
|
authors = ["Sam Rijs <srijs@airpost.net>"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
cadence = "0.13.1"
|
||||||
failure = "0.1.1"
|
failure = "0.1.1"
|
||||||
futures = "0.1.18"
|
futures = "0.1.18"
|
||||||
hyper = "0.11.15"
|
hyper = "0.11.15"
|
||||||
|
|
|
@ -2,6 +2,8 @@ use std::collections::HashSet;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::{Duration, Instant};
|
use std::time::{Duration, Instant};
|
||||||
|
|
||||||
|
use cadence::prelude::*;
|
||||||
|
use cadence::{MetricSink, NopMetricSink, StatsdClient};
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
use futures::{Future, future};
|
use futures::{Future, future};
|
||||||
use futures::future::join_all;
|
use futures::future::join_all;
|
||||||
|
@ -34,6 +36,7 @@ type HttpClient = Client<HttpsConnector<HttpConnector>>;
|
||||||
pub struct Engine {
|
pub struct Engine {
|
||||||
client: HttpClient,
|
client: HttpClient,
|
||||||
logger: Logger,
|
logger: Logger,
|
||||||
|
metrics: StatsdClient,
|
||||||
|
|
||||||
query_crate: Arc<Cache<QueryCrate<HttpClient>>>,
|
query_crate: Arc<Cache<QueryCrate<HttpClient>>>,
|
||||||
get_popular_crates: Arc<Cache<GetPopularCrates<HttpClient>>>,
|
get_popular_crates: Arc<Cache<GetPopularCrates<HttpClient>>>,
|
||||||
|
@ -43,12 +46,14 @@ pub struct Engine {
|
||||||
|
|
||||||
impl Engine {
|
impl Engine {
|
||||||
pub fn new(client: Client<HttpsConnector<HttpConnector>>, logger: Logger) -> Engine {
|
pub fn new(client: Client<HttpsConnector<HttpConnector>>, logger: Logger) -> Engine {
|
||||||
|
let metrics = StatsdClient::from_sink("engine", NopMetricSink);
|
||||||
|
|
||||||
let query_crate = Cache::new(QueryCrate(client.clone()), Duration::from_secs(300), 500);
|
let query_crate = Cache::new(QueryCrate(client.clone()), Duration::from_secs(300), 500);
|
||||||
let get_popular_crates = Cache::new(GetPopularCrates(client.clone()), Duration::from_secs(10), 1);
|
let get_popular_crates = Cache::new(GetPopularCrates(client.clone()), Duration::from_secs(10), 1);
|
||||||
let get_popular_repos = Cache::new(GetPopularRepos(client.clone()), Duration::from_secs(10), 1);
|
let get_popular_repos = Cache::new(GetPopularRepos(client.clone()), Duration::from_secs(10), 1);
|
||||||
|
|
||||||
Engine {
|
Engine {
|
||||||
client: client.clone(), logger,
|
client: client.clone(), logger, metrics,
|
||||||
|
|
||||||
query_crate: Arc::new(query_crate),
|
query_crate: Arc::new(query_crate),
|
||||||
get_popular_crates: Arc::new(get_popular_crates),
|
get_popular_crates: Arc::new(get_popular_crates),
|
||||||
|
@ -56,6 +61,10 @@ impl Engine {
|
||||||
retrieve_file_at_path: Arc::new(RetrieveFileAtPath(client))
|
retrieve_file_at_path: Arc::new(RetrieveFileAtPath(client))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_metrics<M: MetricSink + Send + Sync + 'static>(&mut self, sink: M) {
|
||||||
|
self.metrics = StatsdClient::from_sink("engine", sink);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct AnalyzeDependenciesOutcome {
|
pub struct AnalyzeDependenciesOutcome {
|
||||||
|
@ -100,22 +109,28 @@ impl Engine {
|
||||||
let start = Instant::now();
|
let start = Instant::now();
|
||||||
|
|
||||||
let entry_point = RelativePath::new("/").to_relative_path_buf();
|
let entry_point = RelativePath::new("/").to_relative_path_buf();
|
||||||
let manifest_future = CrawlManifestFuture::new(self, repo_path, entry_point);
|
let manifest_future = CrawlManifestFuture::new(self, repo_path.clone(), entry_point);
|
||||||
|
|
||||||
let engine = self.clone();
|
let engine = self.clone();
|
||||||
manifest_future.and_then(move |manifest_output| {
|
manifest_future.and_then(move |manifest_output| {
|
||||||
|
let engine_for_analyze = engine.clone();
|
||||||
let futures = manifest_output.crates.into_iter().map(move |(crate_name, deps)| {
|
let futures = manifest_output.crates.into_iter().map(move |(crate_name, deps)| {
|
||||||
let analyzed_deps_future = AnalyzeDependenciesFuture::new(&engine, deps);
|
let analyzed_deps_future = AnalyzeDependenciesFuture::new(&engine_for_analyze, deps);
|
||||||
|
|
||||||
analyzed_deps_future.map(move |analyzed_deps| (crate_name, analyzed_deps))
|
analyzed_deps_future.map(move |analyzed_deps| (crate_name, analyzed_deps))
|
||||||
});
|
});
|
||||||
|
|
||||||
join_all(futures).map(move |crates| {
|
join_all(futures).and_then(move |crates| {
|
||||||
let duration = start.elapsed();
|
let duration = start.elapsed();
|
||||||
|
engine.metrics.time_duration_with_tags("analyze_duration", duration)
|
||||||
|
.with_tag("repo_site", repo_path.site.as_ref())
|
||||||
|
.with_tag("repo_qual", repo_path.qual.as_ref())
|
||||||
|
.with_tag("repo_name", repo_path.name.as_ref())
|
||||||
|
.send()?;
|
||||||
|
|
||||||
AnalyzeDependenciesOutcome {
|
Ok(AnalyzeDependenciesOutcome {
|
||||||
crates, duration
|
crates, duration
|
||||||
}
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
17
src/main.rs
17
src/main.rs
|
@ -4,6 +4,7 @@
|
||||||
#![feature(proc_macro)]
|
#![feature(proc_macro)]
|
||||||
|
|
||||||
extern crate badge;
|
extern crate badge;
|
||||||
|
extern crate cadence;
|
||||||
#[macro_use] extern crate failure;
|
#[macro_use] extern crate failure;
|
||||||
#[macro_use] extern crate futures;
|
#[macro_use] extern crate futures;
|
||||||
extern crate hyper;
|
extern crate hyper;
|
||||||
|
@ -33,9 +34,10 @@ mod engine;
|
||||||
mod server;
|
mod server;
|
||||||
|
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
|
use std::net::{IpAddr, Ipv4Addr, UdpSocket, SocketAddr};
|
||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
|
|
||||||
|
use cadence::{QueuingMetricSink, UdpMetricSink};
|
||||||
use futures::{Future, Stream};
|
use futures::{Future, Stream};
|
||||||
use hyper::Client;
|
use hyper::Client;
|
||||||
use hyper::server::Http;
|
use hyper::server::Http;
|
||||||
|
@ -46,12 +48,22 @@ use tokio_core::reactor::Core;
|
||||||
use self::server::Server;
|
use self::server::Server;
|
||||||
use self::engine::Engine;
|
use self::engine::Engine;
|
||||||
|
|
||||||
|
fn init_metrics() -> QueuingMetricSink {
|
||||||
|
let socket = UdpSocket::bind("0.0.0.0:0").unwrap();
|
||||||
|
socket.set_nonblocking(true).unwrap();
|
||||||
|
let host = ("127.0.0.1", 8125);
|
||||||
|
let sink = UdpMetricSink::from(host, socket).unwrap();
|
||||||
|
QueuingMetricSink::from(sink)
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let logger = slog::Logger::root(
|
let logger = slog::Logger::root(
|
||||||
Mutex::new(slog_json::Json::default(std::io::stderr())).map(slog::Fuse),
|
Mutex::new(slog_json::Json::default(std::io::stderr())).map(slog::Fuse),
|
||||||
o!("version" => env!("CARGO_PKG_VERSION"))
|
o!("version" => env!("CARGO_PKG_VERSION"))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let metrics = init_metrics();
|
||||||
|
|
||||||
let mut core = Core::new()
|
let mut core = Core::new()
|
||||||
.expect("failed to create event loop");
|
.expect("failed to create event loop");
|
||||||
|
|
||||||
|
@ -71,7 +83,8 @@ fn main() {
|
||||||
|
|
||||||
let http = Http::new();
|
let http = Http::new();
|
||||||
|
|
||||||
let engine = Engine::new(client.clone(), logger.clone());
|
let mut engine = Engine::new(client.clone(), logger.clone());
|
||||||
|
engine.set_metrics(metrics);
|
||||||
|
|
||||||
let server = Server::new(logger.clone(), engine);
|
let server = Server::new(logger.clone(), engine);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue