page_monolit.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. // package page_monolit -- страница показа монолита
  2. package page_monolit
  3. import (
  4. _ "embed"
  5. "fmt"
  6. "strings"
  7. "github.com/gofiber/fiber/v2"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/krn/kctx"
  9. . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes"
  10. . "gitp78su.ipnodns.ru/svi/kern/v4/lev1/result"
  11. "gitp78su.ipnodns.ru/svi/kern/v4/mds/mod_serv_http/btn_modules"
  12. "gitp78su.ipnodns.ru/svi/kern/v4/mds/mod_serv_http/btn_monolit"
  13. )
  14. // PageMonolit -- страница показа монолита
  15. type PageMonolit struct {
  16. ctx IKernelCtx
  17. btnMonolit *btn_monolit.BtnMonolit
  18. btnModules *btn_modules.BtnModules
  19. }
  20. var page *PageMonolit
  21. // GetPageMonolit -- возвращает страницу монолита
  22. func GetPageMonolit() IResult[*PageMonolit] {
  23. if page != nil {
  24. return NewRes(page)
  25. }
  26. kCtx := kctx.GetKernelCtx()
  27. sf := &PageMonolit{
  28. ctx: kCtx,
  29. btnMonolit: btn_monolit.NewBtnMonolit(),
  30. btnModules: btn_modules.NewBtnModules(),
  31. }
  32. resFiber := kCtx.Get("fiberApp")
  33. if resFiber.IsErr() {
  34. err := fmt.Errorf("GetPageMonolit(): mod='monolit', in get fiberApp, err=\n\t%w", resFiber.Err())
  35. return NewErr[*PageMonolit](err)
  36. }
  37. fiberApp := resFiber.Val().Val().(*fiber.App)
  38. fiberApp.Get("/monolit", sf.getMonolit)
  39. fiberApp.Post("/monolit_state", sf.postMonolitState)
  40. fiberApp.Post("/monolit_ctx", sf.postMonolitCtx)
  41. fiberApp.Post("/monolit_log", sf.postMonolitLog)
  42. page = sf
  43. return NewRes(sf)
  44. }
  45. // Функция обратного вызова при клике на кнопку "Монолит"
  46. func (sf *PageMonolit) clickMonolit() string {
  47. return ""
  48. }
  49. //go:embed log_block.html
  50. var strLogBlock string
  51. // Возвращает страницу лога монолита
  52. func (sf *PageMonolit) postMonolitLog(ctx *fiber.Ctx) error {
  53. mon := sf.ctx.Get("monolit").Val().(IKernelMonolit)
  54. _log := mon.Log()
  55. strOut := ""
  56. for i := range 100 {
  57. msg := _log.Get(i).String()
  58. if strings.Contains(msg, "*no msg*") {
  59. continue
  60. }
  61. strOut += msg + "\n"
  62. }
  63. strOut = strings.ReplaceAll(strLogBlock, "{.log}", strOut)
  64. return ctx.SendString(strOut)
  65. }
  66. //go:embed ctx_row_val.html
  67. var strCtxRowVal string
  68. //go:embed ctx_row_block.html
  69. var strCtxRowBlock string
  70. // Возвращает блок контекста монолита
  71. func (sf *PageMonolit) postMonolitCtx(ctx *fiber.Ctx) error {
  72. mon := sf.ctx.Get("monolit").Val().(IKernelMonolit)
  73. chLst := mon.Ctx().SortedList()
  74. strOut := ``
  75. for _, val := range chLst {
  76. strRow := strCtxRowVal
  77. strRow = strings.ReplaceAll(strRow, "{.key}", val.Key())
  78. strRow = strings.ReplaceAll(strRow, "{.value}", fmt.Sprint(val.Val()))
  79. type_ := fmt.Sprintf("%#T", val.Val())
  80. type_ = strings.ReplaceAll(type_, ".", ",<br>")
  81. strRow = strings.ReplaceAll(strRow, "{.type}", type_)
  82. strRow = strings.ReplaceAll(strRow, "{.createAt}", string(val.CreateAt()))
  83. strRow = strings.ReplaceAll(strRow, "{.updateAt}", string(val.UpdateAt()))
  84. strRow = strings.ReplaceAll(strRow, "{.comment}", val.Comment())
  85. strOut += strRow
  86. }
  87. strOut = strings.ReplaceAll(strCtxRowBlock, "{.ctx_block}", strOut)
  88. return ctx.SendString(strOut)
  89. }
  90. //go:embed monolit_state.html
  91. var strStateMonolit string
  92. // Показывает состояние монолита
  93. func (sf *PageMonolit) postMonolitState(ctx *fiber.Ctx) error {
  94. dictState := map[string]any{}
  95. resMon := sf.ctx.Get("monolit")
  96. if resMon.IsErr() {
  97. err := fmt.Errorf("PageMonolit.postMonolitState(): mod='monolit', in get monolit, err=\n\t%w", resMon.Err())
  98. return err
  99. }
  100. ctxMon := resMon.Val()
  101. mon := ctxMon.Val().(IKernelMonolit)
  102. dictState["{.name}"] = mon.Name()
  103. resMonolit := sf.ctx.Get("monolit")
  104. if resMonolit.IsErr() {
  105. err := fmt.Errorf("PageMonolit.postMonolitState(): mod='monolit', in get monolit, err=\n\t%w", resMonolit.Err())
  106. return err
  107. }
  108. dictState["{.createAt}"] = ctxMon.CreateAt()
  109. dictState["{.updateAt}"] = ctxMon.UpdateAt()
  110. dictState["{.comment}"] = ctxMon.Comment()
  111. strOut := strStateMonolit
  112. for key, val := range dictState {
  113. strOut = strings.ReplaceAll(strOut, key, fmt.Sprint(val))
  114. }
  115. return ctx.SendString(strOut)
  116. }
  117. //go:embed page_monolit.html
  118. var strPageMonolit string
  119. // Индексная страница монолита
  120. func (sf *PageMonolit) getMonolit(ctx *fiber.Ctx) error {
  121. ctx.Set("Content-type", "text/html; charset=utf8;\n\n")
  122. strOut := strings.ReplaceAll(strPageMonolit, "{.btn_monolit}", sf.btnMonolit.Html())
  123. strOut = strings.ReplaceAll(strOut, "{.btn_modules}", sf.btnModules.Html())
  124. return ctx.SendString(strOut)
  125. }