Skip to content

feat(client): report checkout, write, header-wait and body-read phase timings - #15

Merged
casibbald merged 1 commit into
integration/microscaler-forkfrom
feat/client-phase-events
Nov 3, 2026
Merged

casibbald merged 1 commit into
integration/microscaler-forkfrom
feat/client-phase-events

Conversation

@casibbald

Copy link
Copy Markdown

Adds four ClientEvent variants so an observer can split one call into its phases without keeping per-request state:

  • CheckoutCompleted { duration, reused, error }: the pool handing out a connection (reused, new including DNS and connect, or after a wait)
  • RequestWritten { duration, error }: writing the request head and body
  • ResponseHeadersReceived { duration, error }: request written to response head read (server time plus network)
  • ResponseBodyRead { duration, bytes, error }: the buffered body read (streaming bodies are read, and timed, by the caller)

ClientEvent is #[non_exhaustive], so existing observers compile unchanged. The recording observer used by the existing lifecycle tests ignores the new variants; observer_reports_request_phase_timings checks their order on a new and a reused connection and that a slow server shows up as header wait, not write or body time.

cargo test --features client --lib client::: 124 passed.

… timings

Four new ClientEvent variants (the enum is non_exhaustive, so observers
compile unchanged):

- CheckoutCompleted: how long the pool took to hand out a connection
  (reused, newly connected with DNS and connect, or after waiting)
- RequestWritten: writing the request head and body
- ResponseHeadersReceived: from the request being written to the response
  head being read (server time plus network, as the client sees it)
- ResponseBodyRead: reading the buffered response body

Together with DnsCompleted and ConnectionCompleted an observer can now
split a slow call into pool wait, connect, write, server wait and body
read without per-request state on its side.
@casibbald
casibbald merged commit 701b98a into integration/microscaler-fork Nov 3, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant