Мастер, шаг 3 DEPO: подключение → трансферные таблицы → обработка (job); по умолчанию джобу SQL Agent создаёт bj разовым логином администратора
- редакция SQL Server определяется (Express/PostgreSQL — обработку запускает bj); - создание джобы и таблиц — логином администратора, который не сохраняется; - настройки обмена с DEPO открыты без пароля перспективных модулей, если QUIK МНП в лицензии. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -170,6 +170,11 @@ type WizardData struct {
|
||||
Lic LicenseStatus
|
||||
DepoLicensed bool
|
||||
DepoDB string
|
||||
DepoTables DepoTablesView
|
||||
DepoJob DepoJobView
|
||||
DepoEdition string // редакция SQL Server клиента (пусто — не определена)
|
||||
DepoAgent bool // у SQL Server есть SQL Agent (не Express, не PostgreSQL)
|
||||
DepoJobDef string // способ обработки по умолчанию для мастера
|
||||
ValidataVer string // версия установленной «Валидаты Клиент L» (пусто — не установлена)
|
||||
CryptoSvc string // состояние службы bj-crypto (systemctl is-active)
|
||||
PGSummary string // куда подключена база bj, без пароля
|
||||
@@ -208,7 +213,10 @@ func (h *setupHandlers) renderWizard(w http.ResponseWriter, r *http.Request) {
|
||||
d.Done.License = d.Lic.Valid
|
||||
d.DepoLicensed = moduleAllowed(h.rc, "quik-mnp")
|
||||
d.DepoDB = s.Fancy.DepoDB()
|
||||
d.Done.Depo = strings.TrimSpace(s.Fancy.Server) != "" || !d.DepoLicensed
|
||||
d.DepoTables = depoTablesView(s.Fancy)
|
||||
d.DepoJob = depoJobView(s.Fancy)
|
||||
// Шаг 3 выполнен, когда есть подключение, трансферные таблицы и работающая обработка (job).
|
||||
d.Done.Depo = !d.DepoLicensed || (strings.TrimSpace(s.Fancy.Server) != "" && s.Fancy.DepoTablesCheckOK && s.Fancy.DepoJobCheckOK)
|
||||
d.Done.Postgres = s.Postgres.DSN != ""
|
||||
{
|
||||
ctx, cancel := context.WithTimeout(r.Context(), 3*time.Second)
|
||||
@@ -256,6 +264,19 @@ func (h *setupHandlers) renderWizard(w http.ResponseWriter, r *http.Request) {
|
||||
step = 7
|
||||
}
|
||||
d.Step = step
|
||||
if step == 3 && d.DepoLicensed && strings.TrimSpace(s.Fancy.Server) != "" {
|
||||
// Есть ли у сервера SQL Agent: у Express его нет, у PostgreSQL — тоже; тогда обработку
|
||||
// запускает сам bj. Иначе по умолчанию джобу SQL Agent создаёт bj.
|
||||
d.DepoJobDef = "bj"
|
||||
if !s.Fancy.IsPostgres() {
|
||||
ctx, cancel := context.WithTimeout(r.Context(), 4*time.Second)
|
||||
d.DepoEdition, d.DepoAgent = depoServerEdition(ctx, s.Fancy)
|
||||
cancel()
|
||||
if d.DepoAgent || d.DepoEdition == "" {
|
||||
d.DepoJobDef = "sql-auto"
|
||||
}
|
||||
}
|
||||
}
|
||||
if step == 1 && d.Done.License {
|
||||
// Образ ставит ядро той версии, с которой собран; всё, что вышло позже (исправления ядра,
|
||||
// установщика и служб), приезжает обновлением — предлагаем его сразу после ввода ключа.
|
||||
@@ -268,6 +289,21 @@ func (h *setupHandlers) renderWizard(w http.ResponseWriter, r *http.Request) {
|
||||
render(w, h.tpl.a.wizard, d)
|
||||
}
|
||||
|
||||
// depoServerEdition — редакция SQL Server и есть ли у неё SQL Agent (EngineEdition 4 — Express).
|
||||
func depoServerEdition(ctx context.Context, f FancyMSSQLSettings) (string, bool) {
|
||||
db, err := fancyOpen(f, "master")
|
||||
if err != nil {
|
||||
return "", false
|
||||
}
|
||||
defer db.Close()
|
||||
var eng int
|
||||
var ed string
|
||||
if err := db.QueryRowContext(ctx, "SELECT CAST(SERVERPROPERTY('EngineEdition') AS int), CAST(SERVERPROPERTY('Edition') AS nvarchar(128))").Scan(&eng, &ed); err != nil {
|
||||
return "", false
|
||||
}
|
||||
return ed, eng != 4
|
||||
}
|
||||
|
||||
// wizardProgressFile — номер последнего пройденного шага мастера (переход «Далее» на шаг N
|
||||
// означает, что шаги до N пройдены).
|
||||
const wizardProgressFile = "/var/lib/bj/.bj/wizard-progress"
|
||||
|
||||
Reference in New Issue
Block a user