Skip to content

feat(lfs): record throughput and latency for the LFS path - #51

Open
brightsparc wants to merge 2 commits into
tobi:mainfrom
introspection-org:julian/walgit-lfs-metrics-upstream
Open

brightsparc wants to merge 2 commits into
tobi:mainfrom
introspection-org:julian/walgit-lfs-metrics-upstream

Conversation

@brightsparc

Copy link
Copy Markdown

The LFS surface had metrics only on the read-through upstream (walgit_lfs_upstream_total); the primary batch, GET, PUT and verify handlers emitted nothing, and static_object.rs emits nothing at all, so there is no way to see LFS latency or bytes moved in a running deployment.

Adds walgit_lfs_operation_seconds{op}, walgit_lfs_requests_total{op,result} and, for the two byte-moving operations, walgit_lfs_bytes_total{op} plus a walgit_lfs_object_bytes{op} size distribution.

PUT reads the whole body in the handler, so its duration is a true transfer time. GET returns before the body streams, so its duration is time to first byte and its byte count comes from the response Content-Length; the helper says so, since dividing bytes by that histogram would overstate throughput.

Each handler keeps its body in an _inner function so the timing wrapper sees every early return rather than only the success path.

The LFS surface had metrics only on the read-through upstream
(walgit_lfs_upstream_total); the primary batch, GET, PUT and verify handlers
emitted nothing, and static_object.rs emits nothing at all, so there is no way
to see LFS latency or bytes moved in a running deployment.

Adds walgit_lfs_operation_seconds{op}, walgit_lfs_requests_total{op,result}
and, for the two byte-moving operations, walgit_lfs_bytes_total{op} plus a
walgit_lfs_object_bytes{op} size distribution.

PUT reads the whole body in the handler, so its duration is a true transfer
time. GET returns before the body streams, so its duration is time to first
byte and its byte count comes from the response Content-Length; the helper
says so, since dividing bytes by that histogram would overstate throughput.

Each handler keeps its body in an _inner function so the timing wrapper sees
every early return rather than only the success path.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KaoVaspfci2kQbzQJLTPd7

This branch has not been deployed

No deployments
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.

2 participants