ИШ ставится при подготовке; на шаге «Шлюз НРД» — версия и «Установить заново»; ссылка на НРД вместо писем
- «Подготовка модулей»: ИШ нет на сервере — bj ставит его из дистрибутива на сервере (образ или обновление bj — версия, проверенная ZETIT), ход — в списке. - Шаг «Шлюз НРД»: установлен и работает — версия; не стоит или не работает — одна кнопка «Установить ИШ» / «Установить ИШ заново» (систему переставлять не нужно). «Скачать с сайта НРД» и «Установить из файла» — только в режиме разработки: версию ИШ меняем после своей проверки, вместе с обновлением bj. - Каналы TEST3 и боевого: до установки ИШ — «канал создаётся после установки ИШ», после — «Создать канал». - «Письма в НРД о доступе к контурам» убраны: НРД подключает заявкой на сайте — ссылка на «MOEX МОСТ для M2M», раздел «Как подключиться». Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -7,6 +7,7 @@ package lkgateway
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
@@ -30,6 +31,7 @@ var prepareRun struct {
|
||||
Running, Finished bool
|
||||
Result, Err string
|
||||
UpdState, UpdText string // этап «Обновление bj»: пусто — ещё не проверялось в этом запуске bj
|
||||
IgateErr string // установку ИШ не удалось даже запустить
|
||||
}
|
||||
|
||||
// prepareBoot — метка запуска bj: страница видит перезапуск (после обновления ядра) и продолжает подготовку.
|
||||
@@ -86,6 +88,7 @@ func prepareItems(rc *RuntimeConfig, running, finished bool, runErr string) []Pr
|
||||
}
|
||||
out = append(out, it)
|
||||
}
|
||||
out = append(out, prepareIgateItem())
|
||||
if moduleAllowed(rc, "web-cabinet") {
|
||||
out = append(out, PrepareItem{Title: moduleTitles["web-cabinet"], State: "info", Detail: "ставится на веб-сервер организации: дистрибутив и ключ кабинета — в мастере, глава «Запуск»"})
|
||||
}
|
||||
@@ -169,7 +172,7 @@ func prepareStart(rc *RuntimeConfig) {
|
||||
prepareRun.Running, prepareRun.Finished, prepareRun.Result, prepareRun.Err = true, false, "", ""
|
||||
prepareRun.Unlock()
|
||||
go func() {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 12*time.Minute)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 25*time.Minute)
|
||||
defer cancel()
|
||||
prepareUpdates(ctx, rc) // сначала — обновления (при обновлении ядра bj перезапустится, страница продолжит)
|
||||
var msg, errText string
|
||||
@@ -180,12 +183,73 @@ func prepareStart(rc *RuntimeConfig) {
|
||||
} else {
|
||||
msg = m
|
||||
}
|
||||
prepareIgate(ctx)
|
||||
prepareRun.Lock()
|
||||
prepareRun.Running, prepareRun.Finished, prepareRun.Result, prepareRun.Err = false, true, msg, errText
|
||||
prepareRun.Unlock()
|
||||
}()
|
||||
}
|
||||
|
||||
// prepareIgate — интеграционный шлюз НРД при подготовке: нет на сервере — поставить из дистрибутива, который
|
||||
// лежит на сервере (образ или обновление bj): это версия, проверенная ZETIT вместе с bj. С сайта НРД ИШ не
|
||||
// качается — новые версии приходят только с обновлением bj. Ход установки пишет установщик (igateInstallStatus).
|
||||
func prepareIgate(ctx context.Context) {
|
||||
if igateInstalled() || igateBundledVersion() == "" {
|
||||
return
|
||||
}
|
||||
if st := igateInstallStatus(); !st.Busy {
|
||||
res, err := runKeymediaOp(ctx, "igate-install", map[string]string{"extra": `{"bundled":"1"}`})
|
||||
if err == nil {
|
||||
if ok, _ := res["ok"].(bool); !ok {
|
||||
err = fmt.Errorf("%v", res["error"])
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
prepareRun.Lock()
|
||||
prepareRun.IgateErr = err.Error()
|
||||
prepareRun.Unlock()
|
||||
return
|
||||
}
|
||||
}
|
||||
for ctx.Err() == nil { // 2–5 минут: пакеты, пользователь igate, база, служба
|
||||
time.Sleep(3 * time.Second)
|
||||
if st := igateInstallStatus(); !st.Busy && st.Stage != "" {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// prepareIgateItem — строка «Интеграционный шлюз НРД» на экране подготовки.
|
||||
func prepareIgateItem() PrepareItem {
|
||||
it := PrepareItem{Title: "Интеграционный шлюз НРД (ИШ)"}
|
||||
st := igateInstallStatus()
|
||||
prepareRun.Lock()
|
||||
igErr := prepareRun.IgateErr
|
||||
prepareRun.Unlock()
|
||||
switch {
|
||||
case st.Busy:
|
||||
it.State, it.Detail = "run", "устанавливается: "+st.Msg+" (2–5 минут)"
|
||||
case igateInstalled():
|
||||
it.State, it.Detail = "ok", "установлен"+pickStr(prefixed(", версия ", ishInstalledVersion()), "")
|
||||
case st.Stage == "error":
|
||||
it.State, it.Detail = "err", "не установился: "+st.Msg+" — повторить можно в мастере, шаг «Шлюз НРД», кнопка «Установить ИШ заново»"
|
||||
case igErr != "":
|
||||
it.State, it.Detail = "err", "установка не запустилась: "+igErr+" — повторить можно в мастере, шаг «Шлюз НРД»"
|
||||
case igateBundledVersion() == "":
|
||||
it.State, it.Detail = "warn", "дистрибутива ИШ на сервере нет — он приходит с обновлением bj"
|
||||
default:
|
||||
it.State, it.Detail = "wait", "будет установлен, версия "+igateBundledVersion()
|
||||
}
|
||||
return it
|
||||
}
|
||||
|
||||
func prefixed(p, v string) string {
|
||||
if v == "" {
|
||||
return ""
|
||||
}
|
||||
return p + v
|
||||
}
|
||||
|
||||
// prepareUpdates — первый этап подготовки: есть обновление — поставить, нет — дальше.
|
||||
func prepareUpdates(ctx context.Context, rc *RuntimeConfig) {
|
||||
set := func(state, text string) {
|
||||
|
||||
Reference in New Issue
Block a user