From c68559f03d781ddc033b745427aa19c9d72ab866 Mon Sep 17 00:00:00 2001 From: Danil Solovyov Date: Fri, 14 Jul 2023 06:02:03 +0500 Subject: [PATCH] Issue done --- internal/app/app_feedback.go | 50 ++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/internal/app/app_feedback.go b/internal/app/app_feedback.go index b13c606..3fd74e0 100644 --- a/internal/app/app_feedback.go +++ b/internal/app/app_feedback.go @@ -1,11 +1,13 @@ package app import ( + "context" + "time" + tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" "go.etcd.io/bbolt" "go.uber.org/zap" "go.uber.org/zap/zapcore" - "log" "penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/config" "penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/initialize" "penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/server" @@ -16,6 +18,9 @@ func Run(cfg *config.Config) { cfgLogger.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder cfgLogger.EncoderConfig.ConsoleSeparator = " " + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + logger, err := cfgLogger.Build() if err != nil { panic(err) @@ -25,17 +30,20 @@ func Run(cfg *config.Config) { db, err := bbolt.Open("bolt.db", 0666, nil) if err != nil { - logger.Fatal("BoltDB", zap.Error(err)) + logger.Error("BoltDB", zap.Error(err)) + return } bot, err := tgbotapi.NewBotAPI(cfg.TelegramToken) if err != nil { - logger.Fatal("TelegramBotApi", zap.Error(err)) + logger.Error("TelegramBotApi", zap.Error(err)) + return } repositories, err := initialize.NewRepositories(logger, db) if err != nil { - logger.Fatal("BoltDB", zap.Error(err)) + logger.Error("BoltDB", zap.Error(err)) + return } clients := initialize.NewClients(logger, bot, cfg.TelegramChannelID, cfg.TemplatePath) @@ -48,15 +56,40 @@ func Run(cfg *config.Config) { }) err = clients.Telegram.SendMessage("Bot started") - if err != nil { - logger.Fatal("TelegramBot", zap.Error(err)) + logger.Error("TelegramBot", zap.Error(err)) + return } + + // Send alive message + now := time.Now() + alarm := time.Date(now.Year(), now.Month(), now.Day(), 23, 59, 59, 0, now.Location()) + timer := time.NewTimer(time.Until(alarm)) + go func() { + for { + select { + case now = <-timer.C: + err = clients.Telegram.SendMessage("Я пока еще не сдох!") + if err != nil { + logger.Error("TelegramBot", zap.Error(err)) + return + } + + alarm = now.AddDate(0, 0, 1) + timer.Reset(time.Until(alarm)) + case <-ctx.Done(): + timer.Stop() + return + } + } + + }() controllers := initialize.NewControllers(logger, repositories.Feedback, clients.Telegram) if err = controllers.Feedback.WarmUpService(); err != nil { - log.Fatal("Controllers.Feedback", zap.Error(err)) + logger.Error("Controllers.Feedback", zap.Error(err)) + return } logger.Info("Feedback service", zap.String("status", "warmed up")) @@ -70,7 +103,8 @@ func Run(cfg *config.Config) { go func() { err := httpSrv.Start() if err != nil { - logger.Fatal("CanNotServe", zap.Error(err)) + logger.Error("CanNotServe", zap.Error(err)) + return } }()