// Package kernel -- объект ядра прилоэжения // // Содержит базовый функционал сервиса package kernel import ( "context" "fmt" "sync" // "time" "wartank/pkg/components/kernel/keeper" "wartank/pkg/components/kernel/slog" "wartank/pkg/components/kernel/wgname" "wartank/pkg/types" ) /* Базовый объект приложения. */ // Kernel -- объект ядра приложения type Kernel struct { ctxBg context.Context // Неотменяемый контекст приложения ctxApp context.Context // Отменяемый контекст приложения fnCancel func() // Функция отмены приложения keeper *keeper.Keeper // Сторож системных сигналов slog *slog.Slog // Логгер в два вывода wg *wgname.WgName // Групповое ожидание частей приложения block sync.Mutex } // NewKernel -- возвращает новый *Kernel func NewKernel() (сам *Kernel, err error) { // timeStart := time.Now().UTC().Format("2006-10-02 15:04:05.000") // fmt._rintf("%v\t%v\tCI/CD test\n", cons.SelfName, timeStart) сам = &Kernel{ ctxBg: context.Background(), wg: wgname.NewWgName(), } сам.ctxApp, сам.fnCancel = context.WithCancel(сам.ctxBg) сам.block.Lock() сам.slog, err = slog.NewSlog(сам) сам.block.Unlock() if err != nil { return nil, fmt.Errorf("NewKernel(): in creste ISlog, err=%w", err) } сам.slog.Debugf("NewKernel()") сам.keeper = keeper.NewKeeper(сам) return сам, nil } // Wg -- возвращает объект групповой сихнронизации func (сам *Kernel) Wg() types.IWgName { return сам.wg } // CtxApp -- возвращает глобальный контекст приложения func (сам *Kernel) CtxApp() context.Context { return сам.ctxApp } // Done -- возвращает канал отмены контекста приложения func (сам *Kernel) Done() <-chan struct{} { return сам.ctxApp.Done() } // CancelApp -- отменяет глобальный контекст приложения func (сам *Kernel) CancelApp() { сам.block.Lock() defer сам.block.Unlock() сам.slog.Infof("Kernel.CancelApp()\n") сам.fnCancel() } // Slog -- возвращает глобальный лог приложения func (сам *Kernel) Slog() types.ISlog { return сам.slog }