Каждый рендер «Настройки» ждал /section службы bj-quikexport, а та
считала min(ts) и count(*) за сутки по npr.history (18,5 млн строк,
индекса по ts нет): 6 + 27 с на 28, срез по таймауту 10 с. Теперь начало
истории — первая строка по id, строки за сутки/час — двоичный поиск по id
(история только дописывается): ~45 мс. То же в /admin/npr/api/freshness.
bj-server ждёт раздел QUIK-экспорта не дольше 3 с и иначе отдаёт последний
удачный; прогрев версий, пользователей ЛК и раздела после запуска.
«Обновления» перезагружают страницу, только если что-то изменилось.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
bj-quikexport (modules/quikexport + cmd/bj-quikexport, 127.0.0.1:8084): управление ARQA
quikexport перенесено из bj-server. Настройки у службы в /var/lib/bj/.bj/quik-export/settings.json
(при первом запуске переносятся из setup.json), раздел отдаётся фрагментом с индикатором меню,
действия отвечают X-BJ-Flash. bj-server встраивает раздел в «Настройку», проксирует формы
/admin/setup/quikexport/… и передаёт лицензию (X-BJ-Licensed). Общая проверка служебного
ключа — modules/modkit (им пользуется и bj-npr), общее для прокси — lkgateway/modules.go.
Выделенные из ядра модули (bj-npr, bj-quikexport: Component.FromCore) при обновлении ставятся и
там, где их ещё нет, если входят в лицензию: release.MarkSplitModules, request.json "new",
root-установщик ставит и включает unit-файл из комплекта. Если в обновлении меняется сам
установщик, модули ставятся после перезапуска bj-server (ensureSplitModules).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Модуль вынесен в modules/npr + cmd/bj-npr (127.0.0.1:8083), обновляется
независимо от ядра. Служба читает подключение из setup.json и принимает
запросы только со служебным ключом модулей (/var/lib/bj/.bj/module.key,
создаёт bj-server). Полные страницы отдаются фрагментом (X-BJ-Layout: page).
bj-server хранит настройки и проверку подключения, проксирует /admin/npr
после входа, прав и лицензии и встраивает страницы модуля в общий макет
(admin.modulePage); если служба не отвечает — понятная страница.
Unit bj-npr.service встроен в установщик, установщик включает службы
установленных модулей; build-release.sh собирает bj-npr.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>