Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
75fe5a0
chore(deps): unify prost on the workspace version
pblazej Aug 26, 2026
0020ae1
feat(telemetry): add livekit-telemetry crate
pblazej Aug 26, 2026
644c514
feat(uniffi): expose Telemetry over UniFFI
pblazej Aug 26, 2026
204c3e6
feat(examples): add telemetry_ping
pblazej Aug 26, 2026
a9ef908
refactor(telemetry): write-ahead BatchCache between exporter and tran…
pblazej Aug 26, 2026
3781c21
feat(telemetry): self-telemetry report and device-state cadence
pblazej Aug 26, 2026
763dd73
feat(telemetry): log records, flood guard, RTC stats windows, session…
pblazej Aug 26, 2026
16854ee
chore: merge origin/main into blaze/telemetry
pblazej Sep 2, 2026
bb9d578
feat(uniffi): optional telemetry transport and a pull-side export queue
pblazej Sep 2, 2026
5ac4e50
feat(telemetry): experimental spans on the traces signal
pblazej Sep 2, 2026
ad2b05f
docs(telemetry): specify lk.publish and lk.subscribe spans
pblazej Sep 2, 2026
89d4094
feat(telemetry): upload policy and device signals
pblazej Sep 3, 2026
9fc4549
feat(telemetry): byte-bounded batches, custom events, fuller self-dia…
pblazej Sep 3, 2026
afdb54f
feat(telemetry): one pipeline per process, sessions per room, deferre…
pblazej Sep 3, 2026
e828668
generated protobuf
github-actions[bot] Sep 3, 2026
3c7cdcd
feat(telemetry): pipeline-wide attributes
pblazej Sep 3, 2026
cf3f303
feat(telemetry): events without a body carry their name as body
pblazej Sep 4, 2026
c8e15f4
feat(telemetry): display bodies on every event, otel.event.name, log_…
pblazej Sep 4, 2026
6ebc008
fix(telemetry): file late log records under their ended span's session
pblazej Sep 4, 2026
5c69748
chore(telemetry): upload policy decisions at debug level
pblazej Sep 4, 2026
646462c
fix(telemetry): bandwidth limitation no longer holds uploads
pblazej Sep 4, 2026
f486eb8
feat(telemetry): Display for TelemetryStats, diagnostics() over UniFFI
pblazej Sep 4, 2026
db460ff
chore(telemetry): log the cumulative stats line at debug with each re…
pblazej Sep 4, 2026
0e34e38
chore(telemetry): readable sent line
pblazej Sep 4, 2026
59261a1
chore(telemetry): log upload policy transitions, not ticks
pblazej Sep 4, 2026
6f17b80
feat(telemetry): TelemetryStatus, one-line health with backlog and loss
pblazej Sep 4, 2026
f2b97ee
fix(telemetry): own problems at warn/error, once per episode
pblazej Sep 4, 2026
2a65695
feat(telemetry): set_server and typed LogRecord in the core
pblazej Sep 4, 2026
31fee3c
chore(telemetry): LogSource::Ffi, named after the path it arrives on
pblazej Sep 4, 2026
cc5dac2
feat(telemetry): typed surface — spans, resource, room identity, devi…
pblazej Sep 4, 2026
1f4e6c6
docs(telemetry): the typed surface
pblazej Sep 4, 2026
b5cd693
feat(uniffi): span_label for the platform's own logging
pblazej Sep 4, 2026
ca2b0ce
feat(telemetry): process-level spans via Telemetry::start
pblazej Sep 4, 2026
2e6393f
refactor(telemetry): Session is Scope
pblazej Sep 4, 2026
cf68d51
feat(telemetry): a bound span logs its description when it ends
pblazej Sep 4, 2026
412f29c
refactor(telemetry): minimal tracing surface
pblazej Sep 4, 2026
1fafe43
chore(telemetry): drop the string span API; tests use the typed one
pblazej Sep 4, 2026
e273041
feat(telemetry): the process pipeline lives in the core
pblazej Sep 7, 2026
4ed1fa6
feat(telemetry): instruments live with the pipeline
pblazej Sep 7, 2026
ae765cf
feat(telemetry): TelemetryConfig is the options type on every platform
pblazej Sep 7, 2026
e07b355
feat(telemetry): transports hand back the raw response; the core read…
pblazej Sep 15, 2026
e5827fe
feat(telemetry): one vocabulary for every SDK's environment signals
pblazej Sep 15, 2026
d20d9c3
feat(telemetry): the core owns the subscribe span and the stats-repor…
pblazej Sep 15, 2026
4849d95
fix(telemetry): 63-bit span ids, a closable pull queue, scope-level l…
pblazej Sep 15, 2026
bf04f97
fix(telemetry): the pull queue ends with finish(), not close()
pblazej Sep 15, 2026
0f049ad
fix(telemetry): the Cloud endpoint is the client OTLP route
pblazej Sep 17, 2026
10f6a93
fix(telemetry): a 429 holds uploads even when nobody says for how long
pblazej Sep 17, 2026
6800889
feat(telemetry): a hold pauses uploads, not collection
pblazej Sep 17, 2026
1abc8e7
feat(telemetry): the cache is bounded by file count as well as bytes
pblazej Sep 17, 2026
b652a54
test(telemetry): the cache is the floor under a hold
pblazej Sep 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,18 @@ rustflags = ["-C", "target-feature=+crt-static"]
[target.aarch64-pc-windows-msvc]
rustflags = ["-C", "target-feature=+crt-static"]

