fix(usage): bound terminal event persistence

Add end-to-end terminal admission, bounded database fallback, and observable overload handling. Preserve first-byte lifecycle state across asynchronous runtime and frontend updates.
This commit is contained in:
elky
2026-07-16 13:12:30 +08:00
parent c6d373e6aa
commit 9a47267545
10 changed files with 1952 additions and 447 deletions
@@ -5255,16 +5255,12 @@ async fn execute_stream_from_frame_stream(
telemetry.as_ref(),
&mut usage_stream_telemetry,
) {
let usage_data = state_for_report.data.as_ref().clone();
state_for_report
.usage_runtime
.record_stream_started_direct(
&usage_data,
&lifecycle_seed_for_report,
status_code,
usage_stream_telemetry.as_ref(),
)
.await;
state_for_report.usage_runtime.record_stream_started(
state_for_report.data.as_ref(),
&lifecycle_seed_for_report,
status_code,
usage_stream_telemetry.as_ref(),
);
}
let first_data_after = usage_stream_telemetry
.as_ref()
@@ -5463,25 +5459,9 @@ async fn execute_stream_from_frame_stream(
&usage_frame_telemetry,
);
if should_refresh_stream_usage {
if usage_frame_telemetry.ttfb_ms.is_some() {
let usage_data = state_for_report.data.as_ref().clone();
state_for_report
.usage_runtime
.record_stream_started_direct(
&usage_data,
&lifecycle_seed_for_report,
status_code,
Some(&usage_frame_telemetry),
)
.await;
} else {
state_for_report.usage_runtime.record_stream_started(
state_for_report.data.as_ref(),
&lifecycle_seed_for_report,
status_code,
Some(&usage_frame_telemetry),
);
}
// The first Data frame records the live streaming transition. Later
// telemetry frames only refine the terminal accumulator; persisting
// every elapsed-time update would create one usage task per frame.
usage_stream_telemetry = Some(usage_frame_telemetry);
}
telemetry = Some(frame_telemetry);