Сервис владельца · безопасные снимки интерфейса
Codex Gateway
Codex Gateway — Ruby proxy перед модельным API. Он управляет несколькими конфигурациями доступа, выборочно инспектирует только Codex-трафик, проксирует HTTP, SSE и WebSocket и считает usage по пользователям. Копия очищенных событий уходит в ограниченный outbox и NATS, не блокируя основной запрос Codex.
Панель Gateway показывает активную конфигурацию, сроки токенов и агрегированный расход по пользователям. Видимые аккаунты заменены только в DOM перед снимком.
01 / Задача
Ruby proxy для управляемого доступа Codex
Нужно было дать нескольким Codex-клиентам управляемый доступ через один шлюз, видеть сроки конфигураций, ошибки и расход токенов и при этом не превращать мониторинг в новую точку отказа.
Сценарий: Владелец управляет доступом и статистикой в закрытом интерфейсе; Codex-клиенты используют отдельные proxy credentials; Synadia получает только очищенную копию событий.
Что делал
- Реализовал Ruby proxy и маршрутизацию CONNECT с выборочной TLS-инспекцией доменов Codex.
- Добавил HTTP, SSE и WebSocket transport, потоковый разбор usage и восстановление соединений.
- Связал конфигурации доступа, proxy-пользователей, лимиты, статистику и административный интерфейс.
- Добавил неблокирующий outbox и отправку очищенных событий в NATS для Synadia Live Monitor.
02 / Реализация
Что отличает реализацию
Gateway объединяет управление доступом, потоковый transport и наблюдаемость в одном Ruby-процессе, но выводит мониторинг из критического пути. Выборочная TLS-инспекция ограничена Codex-доменами; event copy очищается до NATS. Поэтому Synadia получает живые данные, а сбой NATS не прерывает работу Codex.
Скриншоты
Экраны, формы, ошибкиСкриншоты, схемы и исходные материалы сохранены на языке оригинала; подписи и описание переведены.
03 / Технологии
Что использовано
Доли по размеру прикладных файлов Git в закреплённой версии. Каждый файл отнесён к одной подсистеме по правилам scripts/generate-stack-share.mjs; тесты, ассеты, зависимости и generated-файлы исключены. Округление — до 0,1%. Это состав кода, а не уровень владения технологиями. Для Gateway измеряются два отслеживаемых Ruby-модуля proxy и observer; библиотеки базового образа в расчёт не входят.
Ruby
MITM proxy, маршрутизация CONNECT и сервер административного интерфейса.
OpenSSL
Локальные сертификаты и выборочная инспекция разрешённого трафика.
HTTP / SSE / WebSocket
Обычные и потоковые запросы Codex, reconnect и usage.
NATS / outbox
Неблокирующая доставка очищенных событий в мониторинг.
04 / Решения
Как устроен проект
- TLS-инспекция включается только для разрешённых Codex-hostnames; остальной CONNECT остаётся обычным туннелем.
- Основной ответ клиенту не ждёт NATS: при недоступности мониторинга событие попадает в ограниченный outbox, а Codex продолжает работу.
- SSE и WebSocket разбираются по мере поступления с учётом разделённых сообщений, UTF-8 и reconnect.
- Секретные заголовки и токены исключаются до формирования события мониторинга.
05 / Проверка
Сценарии демки
- Открыть закрытую панель и проверить активную конфигурацию, сроки и состояние обновления.
- Сопоставить usage proxy-пользователя с агрегатами за 24 часа и 7 дней.
- Проверить прохождение HTTP, SSE и WebSocket и состояние Ruby proxy.
- Открыть документацию proxy и границы TLS-инспекции.
Результаты проверок
- Рабочий Gateway обслуживает Codex-клиентов и показывает агрегированный usage по отдельным proxy-пользователям.
- Восемь снимков получены с действующего экземпляра; серверные данные не изменялись, ошибок страницы не обнаружено.
Ограничения
- Административный интерфейс закрыт Basic Auth; публичная страница содержит только обезличенные снимки.
- Снимки показывают реальные агрегаты, но аккаунты и конфигурационные значения заменены в DOM перед кадром.
- Tracing в самом Gateway не является источником публичного эфира: живые события передаются в отдельный Synadia-контур.
Технические заметки
Модули, API, схема данных, запуск и результаты проверок.
Документация →Материалы ↓