# `-headerpad_max_install_names` on macOS: Flutter's native-assets step rewrites the cdylib's
# install name with install_name_tool, which fails without the padding.
# `-ObjC` must also be passed to rustdoc: doctest binaries are linked by rustdoc
# and do not inherit `rustflags`. Without it the ObjC categories in libwebrtc's
# static lib (e.g. `NSString (StdString)`) are not loaded, and static
# initializers such as RTCH264ProfileLevelId.mm abort at process startup.
[target.x86_64-apple-darwin]
rustflags = ["-C", "link-args=-ObjC"]
rustflags = ["-C", "link-args=-ObjC -Wl,-headerpad_max_install_names"]
rustdocflags = ["-C", "link-args=-ObjC"]

[target.aarch64-apple-darwin]
rustflags = ["-C", "link-args=-ObjC"]
rustflags = ["-C", "link-args=-ObjC -Wl,-headerpad_max_install_names"]
rustdocflags = ["-C", "link-args=-ObjC"]

[target.aarch64-apple-ios]
Expand Down
13 changes: 13 additions & 0 deletions .changeset/add-livekit-telemetry-crate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
livekit-telemetry: minor
---

Add `livekit-telemetry`, the shared client telemetry core: events are buffered on-device,
batched and exported as OTLP/HTTP log records through a pluggable `TelemetryTransport`. Batches are
written to a `BatchCache` (in memory by default, on disk with `storage_dir`) before upload, so
failed uploads, crashes and offline shutdowns lose nothing. Pipeline health is exposed as `Telemetry::stats` and shipped as `lk.telemetry.report`
events; hosts push `DeviceState` (thermal, low power, foreground/background) and the core emits
the `lk.device.*.changed` events and stretches its cadence under pressure. Log records (`Warn`/`Error` only), a flood guard for discrete events, on-device RTC
stats windows (`record_stats` → `lk.rtc.stats.sample`) and session-wide attributes complete the
design doc's v0 surface. Spans (`begin_span`/`add_span_event`/`end_span`, one attempt per span, the session as the
trace) ship on the traces signal through the same cache; every record carries the session trace id.
6 changes: 6 additions & 0 deletions .changeset/uniffi-telemetry.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
livekit-uniffi: minor
---

Expose the client telemetry core over UniFFI: `Telemetry` (emit / flush / shutdown /
droppedCount) with a host-implemented `TelemetryTransport`.
11 changes: 11 additions & 0 deletions .changeset/unify-prost.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
livekit-protocol: patch
livekit: patch
livekit-api: patch
livekit-data-stream: patch
livekit-uniffi: patch
---

Unify `prost` on the workspace version (0.14, with `pbjson`/`pbjson-types` 0.9) across
`livekit-protocol`, `livekit`, `livekit-api`, `livekit-data-stream` and `livekit-uniffi`, so
binaries that combine these crates link a single prost. The committed generated code is unchanged.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ soxr-sys/test-output.wav
.env
.cursor
__pycache__
/target-*/
Loading