Skip to content

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 telemetryd runs;
  • audio leaves the device only after an explicit sendAudioSample IPC 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.