Stop logging every Responses WebSocket event (#29432)

## Why

Every successful Responses WebSocket event currently produces three
local log records: the full payload at TRACE, an OpenTelemetry log
event, and an OpenTelemetry trace event.

On busy threads these records fill the 1,000-row log partition in
seconds and cause continuous SQLite insert-and-prune churn.

Related to
https://openai.slack.com/archives/C095U48JNL9/p1782128972644209

## What changed

- Stop logging each successful Responses WebSocket payload at TRACE.
- Stop emitting `codex.websocket_event` as OpenTelemetry log and trace
events.
- Keep WebSocket event counters, duration metrics, response timing
metrics, parsing, and error handling.
This commit is contained in:
jif
2026-06-22 16:43:08 +01:00
committed by GitHub
Unverified
parent 21d36296f1
commit 91e6da943b
2 changed files with 5 additions and 42 deletions
@@ -668,7 +668,6 @@ async fn run_websocket_response_stream(
match message {
Message::Text(text) => {
trace!("websocket event: {text}");
if let Some(wrapped_error) = parse_wrapped_websocket_error_event(&text)
&& let Some(error) =
map_wrapped_websocket_error_event(wrapped_error, text.to_string())
+5 -41
View File
@@ -707,7 +707,6 @@ impl SessionTelemetry {
duration: Duration,
) {
let mut kind = None;
let mut error_message = None;
let mut success = true;
match result {
@@ -724,49 +723,26 @@ impl SessionTelemetry {
}
if kind.as_deref() == Some("response.failed") {
success = false;
error_message = value
.get("response")
.and_then(|value| value.get("error"))
.map(serde_json::Value::to_string)
.or_else(|| Some("response.failed event received".to_string()));
}
}
Err(err) => {
Err(_) => {
kind = Some("parse_error".to_string());
error_message = Some(err.to_string());
success = false;
}
}
}
tokio_tungstenite::tungstenite::Message::Binary(_) => {
success = false;
error_message = Some("unexpected binary websocket event".to_string());
}
tokio_tungstenite::tungstenite::Message::Ping(_)
| tokio_tungstenite::tungstenite::Message::Pong(_) => {
return;
}
tokio_tungstenite::tungstenite::Message::Close(_) => {
tokio_tungstenite::tungstenite::Message::Binary(_)
| tokio_tungstenite::tungstenite::Message::Close(_)
| tokio_tungstenite::tungstenite::Message::Frame(_) => {
success = false;
error_message =
Some("websocket closed by server before response.completed".to_string());
}
tokio_tungstenite::tungstenite::Message::Frame(_) => {
success = false;
error_message = Some("unexpected websocket frame".to_string());
}
},
Ok(Some(Err(err))) => {
Ok(Some(Err(_))) | Ok(None) | Err(_) => {
success = false;
error_message = Some(err.to_string());
}
Ok(None) => {
success = false;
error_message = Some("stream closed before response.completed".to_string());
}
Err(err) => {
success = false;
error_message = Some(err.to_string());
}
}
@@ -775,18 +751,6 @@ impl SessionTelemetry {
let tags = [("kind", kind_str), ("success", success_str)];
self.counter(WEBSOCKET_EVENT_COUNT_METRIC, /*inc*/ 1, &tags);
self.record_duration(WEBSOCKET_EVENT_DURATION_METRIC, duration, &tags);
log_and_trace_event!(
self,
common: {
event.name = "codex.websocket_event",
event.kind = %kind_str,
duration_ms = %duration.as_millis(),
success = success_str,
error.message = error_message.as_deref(),
},
log: {},
trace: {},
);
}
pub fn log_sse_event<E>(