edenapi: add tracing spans

Summary:
Add tracing spans so we can get some insights about statistics from the pure
Rust land.

Reviewed By: xavierd

Differential Revision: D18625646

fbshipit-source-id: 15951fe2f8270a70f647a0f4e09819bbc33919c5
This commit is contained in:
Jun Wu 2019-11-20 18:54:26 -08:00 committed by Facebook Github Bot
parent a47b831d54
commit 5b61ae4c89
2 changed files with 34 additions and 6 deletions

View File

@ -5,22 +5,23 @@ edition = "2018"
[dependencies]
auth = { path = "../auth" }
blackbox = { path = "../blackbox" }
bytes = "0.4.11"
configparser = { path = "../configparser" }
curl = { version = "0.4.20", features = ["http2"] }
failure = "0.1.3"
http = "0.1.17"
itertools = "0.8.0"
lazy_static = "1.2"
log = "0.4.6"
parking_lot = "0.9"
regex = "1.0"
serde = "1.0.89"
serde_cbor = "0.9.0"
thiserror = "1.0.5"
tracing = "0"
types = { path = "../types" }
url = "2.1.0"
blackbox = { path = "../blackbox" }
regex = "1.0"
lazy_static = "1.2"
thiserror = "1.0.5"
[dev-dependencies]
tempdir = "0.3.7"

View File

@ -166,7 +166,8 @@ impl EdenApi for EdenApiCurlClient {
keys: Vec<Key>,
progress: Option<ProgressFn>,
) -> ApiResult<(Box<dyn Iterator<Item = (Key, Bytes)>>, DownloadStats)> {
self.get_data(paths::DATA, keys, progress)
tracing::info_span!("api::get_files", count = keys.len())
.in_scope(|| self.get_data(paths::DATA, keys, progress))
}
fn get_history(
@ -175,6 +176,13 @@ impl EdenApi for EdenApiCurlClient {
max_depth: Option<u32>,
progress: Option<ProgressFn>,
) -> ApiResult<(Box<dyn Iterator<Item = HistoryEntry>>, DownloadStats)> {
let span = tracing::info_span!(
"api::get_history",
count = keys.len(),
max_depth = max_depth.unwrap_or(1)
);
let _guard = span.enter();
log::debug!("Fetching {} files", keys.len());
let mut url = self.repo_base_url()?.join(paths::HISTORY)?;
@ -247,7 +255,8 @@ impl EdenApi for EdenApiCurlClient {
keys: Vec<Key>,
progress: Option<ProgressFn>,
) -> ApiResult<(Box<dyn Iterator<Item = (Key, Bytes)>>, DownloadStats)> {
self.get_data(paths::TREES, keys, progress)
tracing::info_span!("api::get_trees", count = keys.len())
.in_scope(|| self.get_data(paths::TREES, keys, progress))
}
fn prefetch_trees(
@ -258,6 +267,8 @@ impl EdenApi for EdenApiCurlClient {
depth: Option<usize>,
progress: Option<ProgressFn>,
) -> ApiResult<(Box<dyn Iterator<Item = (Key, Bytes)>>, DownloadStats)> {
let span = tracing::info_span!("api::prefetch_trees");
let _guard = span.enter();
let mut url = self.repo_base_url()?.join(paths::PREFETCH_TREES)?;
if self.stream_trees {
url.set_query(Some("stream=true"));
@ -431,6 +442,16 @@ where
progress.set_callback(progress_cb);
driver.set_progress_reporter(progress);
let span = tracing::debug_span!(
"curl::multi_request",
url = &AsRef::<str>::as_ref(&url.to_string()),
downloaded = "",
uplaoded = "",
requests = num_requests,
latency = "",
);
let _guard = span.enter();
log::debug!("Performing {} requests", num_requests);
let start = Instant::now();
@ -468,6 +489,12 @@ where
log::info!("{}", &dlstats);
if !span.is_disabled() {
span.record("downloaded", &dlstats.downloaded);
span.record("uploaded", &dlstats.uploaded);
span.record("latency_ms", &(dlstats.latency.as_millis() as u64));
}
Ok(dlstats)
}