kern.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. // package kern -- библиотека гибкого универсального облегчённого ядра для любого микросервиса
  2. package kern
  3. import (
  4. "context"
  5. . "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
  6. "gitp78su.ipnodns.ru/svi/kern/kc/local_ctx"
  7. "gitp78su.ipnodns.ru/svi/kern/kc/log_buf"
  8. "gitp78su.ipnodns.ru/svi/kern/kc/safe_bool"
  9. "gitp78su.ipnodns.ru/svi/kern/kc/safe_bool_react"
  10. "gitp78su.ipnodns.ru/svi/kern/kc/safe_int"
  11. "gitp78su.ipnodns.ru/svi/kern/kc/safe_string"
  12. . "gitp78su.ipnodns.ru/svi/kern/krn/kalias"
  13. "gitp78su.ipnodns.ru/svi/kern/krn/kbus/kbus_http"
  14. "gitp78su.ipnodns.ru/svi/kern/krn/kbus/kbus_http/client_bus_http"
  15. "gitp78su.ipnodns.ru/svi/kern/krn/kbus/kbus_local"
  16. "gitp78su.ipnodns.ru/svi/kern/krn/kbus/kbus_local/client_bus_local"
  17. "gitp78su.ipnodns.ru/svi/kern/krn/kctx"
  18. "gitp78su.ipnodns.ru/svi/kern/krn/kmodule"
  19. "gitp78su.ipnodns.ru/svi/kern/krn/kmonolit"
  20. "gitp78su.ipnodns.ru/svi/kern/krn/kserv_http"
  21. "gitp78su.ipnodns.ru/svi/kern/krn/kstore_kv"
  22. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  23. "gitp78su.ipnodns.ru/svi/kern/mds/mod_kctx"
  24. "gitp78su.ipnodns.ru/svi/kern/mds/mod_keeper"
  25. "gitp78su.ipnodns.ru/svi/kern/mds/mod_serv_http"
  26. "gitp78su.ipnodns.ru/svi/kern/mds/mod_wui"
  27. )
  28. // GetKernelCtx -- возвращает контекст ядра
  29. func GetKernelCtx() IKernelCtx {
  30. ctx := kctx.GetKernelCtx()
  31. return ctx
  32. }
  33. // GetKernelStoreKv -- возвращает быстрое key-value хранилище ядра
  34. func GetKernelStoreKv() IKernelStoreKv {
  35. store := kstore_kv.GetKernelStore()
  36. return store
  37. }
  38. // GetKernelServerHttp -- возвращает веб-сервер ядра
  39. func GetKernelServerHttp() IKernelServerHttp {
  40. kernServHttp := kserv_http.GetKernelServHttp()
  41. return kernServHttp
  42. }
  43. // NewSafeBool -- возвращает новый потокобезопасный булевый признак
  44. func NewSafeBool() ISafeBool {
  45. sb := safe_bool.NewSafeBool()
  46. return sb
  47. }
  48. // GetKernelBusLocal -- возвращает локальную шину данных
  49. func GetKernelBusLocal() IKernelBus {
  50. ctx := kctx.GetKernelCtx()
  51. ctx.Set("monolitName", "unknown monolit", "GetKernelBusLocal()")
  52. bus := kbus_local.GetKernelBusLocal()
  53. return bus
  54. }
  55. // GetKernelBusHttp -- возвращает HTTP шину данных
  56. func GetKernelBusHttp() IKernelBus {
  57. bus := kbus_http.GetKernelBusHttp()
  58. return bus
  59. }
  60. // GetMonolitLocal -- возвращает монолит с локальной шиной
  61. func GetMonolitLocal(name string) IKernelMonolit {
  62. ctx := kctx.GetKernelCtx()
  63. ctx.Set("isLocal", true, "bus type")
  64. for {
  65. SleepMs()
  66. if ctx.Get("isLocal") != nil {
  67. break
  68. }
  69. }
  70. monolit := kmonolit.GetMonolit(name)
  71. _ = kbus_local.GetKernelBusLocal()
  72. return monolit
  73. }
  74. // GetMonolitHttp -- возвращает монолит с локальной шиной поверх HTTP
  75. func GetMonolitHttp(name string) IKernelMonolit {
  76. ctx := kctx.GetKernelCtx()
  77. _ = kbus_http.GetKernelBusHttp()
  78. ctx.Set("isLocal", false, "bus type")
  79. for {
  80. SleepMs()
  81. if ctx.Get("isLocal") != nil {
  82. break
  83. }
  84. }
  85. monolit := kmonolit.GetMonolit(name)
  86. return monolit
  87. }
  88. // NewKernelModule -- возвращает новый модуль на ядре
  89. func NewKernelModule(name AModuleName) IKernelModule {
  90. mod := kmodule.NewKernelModule(name)
  91. return mod
  92. }
  93. // NewClientBusLocal -- возвращает клиент для работы с локальной шиной
  94. func NewClientBusLocal() IBusClient {
  95. client := client_bus_local.NewClientBusLocal()
  96. return client
  97. }
  98. // NewClientBusHttp -- возвращает клиент для работы с шиной поверх HTTP
  99. func NewClientBusHttp(url string) IBusClient {
  100. client := client_bus_http.NewClientBusHttp(url)
  101. return client
  102. }
  103. // GetModuleServHttp -- возвращает модуль для IKernelServHttp
  104. func GetModuleServHttp() IKernelModule {
  105. modServHttp := mod_serv_http.GetModuleServHttp()
  106. return modServHttp
  107. }
  108. // GetModuleKernelCtx -- возвращает модуль для IKernelCtx
  109. func GetModuleKernelCtx() IKernelModule {
  110. modKernelCtx := mod_kctx.GetModuleKernelCtx()
  111. return modKernelCtx
  112. }
  113. // GetModuleKernelKeeper -- возвращает модуль для IKernelKeeper
  114. func GetModuleKernelKeeper() IKernelModule {
  115. modKernelKeeper := mod_keeper.GetModuleKeeper()
  116. return modKernelKeeper
  117. }
  118. // GetModuleWui -- возвращает модуль для WUI
  119. func GetModuleWui() IKernelModule {
  120. mod := mod_wui.GetModuleWui()
  121. return mod
  122. }
  123. // NewLogBuf -- возвращает новый буферизованный лог
  124. func NewLogBuf(isTerm bool) ILogBuf {
  125. log := log_buf.NewLogBuf(isTerm)
  126. return log
  127. }
  128. // NewSafeBoolReact -- возвращает новую потокобезопасную реактивную булеву переменную
  129. func NewSafeBoolReact() ISafeBoolReact {
  130. val := safe_bool_react.NewSafeBoolReact()
  131. return val
  132. }
  133. // NewSafeInt -- возвращает новую потокобезопасную целочисленную переменную
  134. func NewSafeInt() ISafeInt {
  135. val := safe_int.NewSafeInt()
  136. return val
  137. }
  138. // NewLocalCtx -- возвращает новый локальный контекст
  139. func NewLocalCtx(ctx context.Context) ILocalCtx {
  140. ctx_ := local_ctx.NewLocalCtx(ctx)
  141. return ctx_
  142. }
  143. // NewSafeString -- возвращает новую потокобезопасную строку
  144. func NewSafeString() ISafeString {
  145. str := safe_string.NewSafeString()
  146. return str
  147. }
  148. // MakeOk -- возвращает новый положительный результат операции
  149. func MakeOk[T any](res T) Result[T] {
  150. return NewOk(res)
  151. }
  152. // MakeErr -- возвращает новую ошибку результат операции
  153. func MakeErr[T any](err error) Result[T] {
  154. return NewErr[T](err)
  155. }
  156. // MakeSome -- возвращает новый не пустой результат операции
  157. func MakeSome[T any](some T) Option[T] {
  158. return NewSome(some)
  159. }
  160. // MakeNone -- возвращает новый пустой результат операции
  161. func MakeNone[T any]() Option[T] {
  162. return NewNone[T]()
  163. }