2022-12-30 18:52:16 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
2025-01-01 22:05:42 +00:00
|
|
|
"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"
|
2022-12-30 18:52:16 +00:00
|
|
|
"os"
|
|
|
|
"os/signal"
|
2023-07-13 23:00:30 +00:00
|
|
|
"syscall"
|
2022-12-30 18:52:16 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type Env struct {
|
|
|
|
Domain string `env:"DOMAIN" default:"tempgen.pena.digital"`
|
|
|
|
LogFile string `env:"LOG_FILE" default:"./tmp/logs.log"`
|
2023-07-13 23:00:30 +00:00
|
|
|
MongoURL string `env:"MONGO_URL" default:"mongodb://mongo1:30001,mongo2:30002,mongo3:30003/?replicaSet=penahub-rs"`
|
|
|
|
DBName string `env:"DB_NAME" default:"templategen"`
|
2022-12-30 18:52:16 +00:00
|
|
|
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"`
|
2023-06-27 22:02:18 +00:00
|
|
|
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/"`
|
2022-12-30 18:52:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
|
2023-07-13 23:00:30 +00:00
|
|
|
mongoDal, err := dal.InitMongoDAL(ctx, opts.MongoURL, opts.DBName, logger)
|
2022-12-30 18:52:16 +00:00
|
|
|
defer mongoDal.Disconnect()
|
|
|
|
if err != nil {
|
2023-07-13 23:00:30 +00:00
|
|
|
logger.Error("ErrorConnectToDAL", zap.Error(err))
|
|
|
|
return
|
2022-12-30 18:52:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Yandex Disk
|
2023-07-13 23:00:30 +00:00
|
|
|
yaDisk := yadisk.NewClientApp(
|
2022-12-30 18:52:16 +00:00
|
|
|
opts.YaDiskClientID,
|
|
|
|
opts.YaDiskClientSecret,
|
|
|
|
fmt.Sprintf("https://%v/yadisk", opts.Domain),
|
|
|
|
fmt.Sprintf("https://%v", opts.Domain),
|
|
|
|
)
|
|
|
|
|
|
|
|
// Google Drive
|
2023-07-13 23:00:30 +00:00
|
|
|
gDisk, err := gdisk.NewClientApp(opts.GDiskCredentials)
|
2022-12-30 18:52:16 +00:00
|
|
|
if err != nil {
|
2023-07-13 23:00:30 +00:00
|
|
|
logger.Error("ErrorCreateGoogleDriveClientApp:", zap.Error(err))
|
|
|
|
return
|
2022-12-30 18:52:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Amo
|
|
|
|
amoApp := amo.NewClientApp(
|
|
|
|
opts.AmoClientID,
|
|
|
|
opts.AmoClientSecret,
|
|
|
|
fmt.Sprintf("https://%v/amo", opts.Domain))
|
|
|
|
|
|
|
|
// Start supervisor worker
|
2023-08-11 15:39:43 +00:00
|
|
|
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
|
|
|
|
}
|
2023-09-09 12:40:23 +00:00
|
|
|
|
2022-12-30 18:52:16 +00:00
|
|
|
defer supervisor.Stop()
|
|
|
|
|
2023-07-13 23:00:30 +00:00
|
|
|
supervisor.Start(ctx)
|
2022-12-30 18:52:16 +00:00
|
|
|
|
|
|
|
// Graceful Shutdown
|
|
|
|
interrupt := make(chan os.Signal, 1)
|
|
|
|
signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM)
|
|
|
|
killSignal := <-interrupt
|
|
|
|
switch killSignal {
|
|
|
|
case os.Interrupt:
|
2023-07-13 23:00:30 +00:00
|
|
|
logger.Error("AppInterrupted")
|
|
|
|
return
|
2022-12-30 18:52:16 +00:00
|
|
|
case syscall.SIGTERM:
|
2023-07-13 23:00:30 +00:00
|
|
|
logger.Error("AppTerminated")
|
|
|
|
return
|
2022-12-30 18:52:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
defer cancel()
|
|
|
|
}
|