kernel.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // Package kernel -- объект ядра прилоэжения
  2. //
  3. // Содержит базовый функционал сервиса
  4. package kernel
  5. import (
  6. "context"
  7. "fmt"
  8. "sync"
  9. // "time"
  10. "wartank/pkg/components/kernel/keeper"
  11. "wartank/pkg/components/kernel/slog"
  12. "wartank/pkg/components/kernel/wgname"
  13. "wartank/pkg/types"
  14. )
  15. /*
  16. Базовый объект приложения.
  17. */
  18. // Ядро -- объект ядра приложения
  19. type Ядро struct {
  20. ctxBg context.Context // Неотменяемый контекст приложения
  21. ctxApp context.Context // Отменяемый контекст приложения
  22. fnCancel func() // Функция отмены приложения
  23. keeper *keeper.Keeper // Сторож системных сигналов
  24. слог *slog.Slog // Логгер в два вывода
  25. wg *wgname.WgName // Групповое ожидание частей приложения
  26. хран types.ИХран // Хранилище данных
  27. блок sync.Mutex
  28. }
  29. // NewKernel -- возвращает новый *Kernel
  30. func NewKernel() (types.ИЯдро, error) {
  31. // timeStart := time.Now().UTC().Format("2006-10-02 15:04:05.000")
  32. // fmt._rintf("%v\t%v\tCI/CD test\n", cons.SelfName, timeStart)
  33. сам := &Ядро{
  34. ctxBg: context.Background(),
  35. wg: wgname.NewWgName(),
  36. }
  37. сам.ctxApp, сам.fnCancel = context.WithCancel(сам.ctxBg)
  38. сам.блок.Lock()
  39. var ош error
  40. сам.слог, ош = slog.NewSlog(сам)
  41. сам.блок.Unlock()
  42. if ош != nil {
  43. return nil, fmt.Errorf("NewKernel(): in creste ISlog, err=%w", ош)
  44. }
  45. сам.слог.Debugf("NewKernel()")
  46. сам.keeper = keeper.NewKeeper(сам)
  47. return сам, nil
  48. }
  49. // Store -- возвращает хранилище данных
  50. func (сам *Ядро) Store() types.ИХран {
  51. return сам.хран
  52. }
  53. // Wg -- возвращает объект групповой сихнронизации
  54. func (сам *Ядро) Wg() types.IWgName {
  55. return сам.wg
  56. }
  57. // CtxApp -- возвращает глобальный контекст приложения
  58. func (сам *Ядро) CtxApp() context.Context {
  59. return сам.ctxApp
  60. }
  61. // Done -- возвращает канал отмены контекста приложения
  62. func (сам *Ядро) Done() <-chan struct{} {
  63. return сам.ctxApp.Done()
  64. }
  65. // CancelApp -- отменяет глобальный контекст приложения
  66. func (сам *Ядро) CancelApp() {
  67. сам.блок.Lock()
  68. defer сам.блок.Unlock()
  69. сам.слог.Infof("Kernel.CancelApp()\n")
  70. сам.fnCancel()
  71. }
  72. // Slog -- возвращает глобальный лог приложения
  73. func (сам *Ядро) Slog() types.ISlog {
  74. return сам.слог
  75. }