Telemetry and system monitoring
telemetryd
Stock S95 runs telemetryd synchronously; the live overlay intentionally replaces that script and stops telemetry instead. The binary itself is stock and remains available for analysis.
telemetryd listens on Unix socket /tmp/telemetry.sock. Other VK processes use TelemetryClient to submit events and requests. IPC message names include initializeSession, sendTelemetry, sendCrashDump, sendLogDump, sendCdnStat, makeLogDump, and sendAudioSample.
Destination configuration
initializeSession parses and stores the destination HTTP/HTTPS URL supplied by another service; there is no hardcoded telemetry host in telemetryd. Upload functions fail with Telemetry url is not set! or Destination url is not set yet before initialization. The live unit's disabled daemon therefore cannot be used to infer a stock endpoint from its process state.
Audio capture and upload trigger
AudioGrabber maintains local ring buffers for PulseAudio and ALSA sources. The constructor clamps retained history to 10–600 seconds and starts capture threads. This is continuous local buffering when the daemon runs, not continuous network upload.
sendAudioSample is the network trigger. It accepts an offset/duration and selects PCM from the ring according to source sample rate/channel count. Only one sample can be in flight; a second request fails with The previous audio sample is not sent yet. Raw capture diagnostics include bufferSizeMax, audioChunkSize, bufferSize, offset, and len.
Thus the privacy boundary is precise:
- local audio history exists while
telemetrydruns; - audio leaves the device only after an explicit
sendAudioSampleIPC request and successful destination initialization; - voice-agent's local KWS, cloud phrase stream, and 250 ms/30-minute spotter statistics are separate mechanisms and do not require
telemetryd.
The exact requesting service and URL are runtime configuration, so they cannot be recovered from the stripped daemon alone. No audio or session captures are included in this repository.
Other telemetry data
sendCrashDump:/data/crashes/.sendLogDump: compressed logs and memory-mapped upload.sendTelemetry: periodic buffered events and/data/telemetry_dump/slices.sendCdnStat: CDN statistics.makeLogDump: logread/dmesg archive creation.
Limits include Telemetry slice is too big and Dump dir is full.
sysmon
S99 starts sysmon -logtosyslog. It is an event-loop service with a telemetry client and subprocess support.
Observed collectors and inputs:
| Metric/domain | Source |
|---|---|
| Per-core CPU | /proc/stat |
| CPU frequency states | /sys/devices/system/cpu/cpu%d/cpufreq/stats/time_in_state |
| Memory | memoryUsage collector |
| Thermal zones | /sys/class/thermal/thermal_zone%d/temp |
| Default route/connectivity | /proc/net/route |
| Wi-Fi state/survey | WPA client and driver-specific /proc/net/rtl*/wlan0/survey_info |
| Ambient light | i2c-0/0-0029/.../in_illuminance_both_input |
| Child/process health | subprocess exit/signal handling |
The main event-loop setup schedules fast collectors at 2 and 5 seconds and a 300-second reporting timer. Reports include uptime, cpuUsage, cpuUsagePerCore, cpuFreq, memoryUsage, and thermalZones; rolling min/max/average windows are bounded to 20 samples. sendSendLogRequest links monitoring to log upload through telemetry.
Crash/log storage
/data/crashes/ and /data/telemetry_dump/ survive S03 factory reset, subject to retention of only the ten most recent entries in each. This is useful for postmortems but means reset is not a complete erasure of diagnostic history.
Self-check writes log@<epoch>.gz and dmesg@<epoch>.gz on update failure. Other crashes use the shared crash-report sink. No credentials from these files are reproduced in the narrative pages.