mod_keeper.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // package mod_keeper -- модуль сторожа ядра
  2. package mod_keeper
  3. import (
  4. "sync"
  5. "gitp78su.ipnodns.ru/svi/kern/v3/krn/kctx"
  6. "gitp78su.ipnodns.ru/svi/kern/v3/krn/kmodule"
  7. "gitp78su.ipnodns.ru/svi/kern/v3/krn/kserv_http"
  8. . "gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"
  9. "gitp78su.ipnodns.ru/svi/kern/v3/mds/mod_serv_http/http_api"
  10. "gitp78su.ipnodns.ru/svi/kern/v3/mds/mod_serv_http/page_module"
  11. "gitp78su.ipnodns.ru/svi/kern/v3/mds/mod_serv_http/page_monolit"
  12. )
  13. // ModuleKeeper -- модуль сторожа
  14. type ModuleKeeper struct {
  15. IKernelModule
  16. kCtx IKernelCtx
  17. kServHttp IKernelServerHttp
  18. log ILogBuf
  19. }
  20. var (
  21. mod *ModuleKeeper
  22. block sync.Mutex
  23. )
  24. // GetModuleKeeper -- возвращает новый модуль сторожа ядра
  25. func GetModuleKeeper() *ModuleKeeper {
  26. block.Lock()
  27. defer block.Unlock()
  28. if mod != nil {
  29. return nil
  30. }
  31. sf := &ModuleKeeper{
  32. kCtx: kctx.GetKernelCtx(),
  33. IKernelModule: kmodule.NewKernelModule("kKeeper"),
  34. kServHttp: kserv_http.GetKernelServHttp(),
  35. }
  36. sf.log = sf.kCtx.Keeper().Log()
  37. _ = page_monolit.GetPageMonolit()
  38. _ = page_module.GetPageModule()
  39. _ = http_api.NewHttpApi()
  40. mod = sf
  41. return sf
  42. }
  43. // Run -- запускает модуль в работу
  44. func (sf *ModuleKeeper) Run() {
  45. sf.log.Info("ModuleKernelCtx.Run(): module=%v, is run", sf.Name())
  46. go sf.kServHttp.Run()
  47. }
  48. // IsWork -- признак работы модуля
  49. func (sf *ModuleKeeper) IsWork() bool {
  50. return sf.kCtx.Wg().IsWork()
  51. }