page_monolit.go 3.2 KB

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