Skip to content

Commit a2f13d5

Browse files
committed
chore: simplify HttpExportError creation
1 parent f1636a0 commit a2f13d5

File tree

4 files changed

+69
-78
lines changed

4 files changed

+69
-78
lines changed

opentelemetry-otlp/src/exporter/http/logs.rs

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,10 @@ impl LogExporter for OtlpHttpClient {
4646
let client = self
4747
.client
4848
.lock()
49-
.map_err(|e| HttpExportError {
50-
status_code: 500,
51-
retry_after: None,
52-
message: format!("Mutex lock failed: {e}"),
53-
})?
49+
.map_err(|e| HttpExportError::new(500, format!("Mutex lock failed: {e}")))?
5450
.as_ref()
55-
.ok_or_else(|| HttpExportError {
56-
status_code: 500,
57-
retry_after: None,
58-
message: "Exporter already shutdown".to_string(),
51+
.ok_or_else(|| {
52+
HttpExportError::new(500, "Exporter already shutdown".to_string())
5953
})?
6054
.clone();
6155

@@ -71,10 +65,8 @@ impl LogExporter for OtlpHttpClient {
7165

7266
let mut request = request_builder
7367
.body(retry_data.body.clone().into())
74-
.map_err(|e| HttpExportError {
75-
status_code: 400,
76-
retry_after: None,
77-
message: format!("Failed to build HTTP request: {e}"),
68+
.map_err(|e| {
69+
HttpExportError::new(400, format!("Failed to build HTTP request: {e}"))
7870
})?;
7971

8072
for (k, v) in retry_data.headers.iter() {
@@ -86,11 +78,7 @@ impl LogExporter for OtlpHttpClient {
8678

8779
// Send request
8880
let response = client.send_bytes(request).await.map_err(|e| {
89-
HttpExportError {
90-
status_code: 0, // Network error
91-
retry_after: None,
92-
message: format!("Network error: {e:?}"),
93-
}
81+
HttpExportError::new(0, format!("Network error: {e:?}")) // Network error
9482
})?;
9583

9684
let status_code = response.status().as_u16();
@@ -101,15 +89,17 @@ impl LogExporter for OtlpHttpClient {
10189
.map(|s| s.to_string());
10290

10391
if !response.status().is_success() {
104-
return Err(HttpExportError {
92+
let message = format!(
93+
"HTTP export failed. Url: {}, Status: {}, Response: {:?}",
94+
request_uri,
10595
status_code,
106-
retry_after,
107-
message: format!(
108-
"HTTP export failed. Url: {}, Status: {}, Response: {:?}",
109-
request_uri,
110-
status_code,
111-
response.body()
112-
),
96+
response.body()
97+
);
98+
return Err(match retry_after {
99+
Some(retry_after) => {
100+
HttpExportError::with_retry_after(status_code, retry_after, message)
101+
}
102+
None => HttpExportError::new(status_code, message),
113103
});
114104
}
115105

opentelemetry-otlp/src/exporter/http/metrics.rs

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,10 @@ impl MetricsClient for OtlpHttpClient {
4747
let client = self
4848
.client
4949
.lock()
50-
.map_err(|e| HttpExportError {
51-
status_code: 500,
52-
retry_after: None,
53-
message: format!("Mutex lock failed: {e}"),
54-
})?
50+
.map_err(|e| HttpExportError::new(500, format!("Mutex lock failed: {e}")))?
5551
.as_ref()
56-
.ok_or_else(|| HttpExportError {
57-
status_code: 500,
58-
retry_after: None,
59-
message: "Exporter already shutdown".to_string(),
52+
.ok_or_else(|| {
53+
HttpExportError::new(500, "Exporter already shutdown".to_string())
6054
})?
6155
.clone();
6256

@@ -72,10 +66,8 @@ impl MetricsClient for OtlpHttpClient {
7266

7367
let mut request = request_builder
7468
.body(retry_data.body.clone().into())
75-
.map_err(|e| HttpExportError {
76-
status_code: 400,
77-
retry_after: None,
78-
message: format!("Failed to build HTTP request: {e}"),
69+
.map_err(|e| {
70+
HttpExportError::new(400, format!("Failed to build HTTP request: {e}"))
7971
})?;
8072

8173
for (k, v) in retry_data.headers.iter() {
@@ -87,11 +79,7 @@ impl MetricsClient for OtlpHttpClient {
8779

8880
// Send request
8981
let response = client.send_bytes(request).await.map_err(|e| {
90-
HttpExportError {
91-
status_code: 0, // Network error
92-
retry_after: None,
93-
message: format!("Network error: {e:?}"),
94-
}
82+
HttpExportError::new(0, format!("Network error: {e:?}")) // Network error
9583
})?;
9684

9785
let status_code = response.status().as_u16();
@@ -102,15 +90,17 @@ impl MetricsClient for OtlpHttpClient {
10290
.map(|s| s.to_string());
10391

10492
if !response.status().is_success() {
105-
return Err(HttpExportError {
93+
let message = format!(
94+
"HTTP export failed. Url: {}, Status: {}, Response: {:?}",
95+
request_uri,
10696
status_code,
107-
retry_after,
108-
message: format!(
109-
"HTTP export failed. Url: {}, Status: {}, Response: {:?}",
110-
request_uri,
111-
status_code,
112-
response.body()
113-
),
97+
response.body()
98+
);
99+
return Err(match retry_after {
100+
Some(retry_after) => {
101+
HttpExportError::with_retry_after(status_code, retry_after, message)
102+
}
103+
None => HttpExportError::new(status_code, message),
114104
});
115105
}
116106

opentelemetry-otlp/src/exporter/http/mod.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,27 @@ pub(crate) struct HttpExportError {
3737
pub message: String,
3838
}
3939

40+
#[cfg(feature = "http-retry")]
41+
impl HttpExportError {
42+
/// Create a new HttpExportError without retry-after header
43+
pub(crate) fn new(status_code: u16, message: String) -> Self {
44+
Self {
45+
status_code,
46+
retry_after: None,
47+
message,
48+
}
49+
}
50+
51+
/// Create a new HttpExportError with retry-after header
52+
pub(crate) fn with_retry_after(status_code: u16, retry_after: String, message: String) -> Self {
53+
Self {
54+
status_code,
55+
retry_after: Some(retry_after),
56+
message,
57+
}
58+
}
59+
}
60+
4061
#[cfg(feature = "http-retry")]
4162
/// Classify HTTP export errors for retry decisions
4263
pub(crate) fn classify_http_export_error(error: &HttpExportError) -> RetryErrorType {

opentelemetry-otlp/src/exporter/http/trace.rs

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,10 @@ impl SpanExporter for OtlpHttpClient {
4747
let client = self
4848
.client
4949
.lock()
50-
.map_err(|e| HttpExportError {
51-
status_code: 500,
52-
retry_after: None,
53-
message: format!("Mutex lock failed: {e}"),
54-
})?
50+
.map_err(|e| HttpExportError::new(500, format!("Mutex lock failed: {e}")))?
5551
.as_ref()
56-
.ok_or_else(|| HttpExportError {
57-
status_code: 500,
58-
retry_after: None,
59-
message: "Exporter already shutdown".to_string(),
52+
.ok_or_else(|| {
53+
HttpExportError::new(500, "Exporter already shutdown".to_string())
6054
})?
6155
.clone();
6256

@@ -72,10 +66,8 @@ impl SpanExporter for OtlpHttpClient {
7266

7367
let mut request = request_builder
7468
.body(retry_data.body.clone().into())
75-
.map_err(|e| HttpExportError {
76-
status_code: 400,
77-
retry_after: None,
78-
message: format!("Failed to build HTTP request: {e}"),
69+
.map_err(|e| {
70+
HttpExportError::new(400, format!("Failed to build HTTP request: {e}"))
7971
})?;
8072

8173
for (k, v) in retry_data.headers.iter() {
@@ -87,11 +79,7 @@ impl SpanExporter for OtlpHttpClient {
8779

8880
// Send request
8981
let response = client.send_bytes(request).await.map_err(|e| {
90-
HttpExportError {
91-
status_code: 0, // Network error
92-
retry_after: None,
93-
message: format!("Network error: {e:?}"),
94-
}
82+
HttpExportError::new(0, format!("Network error: {e:?}")) // Network error
9583
})?;
9684

9785
let status_code = response.status().as_u16();
@@ -102,15 +90,17 @@ impl SpanExporter for OtlpHttpClient {
10290
.map(|s| s.to_string());
10391

10492
if !response.status().is_success() {
105-
return Err(HttpExportError {
93+
let message = format!(
94+
"HTTP export failed. Url: {}, Status: {}, Response: {:?}",
95+
request_uri,
10696
status_code,
107-
retry_after,
108-
message: format!(
109-
"HTTP export failed. Url: {}, Status: {}, Response: {:?}",
110-
request_uri,
111-
status_code,
112-
response.body()
113-
),
97+
response.body()
98+
);
99+
return Err(match retry_after {
100+
Some(retry_after) => {
101+
HttpExportError::with_retry_after(status_code, retry_after, message)
102+
}
103+
None => HttpExportError::new(status_code, message),
114104
});
115105
}
116106

0 commit comments

Comments
 (0)