feat(admin): авто-сброс эмуляторов НРД/МНП при окончании режима разработки
Если оператор временно получил dev-режим, включил эмулятор и забыл — при окончании dev-режима флаги LK.EmulateNSD и QuikMNP.Emulate сбрасываются насовсем (а не просто перестают действовать): при следующей выдаче dev-режима эмуляторы молча не оживут. Проверка disableEmulatorsIfDevOff вызывается при старте сервера (после продления лицензии) и на каждом проходе цикла продления — ловит истечение dev и по времени, без продления. При сбросе — запись в ленту событий: «Эмуляторы отключены: режим разработки закончился» с перечнем выключенного; если был включён эмулятор МНП при WritesEnabled=false — предупреждение, что цикл МНП остановлен и для боевой работы нужно включить запись.
This commit is contained in:
@@ -7,9 +7,11 @@ package lkgateway
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// emuRejectOption — вариант кода отказа для эмулятора НРД (value — «07», подпись — с названием).
|
||||
@@ -159,3 +161,51 @@ func emuOutcomeRu(outcome string) string {
|
||||
}
|
||||
return "подтверждение"
|
||||
}
|
||||
|
||||
// disableEmulatorsIfDevOff — безопасность: эмуляторы НРД/МНП действуют только в режиме
|
||||
// разработки; когда он заканчивается (по времени dev_until или снят на сервере лицензий),
|
||||
// флаги сбрасываются из настроек — иначе при следующей выдаче dev-режима эмуляция
|
||||
// молча оживёт. Вызывается при старте и в цикле продления лицензии.
|
||||
func disableEmulatorsIfDevOff(rc *RuntimeConfig) {
|
||||
if rc == nil || devMode(rc) {
|
||||
return
|
||||
}
|
||||
s := rc.Snapshot()
|
||||
if !s.LK.EmulateNSD && !s.Quik.Emulate {
|
||||
return
|
||||
}
|
||||
var off []string
|
||||
if s.LK.EmulateNSD {
|
||||
lk := s.LK
|
||||
lk.EmulateNSD = false
|
||||
if err := rc.UpdateLK(lk); err != nil {
|
||||
log.Printf("lk-gateway: авто-сброс эмулятора НРД: %v", err)
|
||||
} else {
|
||||
off = append(off, "эмулятор НРД (заявки ЛК)")
|
||||
}
|
||||
}
|
||||
if s.Quik.Emulate {
|
||||
q := s.Quik
|
||||
q.Emulate = false
|
||||
if err := rc.UpdateQuik(q); err != nil {
|
||||
log.Printf("lk-gateway: авто-сброс эмулятора МНП: %v", err)
|
||||
} else {
|
||||
off = append(off, "эмулятор МНП QUIK")
|
||||
}
|
||||
}
|
||||
if len(off) == 0 {
|
||||
return
|
||||
}
|
||||
log.Printf("lk-gateway: режим разработки закончился — эмуляторы отключены: %s", strings.Join(off, ", "))
|
||||
body := "Выключены: " + strings.Join(off, ", ") + ". Флаги эмуляции сброшены из настроек: при следующем включении режима разработки эмуляторы не включатся сами — их нужно будет включить заново на странице «Эмуляторы»."
|
||||
if s.Quik.Emulate && !s.Quik.WritesEnabled {
|
||||
body += " Цикл M2M в МНП остановлен: записи в МНП не разрешены — для боевой работы выберите «Чтение и запись» в настройках QUIK."
|
||||
}
|
||||
_ = rc.AddNews(NewsItem{
|
||||
ID: "sys-" + strconv.FormatInt(time.Now().Unix()/600, 10) + "-emulators-off",
|
||||
At: time.Now(),
|
||||
Kind: "system",
|
||||
Title: "Эмуляторы отключены: режим разработки закончился",
|
||||
Body: body,
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user