log buffer contents on stream errors and timeouts
Show chunks received, SSE lines parsed, and the contents of the line buffer (up to 500 bytes) on both stream errors and timeouts. This tells us whether we got partial data, a non-SSE response, or truly nothing from the server. Co-Authored-By: Proof of Concept <poc@bcachefs.org>
This commit is contained in:
parent
156626ae53
commit
3b80af2997
1 changed files with 25 additions and 3 deletions
|
|
@ -392,15 +392,37 @@ impl SseReader {
|
||||||
}
|
}
|
||||||
Ok(Ok(None)) => return Ok(None),
|
Ok(Ok(None)) => return Ok(None),
|
||||||
Ok(Err(e)) => {
|
Ok(Err(e)) => {
|
||||||
self.save_failed_request(&format!("stream error: {}", e));
|
let buf_preview = if self.line_buf.is_empty() {
|
||||||
|
"(empty)".to_string()
|
||||||
|
} else {
|
||||||
|
let n = self.line_buf.len().min(500);
|
||||||
|
format!("{}B: {}", self.line_buf.len(), &self.line_buf[..n])
|
||||||
|
};
|
||||||
|
let msg = format!(
|
||||||
|
"stream error after {} chunks, {:.1}s, {} sse lines: {} | buf: {}",
|
||||||
|
self.chunks_received,
|
||||||
|
self.stream_start.elapsed().as_secs_f64(),
|
||||||
|
self.sse_lines_parsed,
|
||||||
|
e, buf_preview,
|
||||||
|
);
|
||||||
|
let _ = self.ui_tx.send(UiMessage::Debug(msg.clone()));
|
||||||
|
self.save_failed_request(&msg);
|
||||||
return Err(e.into());
|
return Err(e.into());
|
||||||
}
|
}
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
|
let buf_preview = if self.line_buf.is_empty() {
|
||||||
|
"(empty)".to_string()
|
||||||
|
} else {
|
||||||
|
let n = self.line_buf.len().min(500);
|
||||||
|
format!("{}B: {}", self.line_buf.len(), &self.line_buf[..n])
|
||||||
|
};
|
||||||
let msg = format!(
|
let msg = format!(
|
||||||
"stream timeout: no data for {}s ({} chunks, {:.1}s elapsed)",
|
"stream timeout: {}s, {} chunks, {} sse lines, {:.1}s elapsed | buf: {}",
|
||||||
self.chunk_timeout.as_secs(),
|
self.chunk_timeout.as_secs(),
|
||||||
self.chunks_received,
|
self.chunks_received,
|
||||||
self.stream_start.elapsed().as_secs_f64()
|
self.sse_lines_parsed,
|
||||||
|
self.stream_start.elapsed().as_secs_f64(),
|
||||||
|
buf_preview,
|
||||||
);
|
);
|
||||||
let _ = self.ui_tx.send(UiMessage::Debug(msg.clone()));
|
let _ = self.ui_tx.send(UiMessage::Debug(msg.clone()));
|
||||||
self.save_failed_request(&msg);
|
self.save_failed_request(&msg);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue