From f50b3382947d20650786471af157ef5f8f9e2282 Mon Sep 17 00:00:00 2001 From: fontvielle Date: Thu, 22 Oct 2026 11:05:24 +0300 Subject: [PATCH] =?UTF-8?q?=C2=AB=D0=94=D0=B8=D0=B0=D0=B3=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=B8=D0=BA=D0=B0=C2=BB=20=D0=BE=D0=B1=D1=8A=D0=B5?= =?UTF-8?q?=D0=B4=D0=B8=D0=BD=D0=B5=D0=BD=D0=B0=20=D1=81=D0=BE=20=C2=AB?= =?UTF-8?q?=D0=A1=D1=82=D0=B0=D1=82=D1=83=D1=81=D0=BE=D0=BC=20=D1=81=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D0=B5=D0=BC=D1=8B=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Службы (с перезапуском), здоровье фоновых компонентов, запрос справочника участников и тестовые прогоны переехали из «Настройка → Диагностика» в «Статус системы» — одно место про состояние bj. Раздел «Диагностика» и пункт меню убраны, старые ссылки (#tests, #units) ведут в «Статус». «Настройка» больше не опрашивает systemctl при каждом открытии. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn --- internal/lkgateway/admin.go | 4 + internal/lkgateway/setup.go | 1 - internal/lkgateway/unitswatch.go | 2 +- .../web/templates/admin_handbook.html | 2 +- .../web/templates/admin_help_manual.html | 2 +- .../lkgateway/web/templates/admin_setup.html | 90 +------------------ .../lkgateway/web/templates/admin_status.html | 83 +++++++++++++++++ 7 files changed, 92 insertions(+), 92 deletions(-) diff --git a/internal/lkgateway/admin.go b/internal/lkgateway/admin.go index d3603fe..d7a032a 100644 --- a/internal/lkgateway/admin.go +++ b/internal/lkgateway/admin.go @@ -629,6 +629,9 @@ type statusData struct { StripFrom string // начало полосы Fails []SendFailView // недоставленные переводы Probe bool // только что запрошена проверка связи + Units []UnitView // службы bj и модулей + Health []HealthStatus // фоновые компоненты + LastTest any // последний сквозной тестовый прогон } // RegisterAdmin вешает HTML-маршруты /admin/* на mux. Возвращает admin @@ -1019,6 +1022,7 @@ func (a *admin) renderStatus(w http.ResponseWriter, r *http.Request, opts CheckO page: pg, Checks: s.Checks, CheckedAt: s.CheckedAt, Strip: nsdStrip(titles, now), StripFrom: now.Add(-24 * time.Hour).Format("02.01 15:04"), Fails: sendFailViews(), Probe: r.URL.Query().Get("probe") != "", + Units: unitViews(globalRC), Health: HealthSnapshot(), LastTest: globalRC.Snapshot().LastTest, }) } diff --git a/internal/lkgateway/setup.go b/internal/lkgateway/setup.go index bfaf761..c1f964e 100644 --- a/internal/lkgateway/setup.go +++ b/internal/lkgateway/setup.go @@ -639,7 +639,6 @@ func (h *setupHandlers) setupData(w http.ResponseWriter, req *http.Request, flas LKAgent: lkAgentStatus(s), LKPreview: lkPreviewStatus(h.rc, req), LKData: lkDataView(h.rc), - Units: unitViews(h.rc), UpdateFailed: updateResultFailed(s.Update.LastResult), LKKeyMask: lkKeyForPage(s.LK.APIKey), Versions: systemVersions(h.rc), diff --git a/internal/lkgateway/unitswatch.go b/internal/lkgateway/unitswatch.go index db2e7d1..26b09b2 100644 --- a/internal/lkgateway/unitswatch.go +++ b/internal/lkgateway/unitswatch.go @@ -61,7 +61,7 @@ func watchedUnits(rc *RuntimeConfig) []watchedUnit { st += ", с " + v.Since } out = append(out, watchedUnit{Key: v.Unit, Title: v.Title, Unit: v.Unit, OK: v.OK(), State: st, - Hint: "Перезапустить — Настройка → Диагностика → «Службы», кнопка «Перезапустить»; если не поднимается — journalctl -u " + v.Unit + "."}) + Hint: "Перезапустить — Статус системы → «Службы», кнопка «Перезапустить»; если не поднимается — journalctl -u " + v.Unit + "."}) } // служба ключей — когда она нужна: включена в автозапуск (bj включает её при установке ключа) или уже работала; // на свежем сервере до установки ключа её может и не быть — это не сбой diff --git a/internal/lkgateway/web/templates/admin_handbook.html b/internal/lkgateway/web/templates/admin_handbook.html index 9244080..deced14 100644 --- a/internal/lkgateway/web/templates/admin_handbook.html +++ b/internal/lkgateway/web/templates/admin_handbook.html @@ -12,7 +12,7 @@ {{if not .Participants}}
Справочник ещё не загружен. -

Запросите его у НРД: Настройка → Диагностика → «Запросить справочник у НРД». Ответ придёт во входящие ИШ (~30–60 сек) и появится здесь.

+

Запросите его у НРД: Статус системы → «Запросить справочник у НРД». Ответ придёт во входящие шлюза НРД (~30–60 сек) и появится здесь.

{{end}} diff --git a/internal/lkgateway/web/templates/admin_help_manual.html b/internal/lkgateway/web/templates/admin_help_manual.html index 418bf4c..829e929 100644 --- a/internal/lkgateway/web/templates/admin_help_manual.html +++ b/internal/lkgateway/web/templates/admin_help_manual.html @@ -80,7 +80,7 @@
  • Можно ли изменить поручение после отправки? Нет. Если данные неверны, дождитесь отказа или исполнения и введите новое поручение.
  • Отправка не удалась. Причина показана в карточке, поручение остаётся черновиком. Устраните причину (например, связь с НРД или торговой системой) и отправьте снова.
  • Нет кнопки «Найти в DEPO». Учётная система не подключена к bj. Заполните поля вручную и сверьте данные в учётной системе сами.
  • -
  • Справочник участников пуст. Администратор может запросить справочник в «Настройка → Диагностика», а пока ИНН можно ввести вручную.
  • +
  • Справочник участников пуст. Администратор может запросить справочник в «Статус системы» (карточка «Справочник участников M2M»), а пока ИНН можно ввести вручную.
  • {{end}} diff --git a/internal/lkgateway/web/templates/admin_setup.html b/internal/lkgateway/web/templates/admin_setup.html index 3fbd52c..364b370 100644 --- a/internal/lkgateway/web/templates/admin_setup.html +++ b/internal/lkgateway/web/templates/admin_setup.html @@ -1,4 +1,5 @@ {{define "content"}} + {{if .Flash}}
    {{.Flash}}
    {{end}}
    @@ -16,7 +17,6 @@ {{if mod "web-cabinet"}}{{end}} {{if mod "esia-finance"}}{{end}} {{if mod "onec-back"}}{{end}} - @@ -829,97 +829,11 @@ {{end}} - {{/* ============ ДИАГНОСТИКА (id sec-tests сохранён для ссылок) ============ */}} -
    -

    Диагностика

    - -
    -

    Службы

    -

    Ядро и модули работают отдельными службами: если служба модуля не запущена, его раздел в bj отвечает ошибкой связи. Здесь видно состояние и можно перезапустить службу, не заходя на сервер.

    -
    - {{if devOn}}{{end}} - {{range .Units}} - {{if devOn}}{{end}} - - - - - {{end}}
    СлужбаЧто делаетСостояниеС
    {{.Unit}}{{.Title}}{{if .OK}}работает{{else}}не работает{{if devOn}}: {{.State}}{{with .Sub}} / {{.}}{{end}}{{with .Result}} ({{.}}){{end}}{{end}}{{end}}{{if .Since}}{{.Since}}{{else}}—{{end}}
    - -
    -
    - - -
    -

    Здоровье сервиса

    -

    Фоновые компоненты под самоконтролем: при сбое перезапускаются автоматически, при зависании — перезапуск всего сервиса и запись в «Новости». Ниже — живой статус.

    - {{if .Health}} -
    - - - - {{range .Health}} - - - - - - - {{end}} - -
    КомпонентСостояниеПоследняя отметкаПоследняя ошибка
    {{healthLabel .Name}}{{if .Healthy}}работает{{else}}не отвечает{{end}}{{dur .Age}} назад{{if .LastErr}}{{.LastErr}}{{else}}—{{end}}
    -
    - {{else}} -

    Компоненты ещё не зарегистрированы (сервис только запущен).

    - {{end}} -
    - -
    -

    Справочник участников M2M

    -

    Справочник участников M2M из НРД: по нему bj узнаёт код участника по ИНН контрагента. bj запрашивает его сам; кнопка — запросить сейчас.

    -
    -

    Ответ НРД приходит через 30–60 секунд.

    -
    - -{{if devOn}}
    -

    Тестовый пакет роботу НРД

    -

    Робот MC0012500000 эмулирует вторую сторону перевода. Выберите сценарий — bj-server отправит эталонный запрос через шлюз НРД, ответ придёт во входящие. Требуется настроенный шлюз НРД и ключ подписи.

    -
    - - -
    -

    Ответ робота — асинхронно (~30-60 сек) во входящие шлюза НРД.

    -
    - -
    -

    Сквозной тестовый прогон (mock/реальный)

    -

    Заявка с предзаполненными данными через всю цепочку до финального статуса.

    -
    - {{if .Settings.LastTest}} -
    - Последний прогон - - - - - - - -
    Статус{{if .Settings.LastTest.OK}}✓ успешно{{else}}✗ не прошёл{{end}}
    FSM-статус{{.Settings.LastTest.FinalStatus}}
    ClaimID{{.Settings.LastTest.ClaimID}} {{if .Settings.LastTest.ClaimID}}→ карточка{{end}}
    Сообщение{{.Settings.LastTest.Message}}
    -
    - {{end}} -
    {{end}} -
    {{/* ============ ОПОВЕЩЕНИЯ ============ */}}

    Оповещения

    -

    Кому и о чём bj пишет на почту: администратору системы — о сбоях и обновлениях, отделам — о переводах и поручениях. Все события видны и в ленте «Новости»; передать их в мониторинг Zabbix — Настройка → Диагностика.

    +

    Кому и о чём bj пишет на почту: администратору системы — о сбоях и обновлениях, отделам — о переводах и поручениях. Все события видны и в ленте «Новости»; передать их в мониторинг Zabbix — карточка «Zabbix» ниже.

    {{template "smtpCard" .}} diff --git a/internal/lkgateway/web/templates/admin_status.html b/internal/lkgateway/web/templates/admin_status.html index 4791b2f..ead691d 100644 --- a/internal/lkgateway/web/templates/admin_status.html +++ b/internal/lkgateway/web/templates/admin_status.html @@ -72,6 +72,89 @@

    Проверка выполнена в {{.CheckedAt.Format "15:04:05 02.01.2006"}}.

    +{{/* Диагностика: службы, здоровье фоновых компонентов, справочник, тестовые прогоны (раньше — Настройка → Диагностика) */}} +
    +

    Службы

    +

    Ядро и модули работают отдельными службами: если служба модуля не запущена, его раздел в bj отвечает ошибкой связи. Здесь видно состояние и можно перезапустить службу, не заходя на сервер.

    +
    + {{if devOn}}{{end}} + {{range .Units}} + {{if devOn}}{{end}} + + + + + {{end}}
    СлужбаЧто делаетСостояниеС
    {{.Unit}}{{.Title}}{{if .OK}}работает{{else}}не работает{{if devOn}}: {{.State}}{{with .Sub}} / {{.}}{{end}}{{with .Result}} ({{.}}){{end}}{{end}}{{end}}{{if .Since}}{{.Since}}{{else}}—{{end}}
    + +
    +
    + + +
    +

    Здоровье сервиса

    +

    Фоновые компоненты под самоконтролем: при сбое перезапускаются автоматически, при зависании — перезапуск всего сервиса и запись в «Новости». Ниже — живой статус.

    + {{if .Health}} +
    + + + + {{range .Health}} + + + + + + + {{end}} + +
    КомпонентСостояниеПоследняя отметкаПоследняя ошибка
    {{healthLabel .Name}}{{if .Healthy}}работает{{else}}не отвечает{{end}}{{dur .Age}} назад{{if .LastErr}}{{.LastErr}}{{else}}—{{end}}
    +
    + {{else}} +

    Компоненты ещё не зарегистрированы (сервис только запущен).

    + {{end}} +
    + +
    +

    Справочник участников M2M

    +

    Справочник участников M2M из НРД: по нему bj узнаёт код участника по ИНН контрагента. bj запрашивает его сам; кнопка — запросить сейчас.

    +
    +

    Ответ НРД приходит через 30–60 секунд.

    +
    + +{{if devOn}}
    +

    Тестовый пакет роботу НРД

    +

    Робот MC0012500000 эмулирует вторую сторону перевода. Выберите сценарий — bj-server отправит эталонный запрос через шлюз НРД, ответ придёт во входящие. Требуется настроенный шлюз НРД и ключ подписи.

    +
    + + +
    +

    Ответ робота — асинхронно (~30-60 сек) во входящие шлюза НРД.

    +
    + +
    +

    Сквозной тестовый прогон (mock/реальный)

    +

    Заявка с предзаполненными данными через всю цепочку до финального статуса.

    +
    + {{if .LastTest}} +
    + Последний прогон + + + + + + + +
    Статус{{if .LastTest.OK}}✓ успешно{{else}}✗ не прошёл{{end}}
    FSM-статус{{.LastTest.FinalStatus}}
    ClaimID{{.LastTest.ClaimID}} {{if .LastTest.ClaimID}}→ карточка{{end}}
    Сообщение{{.LastTest.Message}}
    +
    + {{end}} +
    {{end}} + {{if devOn}}{{/* дорожная карта разработки — только в режиме разработки */}}

    Что подключается на следующих этапах