Skip to content

Commit

Permalink
Add tracing to requests (#307)
Browse files Browse the repository at this point in the history
  • Loading branch information
goodspark authored Feb 25, 2023
1 parent fa56528 commit 15cb998
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ futures-util = { version = "0.3.15", optional = true }
secrecy = "0.8.0"
cfg-if = "1.0.0"
either = "1.8.0"
tracing = "0.1"

[dev-dependencies]
tokio = { version = "1.17.0", default-features = false, features = [
Expand Down
39 changes: 38 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,10 @@ pub use self::{
page::Page,
};

use tracing::{self, field};

const GITHUB_SERVICE: &str = "github.com";

/// A convenience type with a default error type of [`Error`].
pub type Result<T, E = error::Error> = std::result::Result<T, E>;

Expand Down Expand Up @@ -911,6 +915,39 @@ impl Octocrab {
}
}

#[tracing::instrument(
level="debug",
name="github api call",
skip(self, request_builder, attempt),
fields(err, url=field::Empty, service.name=field::Empty, http.method=field::Empty, http.url=field::Empty, http.status_code=field::Empty, http.resend_count=field::Empty)
)]
async fn send_call(
&self,
request_builder: reqwest::RequestBuilder,
attempt: u32,
) -> Result<reqwest::Response, reqwest::Error> {
let span = tracing::Span::current();
let service = self.base_url.host_str().unwrap_or(GITHUB_SERVICE);
span.record("service.name", service);
if attempt > 1 {
span.record("http.resend_count", attempt);
}
let request = request_builder.build()?;
span.record("http.method", request.method().as_str());
span.record("http.url", request.url().as_str());
let result = self.client.execute(request).await;
match &result {
Ok(v) => {
span.record("http.status_code", v.status().as_u16());
}
Err(e) => {
let status = e.status().and_then(|s| Some(s.as_u16()));
span.record("http.status_code", status);
}
};
result
}

/// Execute the given `request` using octocrab's Client.
pub async fn execute(&self, mut request: reqwest::RequestBuilder) -> Result<reqwest::Response> {
let mut retries = 1;
Expand All @@ -935,7 +972,7 @@ impl Octocrab {
}
};

let result = request.send().await;
let result = self.send_call(request, retries).await;
let status = match &result {
Ok(v) => Some(v.status()),
Err(e) => e.status(),
Expand Down

0 comments on commit 15cb998

Please sign in to comment.