28 lines
2.8 KiB
Markdown
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`.
|
|
Они проверяют разные стороны протокола и не заменяют интеграционный запуск клиента с сервером.
|