docxTemplaterWorker/main.go

101 lines
2.9 KiB
Go
Raw Normal View History

2022-12-30 18:52:16 +00:00
package main
import (
"context"
"fmt"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"log"
"os"
"os/signal"
"penahub.gitlab.yandexcloud.net/backend/templategen/amo"
"penahub.gitlab.yandexcloud.net/backend/templategen/dal"
GDisk "penahub.gitlab.yandexcloud.net/backend/templategen/gdisk"
YaDisk "penahub.gitlab.yandexcloud.net/backend/templategen/yadisk"
"penahub.gitlab.yandexcloud.net/backend/templategenworker/worker"
"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:"2fc35b41-f446-4ebb-95cb-b00c55d2f810"`
AmoClientSecret string `env:"AMO_CLIENT_SECRET" default:"fya5ET2UJRZF3hG4bugUGz3tRmdvFfWYzJIDwBXl2xx4rLbkPdPXvo03e5BUPwJp"`
AmoRedirectUrn string `env:"AMO_REDIRECT_URN" default:"/settings/widgets/aspqi3rpwdesqqg5lzdrluwtuwlnzslve629xdpu/"`
}
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.Fatal("ErrorConnectToDAL", zap.Error(err))
}
// 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 {
log.Fatal("ErrorCreateGoogleDriveClientApp:", err)
}
// Amo
amoApp := amo.NewClientApp(
opts.AmoClientID,
opts.AmoClientSecret,
fmt.Sprintf("https://%v/amo", opts.Domain))
// Start supervisor worker
supervisor := worker.NewSuperVisor(ctx, mongoDal, yaDisk, gDisk, amoApp, logger)
defer supervisor.Stop()
supervisor.Start()
// Graceful Shutdown
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM)
killSignal := <-interrupt
switch killSignal {
case os.Interrupt:
logger.Fatal("AppInterrupted")
case syscall.SIGTERM:
logger.Fatal("AppTerminated")
}
defer cancel()
}