ИШ: этапы обновления шлюза в окне обновления 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:
+25
-14
@@ -234,20 +234,7 @@ func registerIgateAdmin(mux *http.ServeMux, rc *RuntimeConfig) {
|
||||
})
|
||||
// ход установки: этап, сообщение, журнал и сколько секунд идёт текущий этап (по времени записи файла)
|
||||
mux.HandleFunc("/admin/setup/igate/install-status", func(w http.ResponseWriter, r *http.Request) {
|
||||
raw, err := os.ReadFile(igateInstallStatusPath)
|
||||
out := map[string]any{}
|
||||
if err != nil || json.Unmarshal(raw, &out) != nil {
|
||||
jsonOut(w, map[string]any{})
|
||||
return
|
||||
}
|
||||
if fi, err := os.Stat(igateInstallStatusPath); err == nil {
|
||||
out["elapsed"] = int(time.Since(fi.ModTime()).Seconds())
|
||||
}
|
||||
st := igateInstallStatus()
|
||||
if st.Stage == "error" && out["stage"] != "error" { // молчит 20 минут — прервалась
|
||||
out["stage"], out["msg"] = "error", st.Msg
|
||||
}
|
||||
jsonOut(w, out)
|
||||
jsonOut(w, igateInstallStatusJSON(rc))
|
||||
})
|
||||
// канал контура в ИШ (адрес, отпечаток УЦ, папка обмена); ключ — мастером установки ключа
|
||||
mux.HandleFunc("/admin/setup/igate/contour", func(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -410,6 +397,30 @@ type igateInstallState struct {
|
||||
// igateInstallStatusPath — файл хода установки; var — для тестов.
|
||||
var igateInstallStatusPath = "/var/lib/bj/igate-install-status.json"
|
||||
|
||||
// igateInstallStatusJSON — ход установки/обновления ИШ для страниц: этап, сообщение, журнал, сколько
|
||||
// секунд идёт этап (elapsed), идёт ли сейчас (busy). Как только установка закончилась, версии
|
||||
// пересобираются тут же — строка «Интеграционный шлюз НРД (ИШ): …» не показывает прежнюю.
|
||||
func igateInstallStatusJSON(rc *RuntimeConfig) map[string]any {
|
||||
out := map[string]any{}
|
||||
raw, err := os.ReadFile(igateInstallStatusPath)
|
||||
if err != nil || json.Unmarshal(raw, &out) != nil {
|
||||
return map[string]any{}
|
||||
}
|
||||
fi, err := os.Stat(igateInstallStatusPath)
|
||||
if err == nil {
|
||||
out["elapsed"] = int(time.Since(fi.ModTime()).Seconds())
|
||||
}
|
||||
st := igateInstallStatus()
|
||||
if st.Stage == "error" && out["stage"] != "error" { // молчит 20 минут — прервалась
|
||||
out["stage"], out["msg"] = "error", st.Msg
|
||||
}
|
||||
out["busy"] = st.Busy
|
||||
if !st.Busy && err == nil && fi.ModTime().After(systemVersions(rc).At) {
|
||||
refreshVersions(rc)
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func igateInstallStatus() igateInstallState {
|
||||
p := igateInstallStatusPath
|
||||
var st igateInstallState
|
||||
|
||||
Reference in New Issue
Block a user