Log file format (v3)
YANL captures upload logs as JSONL — one JSON object per line. Current app builds
use schema_version: 3.
Record types
| Line type | Purpose |
|---|---|
session_start | Opens the session — device info, schema_version, session_id |
radio_sample | One 1 Hz tick — all metrics for that moment |
event | Async network events (handover, RAT change, etc.) |
gap | Marks missed ticks when the scheduler couldn’t run on time |
session_end | Closes the session |
Replay time on the web uses derived_wallclock_ms from each radio_sample (UTC
epoch milliseconds).
Metric value types
Every metric key has a fixed JSON type for the whole session:
| Type | In the log | Example keys |
|---|---|---|
| Number | number or null | wifi.rssi, radio.rsrp, traffic.total_dl |
| Text | string or null | sensor.accelerometer, radio.carrier |
| Structured | Array of labelled rows | wifi.status, sim.status, iperf.status |
null means no reading — Wi‑Fi off, aeroplane mode, or the hardware didn’t report.
It is never coerced to zero.
Structured metrics use a plain row array (no wrapper object). When a summary line
exists, the first row is {"Status": "…"} — used heavily by iPerf tiles.
Cellular radio (flat block)
Serving-cell data is stored as flat keys, not a single composite object:
- Signal:
radio.rsrp,radio.rsrq,radio.sinr,radio.signal_dbm - Identity:
radio.pci,radio.earfcn,radio.cell_id,radio.tac,radio.rat,radio.mcc_mnc,radio.carrier,radio.bandwidth_khz, … - Each value has a freshness sibling:
radio.rsrp_state,radio.pci_state, … (FRESH,STALE,HELD_STALE,MISSING,INVALID) - Neighbours:
radio.neighbours(array) andradio.neighbour_count(same length)
The web Serving Cell tile assembles these flat keys for display. Line charts skip
non-FRESH radio points so stale modem readings don’t look live.
Legacy v1 composite keys such as radio.serving_cell with embedded list data are
not emitted in current captures.
Wi‑Fi
wifi.rssiis always a number ornull— the RSSI chart uses this key only.wifi.statusis structured (SSID, band, channel, …).wifi.neighboursis a scan list for the radar view, not the RSSI trend line.
If an upload fails with “corrupted or invalid”, re-capture on a current app build and include the Reference when contacting support.
See also
- Data quality & real-world behaviour — freshness and aeroplane mode
- Metrics reference — every key with units and thresholds
- Troubleshooting — upload errors