ЛК: портфель ДЕПО «для всех клиентов» — одно соединение и один запрос к DEPO, свой цикл раз в 5 мин; итог в настройках свёрнут

На 9 после включения «для всех» (23.10.2026) каждый проход открывал по два
соединения с DEPO на каждый из 1158 договоров — около 50 входов в MSSQL в
секунду без перерыва, а проход шёл в цикле опроса заявок ЛК и задерживал его.

- Остатки всех клиентов — одним запросом (fsql.Dp03), одно соединение с DEPO
  на проход; по списку — запрос по клиенту на том же соединении. На боевой
  DEPO: общий запрос 127 мс, совпадает с запросом по клиенту (58 договоров).
- Свой цикл lkPortfolioLoop (здоровье «lk-portfolio»): по списку — каждые
  10 с, для всех клиентов — раз в 5 мин. Опрос заявок ЛК больше не ждёт.
- Проходы по очереди: фоновый и «Заполнить сейчас» не шлют один портфель
  дважды; принудительный проход пропускает отправленные за последнюю минуту.
- ЛК не отвечает — проход прерывается; одна и та же ошибка отправки не
  повторяется в журнале каждый проход. Ошибка чтения DEPO снимается, когда
  портфель снова читается без изменений.
- Настройки: итог (договоров, отправлено, нечего отправлять, с ошибкой),
  последние 5 отправок; договоры с ошибкой и все договоры — под раскрытием.
  «Отправлять нечего» — не ошибка (поле Nothing).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-23 14:45:16 +03:00
parent 21d5f33394
commit a0ffbfa721
10 changed files with 377 additions and 33 deletions
+3
View File
@@ -288,6 +288,7 @@ func (s *Server) Run(ctx context.Context) error {
// Монитор здоровья + systemd watchdog: следит за фоновыми горутинами,
// поднимает алерт при зависании и «пинает» systemd, пока всё живо.
healthRegister("poll-lk", time.Minute)
healthRegister("lk-portfolio", 2*time.Minute) // проход «для всех клиентов» — до 4 мин без отметки
// Ключ продлеваем до запуска фоновых циклов: режим разработки (имитации и т.п.) должен быть
// известен им с первого прохода.
if licenseNeedsRenew(s.rc) {
@@ -338,6 +339,8 @@ func (s *Server) Run(ctx context.Context) error {
// Поллер заявок ЛК ЕСИА Финанс: раз в минуту забирает новые depo_m2m и
// отправляет в НРД (или имитатору). Интервал 1 мин — время ответов регламентировано.
go superviseLoop(ctx, "poll-lk", s.rc, s.pollLKClaims)
// Портфели ДЕПО из DEPO в ЛК: по списку — каждые 10 с, для всех клиентов — раз в 5 мин.
go superviseLoop(ctx, "lk-portfolio", s.rc, s.lkPortfolioLoop)
// Авто-обновление справочника участников M2M раз в сутки (только реальный
// ИШ). Тик суточный — в heartbeat-монитор не регистрируем, только recover.