Раздел: 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 |
| CPU | totalCores, cpuLoad, cpuPerCoreLoad, cpuFreqs, cpuTemp |
| Память | ramTotal, ramUsed, ramAvailable, appMemoryPss |
| Хранилище | storageTotal, storageUsed, storageFree |
| Диск I/O | diskReadSpeed, 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/stat | ViewModel |
| Источник частот | sysfs (cpuFreqs) | ViewModel |
| Источник батареи | BatteryManager / sticky intent | ViewModel |
| Источник сети | 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— форматирование, промпт шапки.