Skip to content

fix(monitoring): show stats for compose and stack containers - #113

Merged
agentHits merged 1 commit into
AgentHits-Devfrom
fix/compose-container-monitoring
Oct 28, 2026
Merged

agentHits merged 1 commit into
AgentHits-Devfrom
fix/compose-container-monitoring

Conversation

@agentHits

Copy link
Copy Markdown
Collaborator

Вкладка Monitoring у сервиса compose или stack оставалась пустой: CPU, память, Block I/O и Network I/O показывали нули, и никакой ошибки не появлялось. Теперь у каждого контейнера compose и stack видно, сколько ресурсов он использует, и после открытия вкладки подгружается история графиков.

Причина

Вкладка запрашивает статистику одного контейнера по его имени (<project>-<service>-1 у compose, <stack>_<service>.1.<task> у stack), а не по имени сервиса Dokploy. Проверка доступа к метрикам в форке искала это имя среди appName сервисов, ничего не находила и отказывала. Сокет /listen-docker-stats-monitoring закрывался сразу без причины (код 1005), а application.readAppMonitoring возвращал UNAUTHORIZED. У приложений и баз контейнер называется так же, как сервис, поэтому их это не касалось.

Что изменилось

  • assertContainerMetricsServiceAccess: если имя не совпало ни с одним сервисом и запрос не идёт к серверу метрик, владелец берётся из меток локального контейнера (com.docker.compose.project, com.docker.stack.namespace, com.docker.swarm.service.name). К найденному сервису применяются те же проверки: организация и право monitoring.read.
  • Засчитывается только точное имя контейнера: docker inspect понимает и префиксы ID, такие совпадения отбрасываются. Учитываются только сервисы этого хоста, потому что проверка видит только локальные контейнеры.
  • При отказе сокет статистики закрывается с кодом 4003 Not authorized, и страница показывает причину, а не остаётся пустой.

Проверки

  • Новый __test__/monitoring/container-metrics-access.test.ts (9 тестов): контейнер compose и задача stack находят свой сервис; имя сервиса не вызывает docker; отказ при совпадении по префиксу ID, при чужой организации, при сервисе на удалённом сервере, без меток, при ошибке docker, при запросе к серверу метрик и при имени, которое не является идентификатором docker. Без исправления падают оба теста про compose и stack.
  • __test__/wss/docker-stats.test.ts: при отказе в доступе сокет закрывается с 4003 Not authorized и не опрашивает docker.
  • tsc --noEmit в apps/dokploy проходит, Biome без новых замечаний.
  • Полный Vitest: 4299 тестов прошли. Упали 3, не связанные с правкой: реальная сборка nixpacks (application.real.test.ts) и два теста Traefik с таймаутом 5 с под нагрузкой; отдельно эти два проходят и здесь, и на AgentHits-Dev.
  • На живой панели до исправления: сокет для контейнера compose закрывался с кодом 1005 без сообщений; у контейнеров стоит метка com.docker.compose.project с appName сервиса.

🤖 Generated with Claude Code

The Monitoring tab of a compose or stack service stayed empty: CPU,
memory, block and network I/O were all zero and no error was shown.

The tab asks for stats of one container, named after the container
("<project>-<service>-1" for compose, "<stack>_<service>.1.<task>" for a
stack), not after the Dokploy service. The fork's metrics access check
looked that name up as a service appName, found nothing and refused, so
the stats socket closed at once without a reason and readAppMonitoring
returned UNAUTHORIZED. Applications and databases were not affected,
because their container is named after the service.

When the name matches no service and no metrics server is involved, the
check now reads the local container's owner labels (compose project,
stack namespace, swarm service), takes the service they point to and
applies the same organization and monitoring-read checks to it. Only an
exact container name counts (docker inspect also resolves ID prefixes),
and only services on this host, since only local containers are seen.

The stats socket now closes with 4003 "Not authorized" when access is
refused, so the page shows why instead of staying blank.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@agentHits
agentHits merged commit 7d210ce into AgentHits-Dev Oct 28, 2026
7 checks passed
@agentHits
agentHits deleted the fix/compose-container-monitoring branch October 28, 2026 00:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant