Add optional process metrics sampling for code-mode hosts (#57841)

## What changed

- Add `GetProcessMetrics` and provider sampling APIs for process ID, start time, cumulative CPU time, and resident memory, exposed through `ThreadManager` without creating a thread or session.
- Distinguish unsupported collection, a locally absent host, and sampling failures. Process-owned providers never start or replace a host when sampling.
- Bound gRPC sampling to one second without retries or explicit connection resets. Run optional collectors on a detached worker with at most one collection in flight, so stalled collection cannot block the HTTP/2 driver or runtime shutdown.

## Testing

Add coverage for snapshots, collector errors and panics, deadlines, overload, and shutdown with a stuck collector. Extend lifecycle tests to check that sampling preserves session state and keepalive behavior without starting or restarting local hosts.

GitOrigin-RevId: eeafe275891d0464636f28a29345a87aed1a12dc
This commit is contained in:
aakash-oai
2026-10-28 21:34:25 +00:00
committed by copyberry
parent 7ce5fa7bdc
commit d373d64967
18 changed files with 559 additions and 15 deletions
@@ -223,6 +223,16 @@ pub trait CodeModeSessionProvider: Send + Sync {
Ok(())
}
/// Observes a host without starting a session. Process-owned providers must
/// not start or replace a host. Network providers may connect or reconnect
/// according to their transport policy. Sampling failures and cancellation
/// must not explicitly reset the shared execution connection.
fn sample_process_metrics(
&self,
) -> CodeModeSessionResultFuture<'_, crate::CodeModeProcessMetricsSample> {
Box::pin(async { Ok(crate::CodeModeProcessMetricsSample::Unsupported) })
}
fn create_session(&self) -> CodeModeSessionProviderFuture<'_>;
/// Creates a session whose cells share the supplied execution limits.