Skip to content

build: upgrade node-os-utils to v3 - #107

Closed
agentHits wants to merge 1 commit into
AgentHits-Devfrom
build/node-os-utils-v3
Closed

agentHits wants to merge 1 commit into
AgentHits-Devfrom
build/node-os-utils-v3

Conversation

@agentHits

Copy link
Copy Markdown
Collaborator

Зачем

Волна мажорных обновлений зависимостей. node-os-utils собирает метрики хоста для страницы Monitoring сервера панели (CPU, память, swap, диск, сеть, Block I/O). В v3 исправлено падение процесса: в v2 сбой монитора без слушателя error превращался в необработанное событие и ронял Node (например, network.overview() без ip/ifconfig в контейнере).

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

  • node-os-utils: 2.0.5 → 3.1.0 (выпуск 2026-09-09), точная версия, одинаковая в apps/dokploy/package.json и packages/server/package.json. В bun.lock изменилась только запись этого пакета.
  • Код не менялся. Всё, что вызывает packages/server/src/monitoring/utils.ts, в v3 работает так же:
    • new OSUtils() и new OSUtils({ disk: { includeStats: true } }): опция та же;
    • cpu.usage(), memory.info(), memory.swap(), disk.usageByMountPoint("/"), disk.stats(), network.overview(): те же сигнатуры;
    • MonitorResult так же выглядит как { success: true, data, ... } | { success: false, error, ... }. Поля DataSize (toBytes(), toGB()), usagePercentage, totalRxBytes/totalTxBytes, device/readBytes/writeBytes не изменились.
  • Мок в apps/dokploy/__test__/monitoring/is-physical-disk.test.ts уже совпадает с формой результатов v3, поэтому его не трогали.
  • Что важно для нас в release notes 3.0/3.1:
    • ломающие изменения касаются ProcessInfo.startTime/runtime, ProcessMonitor.kill(), system.info() при includeSystemInfo: false и DataSize с NaN/Infinity; мы ничего из этого не используем;
    • ошибки монитора без слушателя error больше не выбрасываются;
    • df читается через df -P, поэтому точки монтирования с пробелами и переносами строк разбираются правильно;
    • исправлены единицы в запасном пути памяти на Linux, когда /proc/meminfo не читается;
    • у операций появился таймаут 10 с: при зависании команды приходит неуспешный результат, и код подставляет 0, как при любой ошибке;
    • пакет по-прежнему без runtime-зависимостей.

Проверки

  • bun install --frozen-lockfile до и после: без изменений.
  • bun run typecheck: все 4 workspace без ошибок.
  • bunx vitest run --config __test__/vitest.config.ts __test__/monitoring: 8 файлов, 83 из 83 тестов прошли.
  • bunx biome check для изменённых package.json: чисто.
  • bun audit --audit-level=moderate: уязвимостей нет.
  • Сравнение v2 и v3 на Linux. В node:24.22.1-bookworm-slim (это база образа панели) поставлен iproute2, как в Dockerfile, и одним и тем же скриптом подряд вызваны те же методы:
Метрика v2.0.5 v3.1.0 Хост (free -b / df -P -B1 /)
Память total 9 434 791 936 9 434 791 936 9 434 791 936
Память used 1 155 747 840 1 150 251 008 total − available ≈ 1 140 330 496
Память usagePercentage 12.25 12.19 —
Swap total / used 10 508 525 568 / 143 360 10 508 525 568 / 143 360 10 508 525 568 / 143 360
Диск / total / used / available 46 506 442 752 / 18 519 781 376 / 27 986 661 376 то же то же
Диск usagePercentage 39.82 39.82 40%
Сеть totalRx / totalTx, байт 15 181 402 / 227 592 15 181 402 / 227 592 —
disk.stats() 13 устройств, те же поля и значения то же —
CPU при 2 занятых ядрах из 11 18.22% 18.92% —

Наборы ключей в результатах совпадают полностью. Разница в памяти объясняется тем, что замеры шли друг за другом с интервалом около секунды.

  • Без ip в контейнере v2 роняет процесс необработанным MonitorError (Command execution failed: getNetworkInterfaces), а v3 возвращает { success: false, error: COMMAND_FAILED }.
  • Не проверено локально: next build (его собирает CI) и полный набор тестов (запускались только тесты мониторинга, другие пакет не используют).

Что проверить вручную на dev

  • На странице Monitoring сервера панели CPU, память, swap, диск и сеть показывают значения, близкие к free -m и df -h на хосте.
  • График Block I/O растёт, а не стоит на нуле.
  • В логах панели нет ошибок мониторинга (MonitorError, TIMEOUT, COMMAND_FAILED).

🤖 Generated with Claude Code

Что: node-os-utils 2.0.5 -> 3.1.0 (точная версия) в apps/dokploy и
packages/server. Код в packages/server/src/monitoring/utils.ts менять не
пришлось: конструктор, опция disk.includeStats, методы cpu.usage,
memory.info, memory.swap, disk.usageByMountPoint, disk.stats,
network.overview и тип MonitorResult (success/data) в v3 те же.

Зачем: волна мажорных обновлений. В v3 сбой монитора без слушателя
error больше не роняет процесс (в v2 при отсутствии ip/ifconfig
network.overview() выбрасывал необработанное событие error), исправлены
разбор df (df -P) и единицы памяти в запасном пути Linux, добавлен
таймаут операций 10 с.

Риски: ломающие изменения v3 касаются ProcessInfo, kill(), system.info()
и DataSize с NaN/Infinity; мы их не используем. Таймаут 10 с: если
команда зависнет, метрика придет как неуспешный результат, и код
подставит 0, как и раньше при ошибке.

Проверки: bun install --frozen-lockfile до и после, bun run typecheck,
vitest __test__/monitoring (83 из 83), biome check, bun audit
--audit-level=moderate (уязвимостей нет). Сравнение v2 и v3 в
node:24.22.1-bookworm-slim с iproute2: структура и значения CPU, памяти,
swap, диска, сети и disk.stats совпадают, диск совпадает с df байт в байт.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@agentHits

Copy link
Copy Markdown
Collaborator Author

Влито в составе #108 одним PR, чтобы вся вторая волна вышла одной версией. Этот PR закрываю без слияния, его коммит есть в #108.

@agentHits agentHits closed this Oct 27, 2026
@agentHits
agentHits deleted the build/node-os-utils-v3 branch October 27, 2026 18:51
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