101 lines
2.9 KiB
Go
101 lines
2.9 KiB
Go
![]() |
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()
|
||
|
|
||
|
}
|