kern.go 7.5 KB

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