You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
stats: per-track counters exposed at /metrics/track
Per-(track, iothread) TrackStats live in the stats tier, owned by a
TrackStatsRegistry that binds one TrackStatsCollector per data-plane thread and
merges them on demand — the same split as StatsRegistry/MoQStatsCollector. A
TrackStatsFilter counts on the relay ingest chain and on each downstream
subscriber, including the PUBLISH fan-out path. No read path dereferences a
registry forwarder, so counting behaves identically in single-thread,
relay-exec and local-forwarder modes.
GET /metrics/track?service=&namespace=&track=&limit= reports subscribers,
groups/subgroups/objects/datagrams/bytes in both directions, and
publish-start/last-object timestamps. Rates are left to Prometheus. A match
wider than the limit is rejected rather than truncated: an arbitrary
F14-ordered subset would reshuffle between scrapes.
Namespaces and track names are safeName()-encoded in labels and expected in the
same form on the query, so a scraped value pastes back into a query and two
tracks cannot collapse onto one label set.
Groups are counted against an LRU window of the 3 most recent group IDs, so
subgroups of concurrently-open groups do not inflate the count. Name matching
uses forEachName rather than forEach: EntryView copies a forwarder and session
shared_ptr per entry, ~72% of the walk at 100k tracks (13.7ms vs 3.9ms).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
0 commit comments