kern.go 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. // package kern -- библиотека гибкого универсального облегчённого ядра для любого микросервиса.
  2. package kern
  3. import (
  4. "context"
  5. mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
  6. mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
  7. mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
  8. mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
  9. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kbus_http"
  10. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kbus_http/client_bus_http"
  11. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kbus_local"
  12. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kbus_local/client_bus_local"
  13. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
  14. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
  15. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
  16. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
  17. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kstore_kv"
  18. "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_kctx"
  19. "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_keeper"
  20. "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http"
  21. "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_wui"
  22. )
  23. // GetKernelCtx -- возвращает контекст ядра.
  24. func GetKernelCtx() mKs.IKernelCtx {
  25. ctx := kctx.GetKernelCtx()
  26. return ctx
  27. }
  28. // NewErr -- возвращает Result с ошибкой.
  29. func NewErr[T any](err error) mL0.IResult[T] {
  30. return mL0.NewErr[T](err)
  31. }
  32. // NewRes -- возвращает успешный Result с значением.
  33. func NewRes[T any](res T) mL0.IResult[T] {
  34. return mL0.NewRes(res)
  35. }
  36. // WrapErr -- оборачивает существующий Result с ошибкой с новой ошибкой.
  37. func WrapErr[T any](res mL0.IResult[T], err error) mL0.IResult[T] {
  38. return mL0.WrapErr(res, err)
  39. }
  40. // GetKernelStoreKv -- возвращает быстрое key-value хранилище ядра.
  41. func GetKernelStoreKv() mKs.IKernelStoreKv {
  42. store := kstore_kv.GetKernelStore()
  43. return store
  44. }
  45. // GetKernelServerHttp -- возвращает веб-сервер ядра.
  46. func GetKernelServerHttp() mKs.IKernelServerHttp {
  47. kernServHttp := kserv_http.GetKernelServHttp()
  48. return kernServHttp
  49. }
  50. // NewSafeBool -- возвращает новый потокобезопасный булевый признак.
  51. func NewSafeBool() mKs.ISafeBool {
  52. sb := mL1.NewSafeBool()
  53. return sb
  54. }
  55. // GetKernelBusLocal -- возвращает локальную шину данных.
  56. func GetKernelBusLocal() mKs.IKernelBus {
  57. kCtx := kctx.GetKernelCtx()
  58. kCtx.Set("monolitName", "unknown monolit", "GetKernelBusLocal()")
  59. lBus := kbus_local.GetKernelBusLocal()
  60. return lBus
  61. }
  62. // GetKernelBusHttp -- возвращает HTTP шину данных.
  63. func GetKernelBusHttp() mKs.IKernelBus {
  64. bus := kbus_http.GetKernelBusHttp()
  65. return bus
  66. }
  67. // SleepMs -- спит миллисекунду.
  68. func SleepMs() {
  69. mL1.SleepMs()
  70. }
  71. // GetMonolitLocal -- возвращает монолит с локальной шиной.
  72. func GetMonolitLocal(name string) mKs.IKernelMonolit {
  73. kCtx := kctx.GetKernelCtx()
  74. kCtx.Set("isLocal", true, "bus type")
  75. for {
  76. SleepMs()
  77. optIsLocal := kCtx.Get("isLocal")
  78. if optIsLocal.IsSome() {
  79. break
  80. }
  81. }
  82. kMonolit := kmonolit.GetMonolit(name)
  83. _ = kbus_local.GetKernelBusLocal()
  84. return kMonolit
  85. }
  86. // GetMonolitHttp -- возвращает монолит с локальной шиной поверх HTTP.
  87. func GetMonolitHttp(name string) mKs.IKernelMonolit {
  88. kCtx := kctx.GetKernelCtx()
  89. _ = kbus_http.GetKernelBusHttp()
  90. kCtx.Set("isLocal", false, "bus type")
  91. for {
  92. SleepMs()
  93. optIsLocal := kCtx.Get("isLocal")
  94. if optIsLocal.IsSome() {
  95. break
  96. }
  97. }
  98. kMon := kmonolit.GetMonolit(name)
  99. return kMon
  100. }
  101. // NewKernelModule -- возвращает новый модуль на ядре.
  102. func NewKernelModule(name *mKd.ModuleName) mKs.IKernelModule {
  103. resMod := kmodule.NewKernelModule(name)
  104. return resMod
  105. }
  106. // NewClientBusLocal -- возвращает клиент для работы с локальной шиной.
  107. func NewClientBusLocal() mKs.IBusClient {
  108. lClient := client_bus_local.NewClientBusLocal()
  109. return lClient
  110. }
  111. // NewClientBusHttp -- возвращает клиент для работы с шиной поверх HTTP.
  112. func NewClientBusHttp(url string) mKs.IBusClient {
  113. client := client_bus_http.NewClientBusHttp(url)
  114. return client
  115. }
  116. // GetModuleServHttp -- возвращает модуль для IKernelServHttp.
  117. func GetModuleServHttp() mKs.IKernelModule {
  118. modServHttp := mod_serv_http.GetModuleServHttp()
  119. return modServHttp
  120. }
  121. // GetModuleKernelCtx -- возвращает модуль для IKernelCtx.
  122. func GetModuleKernelCtx() mKs.IKernelModule {
  123. kModCtx := mod_kctx.GetModuleKernelCtx()
  124. return kModCtx
  125. }
  126. // GetModuleKernelKeeper -- возвращает модуль для IKernelKeeper.
  127. func GetModuleKernelKeeper() mKs.IKernelModule {
  128. modKernelKeeper := mod_keeper.GetModuleKeeper()
  129. return modKernelKeeper
  130. }
  131. // GetModuleWui -- возвращает модуль для WUI.
  132. func GetModuleWui() mKs.IKernelModule {
  133. modWui := mod_wui.GetModuleWui()
  134. return modWui
  135. }
  136. // NewLogBuf -- возвращает новый буферизованный лог.
  137. func NewLogBuf(opts ...mL1.OptionLogBuf) mKs.ILogBuf {
  138. log := mL1.NewLogBuf(opts...)
  139. return log
  140. }
  141. // NewSafeBoolReact -- возвращает новую потокобезопасную реактивную булеву переменную.
  142. func NewSafeBoolReact() mKs.ISafeBoolReact {
  143. val := mL1.NewSafeBoolReact()
  144. return val
  145. }
  146. // NewSafeInt -- возвращает новую потокобезопасную целочисленную переменную.
  147. func NewSafeInt(val int) mKs.ISafeInt {
  148. val_ := mL1.NewSafeInt(val)
  149. return val_
  150. }
  151. // NewInt -- возвращает новую целочисленную переменную.
  152. func NewInt(val int) mKs.Int {
  153. val_ := mL1.NewInt(val)
  154. return val_
  155. }
  156. // NewLocalCtx -- возвращает новый локальный контекст.
  157. func NewLocalCtx(ctx context.Context) mKs.ILocalCtx {
  158. lCtx := mL1.NewLocalCtx(ctx)
  159. return lCtx
  160. }
  161. // NewSafeString -- возвращает новую потокобезопасную строку.
  162. func NewSafeString() mKs.ISafeString {
  163. str := mL1.NewSafeString()
  164. return str
  165. }
  166. // MakeOk -- возвращает новый положительный результат операции.
  167. func MakeOk[T any](res T) mL0.IResult[T] {
  168. return NewRes(res)
  169. }
  170. // MakeErr -- возвращает новую ошибку результат операции.
  171. func MakeErr[T any](err error) mL0.IResult[T] {
  172. return NewErr[T](err)
  173. }
  174. // NewOpt -- возвращает новый не пустой результат операции.
  175. func NewOpt[T any](some T) mL0.IOption[T] {
  176. return mL0.NewOpt(some)
  177. }
  178. // NewNone -- возвращает новый пустой результат операции.
  179. func NewNone[T any]() mL0.IOption[T] {
  180. return mL0.NewNone[T]()
  181. }
  182. // FnHassert -- проверяет с жёстким падением условие.
  183. type FnHassert = mL1.FnHassert
  184. // Hassert -- возвращает ссылку на функцию Hassert.
  185. func Hassert() FnHassert {
  186. return mL1.Hassert()
  187. }
  188. // FnAssert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
  189. type FnAssert = mL1.FnAssert
  190. // Assert -- возвращает ссылку на функцию Hassert.
  191. func Assert() FnAssert {
  192. return mL1.Assert()
  193. }