ИШ: этапы обновления шлюза в окне обновления 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
+20 -14
View File
@@ -15,22 +15,27 @@ import (
)
type updateProgressState struct {
Seq int64 `json:"seq"`
Active bool `json:"active"`
Finished bool `json:"finished"`
Step int `json:"step"`
Steps int `json:"steps"`
Stage string `json:"stage"`
Done int64 `json:"done"`
Total int64 `json:"total"`
Target string `json:"target,omitempty"` // версия ядра после обновления (если ядро обновляется)
Result string `json:"result,omitempty"`
Note string `json:"note,omitempty"` // пояснение, которое нужно показать и после перезапуска ядра
Err string `json:"error,omitempty"`
Started time.Time `json:"started"`
Version string `json:"version"` // версия работающего bj-server
Seq int64 `json:"seq"`
Active bool `json:"active"`
Finished bool `json:"finished"`
Step int `json:"step"`
Steps int `json:"steps"`
Stage string `json:"stage"`
Done int64 `json:"done"`
Total int64 `json:"total"`
Target string `json:"target,omitempty"` // версия ядра после обновления (если ядро обновляется)
Result string `json:"result,omitempty"`
Note string `json:"note,omitempty"` // пояснение, которое нужно показать и после перезапуска ядра
Err string `json:"error,omitempty"`
Started time.Time `json:"started"`
Version string `json:"version"` // версия работающего bj-server
IgateTo string `json:"igate_to,omitempty"` // bj сам обновит ИШ до этой версии (ещё не обновил)
Igate map[string]any `json:"igate,omitempty"` // ход установки ИШ (как /admin/setup/igate/install-status)
Up int `json:"up"` // секунд с запуска bj-server
}
var procStarted = time.Now()
var updProg = struct {
sync.Mutex
s updateProgressState
@@ -110,6 +115,7 @@ func (h *setupHandlers) updateProgress(w http.ResponseWriter, r *http.Request) {
s := updProg.s
updProg.Unlock()
s.Version = BuildVersion
s.IgateTo, s.Igate, s.Up = igatePendingUpgrade(), igateInstallStatusJSON(h.rc), int(time.Since(procStarted).Seconds())
w.Header().Set("Content-Type", "application/json")
w.Header().Set("Cache-Control", "no-store")
_ = json.NewEncoder(w).Encode(s)