ИШ: этапы обновления шлюза в окне обновления bj, проверка нового ИШ, свежая версия в строке НРД

- окно обновления bj после перезапуска ведёт обновление ИШ по этапам (загрузка, остановка,
  резервная копия, установка, запуск, проверка) и закрывается только после проверки;
  пока шлюз обновляется, то же окно на любой странице
- bj-igate-admin: этапы stop/backup/verify; после запуска сверяются версия, служба, движок,
  каналы и ключ с прежними (иначе автооткат), обмен с НРД
- версия ИШ в строке НРД читается всегда заново (кэш 6 ч — только сайт НРД);
  после установки версии пересобираются сразу

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-21 22:50:43 +03:00
parent e4d7e31f7d
commit c9ab60130f
6 changed files with 179 additions and 56 deletions
+15 -15
View File
@@ -82,20 +82,24 @@ var (
// сайт НРД на каждый показ статуса). Сетевая часть best-effort: при недоступности
// сайта возвращается только установленная версия.
func ishVersionInfo(ctx context.Context) IshVersionInfo {
// установленную версию читаем всегда заново (ИШ мог обновиться минуту назад), сайт — из кэша
ishVerMu.Lock()
if ishVerCache != nil && time.Since(ishVerCache.CheckedAt) < ishVerTTL {
c := *ishVerCache
ishVerMu.Unlock()
return c
}
site := ishVerCache
ishVerMu.Unlock()
info := IshVersionInfo{
Installed: ishInstalledVersion(),
CheckedAt: time.Now().UTC(),
if site == nil || time.Since(site.CheckedAt) >= ishVerTTL {
linux, latest := ishSiteVersions(ctx)
site = &IshVersionInfo{SiteLinux: linux, SiteLatest: latest, CheckedAt: time.Now().UTC()}
ishVerMu.Lock()
ishVerCache = site
ishVerMu.Unlock()
}
linux, latest := ishSiteVersions(ctx)
info.SiteLinux, info.SiteLatest = linux, latest
info := IshVersionInfo{
Installed: ishInstalledVersion(),
SiteLinux: site.SiteLinux,
SiteLatest: site.SiteLatest,
CheckedAt: site.CheckedAt,
}
linux, latest := info.SiteLinux, info.SiteLatest
switch {
case info.Installed == "":
@@ -113,10 +117,6 @@ func ishVersionInfo(ctx context.Context) IshVersionInfo {
info.UpToDate = false
info.Note = "доступно обновление до " + linux + " (Astra-Linux)"
}
ishVerMu.Lock()
ishVerCache = &info
ishVerMu.Unlock()
return info
}