mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-05-18 05:37:09 +02:00
Fix live visibility for streaming HTTP responses (#401)
This commit is contained in:
+13
-8
@@ -607,6 +607,13 @@ pub async fn send_http_request<T: TemplateCallback>(
|
|||||||
};
|
};
|
||||||
|
|
||||||
let headers_elapsed = duration_to_i32(started_at.elapsed());
|
let headers_elapsed = duration_to_i32(started_at.elapsed());
|
||||||
|
std::fs::create_dir_all(params.response_dir).map_err(|source| {
|
||||||
|
SendHttpRequestError::CreateResponseDirectory {
|
||||||
|
path: params.response_dir.to_path_buf(),
|
||||||
|
source,
|
||||||
|
}
|
||||||
|
})?;
|
||||||
|
let body_path = params.response_dir.join(&response.id);
|
||||||
let connected_response = HttpResponse {
|
let connected_response = HttpResponse {
|
||||||
state: HttpResponseState::Connected,
|
state: HttpResponseState::Connected,
|
||||||
elapsed_headers: headers_elapsed,
|
elapsed_headers: headers_elapsed,
|
||||||
@@ -616,6 +623,8 @@ pub async fn send_http_request<T: TemplateCallback>(
|
|||||||
remote_addr: http_response.remote_addr.clone(),
|
remote_addr: http_response.remote_addr.clone(),
|
||||||
version: http_response.version.clone(),
|
version: http_response.version.clone(),
|
||||||
elapsed_dns: dns_elapsed.load(Ordering::Relaxed),
|
elapsed_dns: dns_elapsed.load(Ordering::Relaxed),
|
||||||
|
body_path: Some(body_path.to_string_lossy().to_string()),
|
||||||
|
content_length: http_response.content_length.map(u64_to_i32),
|
||||||
headers: http_response
|
headers: http_response
|
||||||
.headers
|
.headers
|
||||||
.iter()
|
.iter()
|
||||||
@@ -638,14 +647,6 @@ pub async fn send_http_request<T: TemplateCallback>(
|
|||||||
response = connected_response;
|
response = connected_response;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::fs::create_dir_all(params.response_dir).map_err(|source| {
|
|
||||||
SendHttpRequestError::CreateResponseDirectory {
|
|
||||||
path: params.response_dir.to_path_buf(),
|
|
||||||
source,
|
|
||||||
}
|
|
||||||
})?;
|
|
||||||
|
|
||||||
let body_path = params.response_dir.join(&response.id);
|
|
||||||
let mut file =
|
let mut file =
|
||||||
File::options().create(true).truncate(true).write(true).open(&body_path).await.map_err(
|
File::options().create(true).truncate(true).write(true).open(&body_path).await.map_err(
|
||||||
|source| SendHttpRequestError::WriteResponseBody { path: body_path.clone(), source },
|
|source| SendHttpRequestError::WriteResponseBody { path: body_path.clone(), source },
|
||||||
@@ -689,6 +690,10 @@ pub async fn send_http_request<T: TemplateCallback>(
|
|||||||
file.write_all(&response_body[start_idx..]).await.map_err(|source| {
|
file.write_all(&response_body[start_idx..]).await.map_err(|source| {
|
||||||
SendHttpRequestError::WriteResponseBody { path: body_path.clone(), source }
|
SendHttpRequestError::WriteResponseBody { path: body_path.clone(), source }
|
||||||
})?;
|
})?;
|
||||||
|
file.flush().await.map_err(|source| SendHttpRequestError::WriteResponseBody {
|
||||||
|
path: body_path.clone(),
|
||||||
|
source,
|
||||||
|
})?;
|
||||||
|
|
||||||
let now = Instant::now();
|
let now = Instant::now();
|
||||||
let should_update = now.duration_since(last_progress_update).as_millis()
|
let should_update = now.duration_since(last_progress_update).as_millis()
|
||||||
|
|||||||
Reference in New Issue
Block a user