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

Процессы

Экран процессов Termux с двумя разделами:

раздел реестра
Система
код
2 148 строк в 6 файлах
документ
26-processes.md
Раздел: System
Идентификатор: processes · Экран: ui/processes/ (6 файлов, ~2100 строк)
Снимок: 2026-10-11

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

  • Processes — живые процессы с метриками CPU и памяти, сортировкой и убийством по сигналу;
  • Services — управляемые сервисы (ws-backend, codex, opencode и другие) с состоянием, портами, автостартом и рестартами.

Над экраном — блок предупреждений (// alerts): потеря бэкенда, упавший сервис, зомби-процессы.

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

Хаб инструментов → секция System → карточка «Процессы» (hub_processes_title).

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

Маршрут: Screen.kt → MainRouter (ProcessManagerScreen).

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

СекцияЭлементЧто делает
ШапкаПанель управления: раздел, интервал, сортировка, фильтр, поиск, обновитьProcessControlBar
// hotТоп потребителей CPUСекция вынесена отдельно от списка
Основной списокОтсортированные процессыProcessList
// runningРаботающие сервисыServicesList
// stoppedОстановленные сервисыТо же
// nothing foundПустое состояние—
// alertsAlertsCardПредупреждения с переходом к цели
Карточка процессаМетрики, кнопка killProcessCards.kt
Карточка сервисаСтатус, порт, uptime, рестарты, кнопки start/stop/restart, автостартProcessCards.kt
Лист логовЛоги процесса/сервисаProcessSheets.kt

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

Разделы

ProcessMode = PROCESSES / SERVICES — переключатель в панели управления. Выбор сохраняется в prefs (processes_mode).

Процессы

ProcessItem — данные ps плюс живое чтение /proc: pid, ppid, user, cpu (мгновенный), cpuAvg, cpuLive (признак живых данных), mem, vsz, rss, cpuTime, startedAt, state, command.

Сортировка (ProcessSort): cpu, mem, rss, pid, name, started. Фильтры (ProcessFilter): all, managed (только сервисы под svreg), heavy (тяжёлые).

Убийство процесса

killProcess(proc, signal) отправляет POST /api/v1/processes/kill с pid и сигналом. Доступны стандартные сигналы (TERM/KILL и т. п.) — выбор в карточке.

Сервисы

ServiceItem: status (run и другие), pid, uptime, port, portOpen, desired (что задумано), state, error, restarts, autoStart.

Логика состояний:

СвойствоУсловие
runningstatus == "run"
shouldRundesired == "running"
startingstate == "starting"
offPlanshouldRun != running — работает не так, как задумано

offPlan выводит строку-предупреждение прямо на карточке: сервис должен работать, но не работает (или наоборот).

Фильтр списка сервисов (ServiceListFilter): all, running, stopped.

Действия: controlService(service, action) — start/stop/restart через POST /api/v1/processes/service/{action}/{name}; toggleServiceAutoStart — переключение автостарта.

Интервал автообновления

UpdateInterval: 1s, 3s (по умолчанию), 10s, off. При off обновление только по кнопке. Выбор сохраняется в prefs (processes_interval).

Предупреждения

ProcessAlert.Kind:

  • BACKEND — потерян связь с backend;
  • SERVICE — упавший сервис;
  • ZOMBIE — зомби-процесс.

Предупреждения показываются над списком и при нажатии ведут к цели (openAlert).

Сводка устройства

SystemSummary: число ядер (cpuCount), всего и доступно памяти. Замечание в коде: loadavg на Android приложению закрыт, поэтому вместо классической нагрузки показываются ядра и память.

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

ЧтоГде лежитКак меняетсяКто читает
Список серверов~/.y83-ws/servers.jsonВручную или RESTsvreg при старте backend
Живые процессыBackend читает ps и /procGET /api/v1/processesЭкран
Настройки экранаprefs processes_interval, processes_sort, processes_mode, processes_filterПанель управленияViewModel

6. Backend: REST/роуты

Метод и путьНазначениеОбработчик
GET /api/v1/processesсписок процессов + сводка устройстваph2.List
POST /api/v1/processes/killубить процесс по pid и сигналуph2.Kill
POST /api/v1/processes/service/{action}/{name}start / stop / restart сервисаph2.ServiceControl
GET /api/v1/serversсписок серверовsvh.List
POST /api/v1/servers/{id}/startзапустить сервисsvh.Start
POST /api/v1/servers/{id}/stopостановитьsvh.Stop
POST /api/v1/servers/{id}/restartперезапуститьsvh.Restart
GET /api/v1/servers/{id}/logsлоги сервисаsvh.Logs
GET /api/v1/servers/{id}/statusстатус сервисаsvh.Status

Роуты: backend/internal/api/v1/routes.go:323–332, 370–372.

Архитектура управления: servers.json → Go backend (svreg/manager.go) → exec.Cmd → healthLoop каждые 15 секунд → REST. Своего runit/supervisord нет.

7. Мост и MCP

ЧтоКакПримечание
Открыть экранapp_navigate с screen: "processes"BridgeScreenCatalog
Состояние backendMCP statusСкилл y83-backend
Список сервисовREST GET /api/v1/serversСкилл y83-servers

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

ПараметрЗначениеГде задаётся
Интервал обновления1 / 3 / 10 с или off (дефолт 3 с)UpdateInterval
Сортировок6ProcessSort
Фильтров процессов3ProcessFilter
Фильтров сервисов3ServiceListFilter
Health-loop svregкаждые 15 секундBackend
Ключи prefsprocesses_interval, processes_sort, processes_mode, processes_filterViewModel

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

  • servers.json читается при старте backend. После ручной правки файла нужен перезапуск backend — иначе изменения не подхватятся.
  • Вложенные кавычки в command ломают запуск. Правильный путь — вынести команду в скрипт и указать bash /path/to/run.sh.
  • stdio MCP-серверы не работают как managed server. Backend проверяет здоровье по HTTP, поэтому нужен wrapper с MCP_TRANSPORT=http.
  • offPlan — не ошибка, а предупреждение. Сервис может быть запущен вручную или остановлен против конфигурации; карточка об этом скажет.
  • Убийство процесса вслепую опасно. Можно убить сам backend — экран покажет предупреждение BACKEND, но связь уже оборвётся.
  • loadavg недоступен приложению на Android, поэтому вместо привычной нагрузки показываются ядра и память.
  • Интервал 1 секунда даёт заметную нагрузку на backend; для базового наблюдения хватает 3 секунд.
  • Настройки экрана живут в prefs устройства, а список серверов — в servers.json на backend: это разные хранилища.

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

  • app/src/main/java/com/y83/ws/ui/processes/ProcessManagerScreen.kt — экран, секции, панель управления.
  • app/src/main/java/com/y83/ws/ui/processes/ProcessManagerViewModel.kt — состояние, запросы, действия.
  • app/src/main/java/com/y83/ws/ui/processes/ProcessModels.kt — модели и перечисления.
  • app/src/main/java/com/y83/ws/ui/processes/ProcessCards.kt, ProcessSheets.kt, ProcessFormat.kt — карточки, листы, форматирование.
  • backend/internal/handlers/processes/ — сбор данных и управление.
  • backend/internal/api/v1/routes.go:323–332, 370–372 — роуты.
  • skills/y83-servers/SKILL.md — svreg, servers.json, типовые грабли.

Источник: docs/project/hub/26-processes.md · Система · 2 148 строк в 6 файлах. Страница собирается из документации проекта при сборке сайта.