docxTemplaterWorker/main.go
Pasha 94a77d1918
All checks were successful
Deploy / CreateImage (push) Successful in 2m40s
Deploy / DeployService (push) Successful in 23s
applied renamer
2025-01-02 01:05:42 +03:00

116 lines
3.0 KiB
Go

package main
import (
"context"
"fmt"
"gitea.pena/PenaSide/docxTemplater/amo"
"gitea.pena/PenaSide/docxTemplater/dal"
"gitea.pena/PenaSide/docxTemplater/gdisk"
"gitea.pena/PenaSide/docxTemplater/yadisk"
"gitea.pena/PenaSide/docxTemplaterWorker/worker"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"os"
"os/signal"
"syscall"
)
type Env struct {
Domain string `env:"DOMAIN" default:"tempgen.pena.digital"`
LogFile string `env:"LOG_FILE" default:"./tmp/logs.log"`
MongoURL string `env:"MONGO_URL" default:"mongodb://mongo1:30001,mongo2:30002,mongo3:30003/?replicaSet=penahub-rs"`
DBName string `env:"DB_NAME" default:"templategen"`
YaDiskClientID string `env:"YADISK_CLIENT_ID" default:"94482c181e5148c096ae6ad3b2a981ea"`
YaDiskClientSecret string `env:"YADISK_CLIENT_SECRET" default:"7dc4f541c3f64f4a9078e59d7494d222"`
GDiskCredentials string `env:"GDISK_CREDENTIALS" default:"./static/gdisk-credentials.json"`
AmoClientID string `env:"AMO_CLIENT_ID" default:"6c7f3fdb-cce7-4fb0-a8a3-640b695c8d00"`
AmoClientSecret string `env:"AMO_CLIENT_SECRET" default:"5oJU1L8pScLKfEasShJ6KuDU32VrIs6BVKQ6BiY4vABIQycUWJziULytiUs5jaZU"`
AmoRedirectUrn string `env:"AMO_REDIRECT_URN" default:"/settings/widgets/penagen/"`
}
func GetOpts() Env {
return getEnv(Env{})
}
func main() {
opts := GetOpts()
ctx, cancel := context.WithCancel(context.Background())
// Logger
cfgLogger := zap.NewDevelopmentConfig()
cfgLogger.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
cfgLogger.EncoderConfig.ConsoleSeparator = " "
logger, err := cfgLogger.Build()
logger.Info("OPTIONS", zap.Any("ENV", opts))
if err != nil {
panic(err)
}
// Start Data Access Layer
mongoDal, err := dal.InitMongoDAL(ctx, opts.MongoURL, opts.DBName, logger)
defer mongoDal.Disconnect()
if err != nil {
logger.Error("ErrorConnectToDAL", zap.Error(err))
return
}
// Yandex Disk
yaDisk := yadisk.NewClientApp(
opts.YaDiskClientID,
opts.YaDiskClientSecret,
fmt.Sprintf("https://%v/yadisk", opts.Domain),
fmt.Sprintf("https://%v", opts.Domain),
)
// Google Drive
gDisk, err := gdisk.NewClientApp(opts.GDiskCredentials)
if err != nil {
logger.Error("ErrorCreateGoogleDriveClientApp:", zap.Error(err))
return
}
// Amo
amoApp := amo.NewClientApp(
opts.AmoClientID,
opts.AmoClientSecret,
fmt.Sprintf("https://%v/amo", opts.Domain))
// Start supervisor worker
supervisorDeps := worker.SuperVisorDeps{
Dal: mongoDal,
YaDisk: yaDisk,
GDisk: gDisk,
Amo: amoApp,
Logger: logger,
}
supervisor, err := worker.NewSuperVisor(supervisorDeps)
if err != nil {
logger.Error("ErrorCreateSuperVisor", zap.Error(err))
return
}
defer supervisor.Stop()
supervisor.Start(ctx)
// Graceful Shutdown
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM)
killSignal := <-interrupt
switch killSignal {
case os.Interrupt:
logger.Error("AppInterrupted")
return
case syscall.SIGTERM:
logger.Error("AppTerminated")
return
}
defer cancel()
}