Раздел: 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 | Пустое состояние | — |
// alerts | AlertsCard | Предупреждения с переходом к цели |
| Карточка процесса | Метрики, кнопка kill | ProcessCards.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.
Логика состояний:
| Свойство | Условие |
|---|---|
running | status == "run" |
shouldRun | desired == "running" |
starting | state == "starting" |
offPlan | shouldRun != 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 | Вручную или REST | svreg при старте backend |
| Живые процессы | Backend читает ps и /proc | GET /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 |
| Состояние backend | MCP status | Скилл y83-backend |
| Список сервисов | REST GET /api/v1/servers | Скилл y83-servers |
8. Настройки, конфиг, квоты и лимиты
| Параметр | Значение | Где задаётся |
|---|---|---|
| Интервал обновления | 1 / 3 / 10 с или off (дефолт 3 с) | UpdateInterval |
| Сортировок | 6 | ProcessSort |
| Фильтров процессов | 3 | ProcessFilter |
| Фильтров сервисов | 3 | ServiceListFilter |
| Health-loop svreg | каждые 15 секунд | Backend |
| Ключи prefs | processes_interval, processes_sort, processes_mode, processes_filter | ViewModel |
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, типовые грабли.