y83 code / инструмент

О системе

Живая телеметрия устройства: CPU с поядерной загрузкой и частотами, память, хранилище со скоростью ввода-вывода, батарея, сеть, время работы. Всё это нужно, чтобы понять, почему тормозит: агент, сборка APK, VPN-туннель или фоновая работа.

раздел реестра
Система
код
1 121 строк в 3 файлах
документ
28-system.md
Раздел: System
Идентификатор: system · Экран: ui/system/ (3 файла)
Снимок: 2026-10-11

1. Зачем и что это

Экран ничего не хранит — он читает систему напрямую (/proc, батарея, link properties) и пересчитывает скорости между двумя замерами.

2. Как попасть

Хаб инструментов → секция System → карточка «О системе» (hub_system_title, подпись «Устройство, CPU, память, батарея и сеть», тайл — «Система»).

Откуда ещёПуть
Мостapp_navigate с screen: "system"

Маршрут: Screen.kt → MainRouter (SystemInfoScreen). Шапка — y83@system :~$.

3. Экран: элементы и действия

БлокЧто показывает
DeviceHeroПроизводитель, модель, иконка устройства
MetricGridКлючевые метрики крупным планом
// performance → CpuCardЗагрузка CPU, поядерная нагрузка, частоты, температура
DiskIoCard — скорость чтения и записи
// memory & storage → RamCardВсего/используется/доступно, PSS приложения
StorageCard — хранилище: всего/занято/свободно
// power → BatteryCardПроцент, температура, напряжение, статус, питание, здоровье, технология
// connectivity → NetworkCardТип сети, SSID, локальный IP, шлюз, DNS, суммарный трафик, скорость
// runtime → SystemCardВремя работы системы и приложения, версия APK

Пока данные читаются впервые, показывается заглушка «reading device telemetry…» с подсказкой об источниках: /proc · battery · link properties.

4. Возможности подробно

Данные

SystemInfoUi собирает:

ГруппаПоля
Устройствоmanufacturer, model, androidVersion, sdkInt, abi, hardware
CPUtotalCores, cpuLoad, cpuPerCoreLoad, cpuFreqs, cpuTemp
ПамятьramTotal, ramUsed, ramAvailable, appMemoryPss
ХранилищеstorageTotal, storageUsed, storageFree
Диск I/OdiskReadSpeed, diskWriteSpeed
БатареяbatteryPercent, batteryTemp, batteryVoltage, batteryStatus, batteryPlugged, batteryHealth, batteryTechnology
СетьnetworkType, wifiSsid, localIp, gateway, dnsServers, totalRx, totalTx, rxSpeed, txSpeed
ВремяuptimeMs (система), appUptimeMs (приложение)
ПриложениеapkVersionName, apkVersionCode

Скорости считаются между замерами

ViewModel хранит предыдущие значения (prevCpuIdle, prevPerCoreIdle, prevRx, prevTx, prevDiskRead, prevDiskWrite) и на каждом обновлении вычисляет разницу. Поэтому первые показания скоростей всегда нулевые — нужно два замера.

Температура CPU и частоты читаются из sysfs, там же поядерная загрузка; частота переводится из кГц в МГц делением на 1000 с отбрасыванием нулевых значений.

Форматирование

SystemInfoFormat.kt содержит чистые функции:

  • bytesToUnit — байты в КБ/МБ/ГБ;
  • millisToUptime — миллисекунды в «2ч 15м»;
  • deviceLabel — «Производитель Модель» из двух полей;
  • частота на ядро — с делением на 1000.

5. Данные: БД, файлы, настройки

ЧтоГде лежитКак меняетсяКто читает
ТелеметрияТолько в состоянии ViewModelПериодический опрос системыЭкран

Постоянного хранилища нет: после закрытия экрана история теряется.

6. Backend: REST/роуты

Неприменимо: экран работает целиком на устройстве и обращается к Android API и /proc, а не к backend.

7. Мост и MCP

ЧтоКакПримечание
Открыть экранapp_navigate с screen: "system"BridgeScreenCatalog

Отдельного MCP-тула для телеметрии нет, но агент может получить часть фактов через status (backend) или app_screenshot + vision.

8. Настройки, конфиг, квоты и лимиты

ПараметрЗначениеГде задаётся
Источник загрузки CPU/proc/statViewModel
Источник частотsysfs (cpuFreqs)ViewModel
Источник батареиBatteryManager / sticky intentViewModel
Источник сетиlink properties (gateway, DNS)ViewModel
Единицы памятиКБ → МБ → ГБSystemInfoFormat

9. Ловушки и ограничения

  • Скорости появляются только со второго замера. Первый экран покажет нули — это не «сеть не работает».
  • Частота CPU может быть недоступна на некоторых устройствах: нулевые значения отбрасываются, ядро без частоты просто не покажет число.
  • Температура CPU на части устройств не отдаётся — карточка останется пустой, это нормально.
  • PSS приложения — не вся память процесса. Это «proportional set size», честная доля памяти; полный RSS может быть больше.
  • Uptime приложения считается от создания ViewModel, а не от запуска процесса.
  • Версия APK показывается как установленная (apkVersionName/Code), а не как версия в репозитории — при расхождении смотрите инструмент «Обновления».
  • Экран не локализован: все подписи захардкожены по-английски.
  • Чтение идёт постоянно, пока экран открыт — при большом числе ядер и высоком обновлении это заметная нагрузка.

10. Источники правды

  • app/src/main/java/com/y83/ws/ui/system/SystemInfoScreen.kt — экран, блоки, разметка.
  • app/src/main/java/com/y83/ws/ui/system/SystemInfoViewModel.kt — сбор данных, расчёт скоростей.
  • app/src/main/java/com/y83/ws/ui/system/SystemInfoFormat.kt — форматирование, промпт шапки.

Источник: docs/project/hub/28-system.md · Система · 1 121 строк в 3 файлах. Страница собирается из документации проекта при сборке сайта.