Files
utun2/tools/etcpmon/IMPLEMENTATION.md
T

28 lines
2.8 KiB
Markdown

# Устройство etcpmon
Действующие контракты и использование описаны в [etcpmon_doc.md](etcpmon_doc.md),
API — в `etcpmon_client.h`, `etcpmon_gui.h`, `etcpmon_graph.h` и `etcpmon_protocol.h`.
Серверная реализация: `src/control_server.c/h` и
[control_server_doc.md](../../src/control_server_doc.md).
`WinMain` создаёт `etcpmon_app`, инициализирует Winsock/классы окон, создаёт окно и запускает
message loop. Таймер GUI вызывает неблокирующий `etcpmon_client_process()`; фонового сетевого
потока нет. Client завершает connect, разбирает TCP-кадры, обновляет кеши и вызывает GUI callbacks.
Сэмпл истории добавляет только парсер ответа метрик; GUI отображает уже сохранённую историю.
Все команды клиента проходят через один TX FIFO с лимитом 64 КиБ/256 кадров и смещением досылки.
Pending с ненулевым seq регистрируется вместе с кадром, но срок ответа начинается после полной отправки.
Тип и payload ответа проверяются до снятия pending и вызова callback.
Сервер использует `ll_queue` с одним кадром до 32 КиБ и отдельным смещением частичной отправки.
Чтение/разбор команд ждут пустой очереди через отменяемый deferred waiter. Начальная подписка
хранит ID узлов и сериализует актуальную запись при освобождении TX; live-изменения объединяются
в ограниченном наборе из 256 ID. Переполнение отключает подписчика с диагностикой.
Перед освобождением клиента отменяются таймер и waiter, затем освобождаются снимок и очередь.
Метрики выдаются по запросу, а сообщения об узлах UTUN — только после явной подписки другого клиента;
сам GUI etcpmon подписку не использует.
Проверки клиента: `make -C tools/etcpmon CC=x86_64-w64-mingw32-gcc TEST_RUNNER=wine check`.
Проверки серверных очередей/cleanup/метрик: цель `test_control_server` из `tests/Makefile.am`.
Они проверяют разные стороны протокола и не заменяют интеграционный запуск клиента с сервером.