Оповещения: группа «Администратор системы», блок «Кому писать» открыт; копии: адрес хранилища как в проводнике

Администратору (адрес из «Почты») — сбои (ИШ, связь с НРД, службы bj, DEPO) и обновления (новый выпуск bj,
ИШ, лицензия, сертификаты); отделам — переводы и поручения. Существующие установки: администратор получает
всё, что получал. Новые оповещения: «Доступно обновление bj» (раз на выпуск), «Служба … не работает /
снова работает» (модули и служба ключей Валидаты). Резервные копии: \\сервер\папка или сервер + общая
папка по полям → //сервер/папка; понятная причина отказа доступа.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
zuevav
2026-10-06 22:44:35 +03:00
parent f07bb53162
commit d23ddf6e0c
16 changed files with 547 additions and 63 deletions
+19
View File
@@ -574,6 +574,7 @@ func (u *Updater) updateLoop(ctx context.Context) {
defer cancel()
if st, err := u.CheckForUpdate(cctx); err == nil && st.HasUpdate {
log.Printf("lk-gateway: %s", st.Message)
u.notifyUpdate(st)
}
}
// первая проверка через минуту после старта
@@ -596,6 +597,24 @@ func (u *Updater) updateLoop(ctx context.Context) {
}
}
// notifyUpdate — администратору системы: вышел выпуск, который на этом сервере ещё не установлен (по разу на выпуск).
func (u *Updater) notifyUpdate(st UpdateStatus) {
cfg := u.rc.Snapshot().Update
if st.Available == "" || cfg.Notified == st.Available {
return
}
cfg.Notified = st.Available
if err := u.rc.SaveUpdateSettings(cfg); err != nil {
return
}
body := "Вышел выпуск bj " + st.Available + ", на этом сервере он ещё не установлен: " + strings.TrimPrefix(st.Message, "доступны обновления: ") +
". Установить — Настройка → Обновления, кнопка «Обновить»; обмен на время установки прерывается на минуту-две."
if n := strings.TrimSpace(st.Notes); n != "" {
body += "\n\nЧто нового:\n" + n
}
raiseSystemAlert(u.rc, "Доступно обновление bj "+st.Available, body)
}
// ApplyBundle — обновление из файла для закрытого контура: пакет с портала клиента
// (подписанный манифест + файлы компонентов). Что ставить, решает тот же план, что и при
// обновлении по сети: всё, что новее установленного, в порядке компонентов — ядро первым,