| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- // 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_, ".", ",<br>")
- 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)
- }
|