Skip to content

Надёжность процесса: unhandledRejection/uncaughtException, closeIdleConnections, логирование catch, env-footguns #77

Description

@friench

Пачка правок надёжности процесса и env-footguns из архитектурного ревью.

Нет глобальных обработчиков rejection/exception

Grep по коду: нигде нет process.on('unhandledRejection' | 'uncaughtException'). Случайный rejection роняет процесс с не-pino стек-трейсом и exit до SIGTERM-пути.
Фикс: добавить обработчики, логирующие через pino, затем аккуратный выход.

server.close() висит на keep-alive

src/index.ts:380-406 graceful shutdown хорош, но server.close() не завершится при idle keep-alive-соединениях → регулярно упирается в 10s force-exit exit(1).
Фикс: явный server.closeIdleConnections() (Node ≥18.2).

Молчаливое проглатывание ошибок

  • src/domain/aliases/service.ts:142-144 (pruneExpired): catch {} без лога — падающий алиас ретраится ежечасно вечно без наблюдаемости. Логировать warn с адресом.
  • src/domain/mailboxes/dockerode-dms-client.ts:134-137 (listJunk): любой сбой (включая «DMS down») мапится в «пустой карантин» на debug. Различать «папки нет» (ожидаемо) и exec/transport-сбой (warn/пропагировать).

Env-footguns

  • resolveDockerOptions (lib/docker.ts:16-27) ждёт DOCKER_HOST вида tcp(s)://; значение unix:///var/run/docker.sock даёт {host:'', port:2375} — молча ломается. Гардить на protocol, для unix: уходить в socketPath.
  • Частичный OIDC-конфиг молча отключает SSO (index.ts:226): задан 1-3 из 4 переменных — кнопки SSO просто нет. Логировать warn (или fail-fast) при «часть задана».
  • WEBMAIL_URL: z.url() но RSPAMD_UI_URL: z.string() (env.ts:54 vs :74) — унифицировать на z.url().
  • Косметика: DATABASE_URL — это путь к файлу, не URL; переименовать в DATABASE_PATH до миграции на Postgres (PostgreSQL storage option #16), чтобы не создавать путаницу.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions