mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
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:
@@ -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())
|
||||
|
||||
@@ -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>(
|
||||
|
||||
Reference in New Issue
Block a user