page_monolit.go 3.8 KB

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