// package page_monolit -- страница показа монолита. package page_monolit import ( _ "embed" "fmt" "strings" "sync" "github.com/gofiber/fiber/v3" mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx" "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/btn_modules" "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/btn_monolit" ) // PageMonolit -- страница показа монолита. type PageMonolit struct { kCtx mKs.IKernelCtx btnMonolit *btn_monolit.BtnMonolit btnModules *btn_modules.BtnModules } var ( page *PageMonolit block sync.Mutex ) // GetPageMonolit -- возвращает страницу монолита. func GetPageMonolit() *PageMonolit { block.Lock() defer block.Unlock() if page != nil { return page } sf := &PageMonolit{ kCtx: kctx.GetKernelCtx(), btnMonolit: btn_monolit.NewBtnMonolit(), btnModules: btn_modules.NewBtnModules(), } optFiber := sf.kCtx.Get("fiberApp") optFiber.Hassert("GetPageMonolit(): mod='monolit', not found fiberApp in kernel ctx") fiberApp := optFiber.Some().Val().(*fiber.App) fiberApp.Get("/monolit", sf.getMonolit) fiberApp.Post("/monolit_state", sf.postMonolitState) fiberApp.Post("/monolit_ctx", sf.postMonolitCtx) fiberApp.Post("/monolit_log", sf.postMonolitLog) page = sf return sf } // Функция обратного вызова при клике на кнопку "Монолит". func (sf *PageMonolit) clickMonolit() string { return "" } //go:embed log_block.html var strLogBlock string // Возвращает страницу лога монолита. func (sf *PageMonolit) postMonolitLog(ctx fiber.Ctx) error { optMonolit := sf.kCtx.Get("monolit") if optMonolit.IsNone() { err := fmt.Errorf("PageMonolit.postMonolitLog(): mod='monolit', not found monolit in kernel ctx") return err } mon := optMonolit.Some().Val().(mKs.IKernelMonolit) _log := mon.Log() strOut := "" for i := range 100 { msg := _log.Get(i).String() if strings.Contains(msg, "*no msg*") { continue } strOut += msg + "\n" } strOut = strings.ReplaceAll(strLogBlock, "{.log}", strOut) return ctx.SendString(strOut) } //go:embed ctx_row_val.html var strCtxRowVal string //go:embed ctx_row_block.html var strCtxRowBlock string // Возвращает блок контекста монолита. func (sf *PageMonolit) postMonolitCtx(ctx fiber.Ctx) error { optMon := sf.kCtx.Get("monolit") if optMon.IsNone() { err := fmt.Errorf("PageMonolit.postMonolitCtx(): mod='monolit', not found monolit in kernel ctx") return err } mon := optMon.Some().Val().(mKs.IKernelMonolit) chLst := mon.Ctx().SortedList() strOut := `` for _, val := range chLst { strRow := strCtxRowVal strRow = strings.ReplaceAll(strRow, "{.key}", val.Key()) strRow = strings.ReplaceAll(strRow, "{.value}", fmt.Sprint(val.Val())) type_ := fmt.Sprintf("%#T", val.Val()) type_ = strings.ReplaceAll(type_, ".", ",
") strRow = strings.ReplaceAll(strRow, "{.type}", type_) strRow = strings.ReplaceAll(strRow, "{.createAt}", val.CreateAt().String()) strRow = strings.ReplaceAll(strRow, "{.updateAt}", val.UpdateAt().String()) strRow = strings.ReplaceAll(strRow, "{.comment}", val.Comment()) strOut += strRow } strOut = strings.ReplaceAll(strCtxRowBlock, "{.ctx_block}", strOut) return ctx.SendString(strOut) } //go:embed monolit_state.html var strStateMonolit string // Показывает состояние монолита. func (sf *PageMonolit) postMonolitState(ctx fiber.Ctx) error { dictState := map[string]any{} optMonolit := sf.kCtx.Get("monolit") if optMonolit.IsNone() { err := fmt.Errorf("PageMonolit.postMonolitState(): mod='monolit', not found monolit from kernel ctx") return err } ctxMon := optMonolit.Some() mon := ctxMon.Val().(mKs.IKernelMonolit) dictState["{.name}"] = mon.Name() dictState["{.createAt}"] = ctxMon.CreateAt() dictState["{.updateAt}"] = ctxMon.UpdateAt() dictState["{.comment}"] = ctxMon.Comment() strOut := strStateMonolit for key, val := range dictState { strOut = strings.ReplaceAll(strOut, key, fmt.Sprint(val)) } return ctx.SendString(strOut) } //go:embed page_monolit.html var strPageMonolit string // Индексная страница монолита. func (sf *PageMonolit) getMonolit(ctx fiber.Ctx) error { ctx.Set("Content-type", "text/html; charset=utf8;\n\n") strOut := strings.ReplaceAll(strPageMonolit, "{.btn_monolit}", sf.btnMonolit.Html()) strOut = strings.ReplaceAll(strOut, "{.btn_modules}", sf.btnModules.Html()) return ctx.SendString(strOut) }