// Package kernel -- объект ядра прилоэжения // // Содержит базовый функционал сервиса package kernel import ( "context" "fmt" "sync" "wartank/pkg/components/kernel/keeper" "wartank/pkg/components/kernel/slog" "wartank/pkg/components/kernel/store" "wartank/pkg/components/kernel/wgname" "wartank/pkg/types" ) /* Базовый объект приложения. */ // Ядро -- объект ядра приложения type Ядро struct { ctxBg context.Context // Неотменяемый контекст приложения ctxApp context.Context // Отменяемый контекст приложения fnCancel func() // Функция отмены приложения keeper *keeper.Keeper // Сторож системных сигналов слог *slog.Slog // Логгер в два вывода wg *wgname.WgName // Групповое ожидание частей приложения хран types.ИХран // Хранилище данных блок sync.Mutex } // НовЯдро -- возвращает новый *Ядро func НовЯдро() (types.ИЯдро, 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) сам := &Ядро{ ctxBg: context.Background(), wg: wgname.NewWgName(), } var ош error сам.ctxApp, сам.fnCancel = context.WithCancel(сам.ctxBg) сам.хран, ош = store.NewStore(сам, "./store") if ош != nil { return nil, fmt.Errorf("НовЯдро(): in creste IStore, err=%w", ош) } сам.блок.Lock() сам.слог, ош = slog.NewSlog(сам) сам.блок.Unlock() if ош != nil { return nil, fmt.Errorf("НовЯдро(): in creste ISlog, err=%w", ош) } сам.слог.Debugf("НовЯдро()") сам.keeper = keeper.NewKeeper(сам) return сам, nil } // Store -- возвращает хранилище данных func (сам *Ядро) Store() types.ИХран { return сам.хран } // Wg -- возвращает объект групповой сихнронизации func (сам *Ядро) Wg() types.IWgName { return сам.wg } // CtxApp -- возвращает глобальный контекст приложения func (сам *Ядро) CtxApp() context.Context { return сам.ctxApp } // Done -- возвращает канал отмены контекста приложения func (сам *Ядро) Done() <-chan struct{} { return сам.ctxApp.Done() } // CancelApp -- отменяет глобальный контекст приложения func (сам *Ядро) CancelApp() { сам.блок.Lock() defer сам.блок.Unlock() сам.слог.Infof("Kernel.CancelApp()\n") сам.fnCancel() } // Slog -- возвращает глобальный лог приложения func (сам *Ядро) Slog() types.ISlog { return сам.слог }