Replace env vars with toml config
This commit is contained in:
50
main.go
50
main.go
@@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
@@ -16,6 +17,7 @@ import (
|
||||
ffmpegmv "git.vakhrushev.me/av/transcriber/internal/adapter/metaviewer/ffmpeg"
|
||||
"git.vakhrushev.me/av/transcriber/internal/adapter/recognizer/yandex"
|
||||
"git.vakhrushev.me/av/transcriber/internal/adapter/repo/sqlite"
|
||||
"git.vakhrushev.me/av/transcriber/internal/config"
|
||||
httpcontroller "git.vakhrushev.me/av/transcriber/internal/controller/http"
|
||||
tgcontroller "git.vakhrushev.me/av/transcriber/internal/controller/tg"
|
||||
"git.vakhrushev.me/av/transcriber/internal/controller/worker"
|
||||
@@ -31,10 +33,8 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
TelegramUpdateTimeout = 10
|
||||
ServerShutdownTimeout = 5
|
||||
|
||||
ForceShutdownTimeout = 20
|
||||
ForceShutdownTimeout = 20
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -44,6 +44,22 @@ func main() {
|
||||
}))
|
||||
slog.SetDefault(logger)
|
||||
|
||||
// Parse command line flags
|
||||
configPath := flag.String("c", "config.toml", "Path to config file")
|
||||
flag.StringVar(configPath, "config", "config.toml", "Path to config file (alias for -c)")
|
||||
flag.Parse()
|
||||
|
||||
// Load configuration
|
||||
cfg, err := config.LoadConfig(*configPath)
|
||||
if err != nil {
|
||||
// If config file doesn't exist, use defaults
|
||||
cfg = config.DefaultConfig()
|
||||
// Log that we're using default config
|
||||
logger.Info("Using default configuration", "config_path", *configPath, "error", err)
|
||||
} else {
|
||||
logger.Info("Configuration loaded successfully", "config_path", *configPath)
|
||||
}
|
||||
|
||||
// Загружаем переменные окружения из .env файла
|
||||
if err := godotenv.Load(); err != nil {
|
||||
logger.Warn("Warning: .env file not found, using system environment variables")
|
||||
@@ -55,7 +71,7 @@ func main() {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
db, err := sql.Open("sqlite3", "data/transcriber.db")
|
||||
db, err := sql.Open("sqlite3", cfg.Database.Path)
|
||||
if err != nil {
|
||||
logger.Error("failed to open database", "error", err)
|
||||
os.Exit(1)
|
||||
@@ -84,13 +100,13 @@ func main() {
|
||||
converter := ffmpegconv.NewFfmpegConverter()
|
||||
|
||||
recognizer, err := yandex.NewYandexAudioRecognizerService(yandex.YandexAudioRecognizerConfig{
|
||||
Region: os.Getenv("AWS_REGION"),
|
||||
AccessKey: os.Getenv("AWS_ACCESS_KEY_ID"),
|
||||
SecretKey: os.Getenv("AWS_SECRET_ACCESS_KEY"),
|
||||
BucketName: os.Getenv("S3_BUCKET_NAME"),
|
||||
Endpoint: os.Getenv("S3_ENDPOINT"),
|
||||
ApiKey: os.Getenv("YANDEX_CLOUD_API_KEY"),
|
||||
FolderID: os.Getenv("YANDEX_CLOUD_FOLDER_ID"),
|
||||
Region: cfg.AWS.Region,
|
||||
AccessKey: cfg.AWS.AccessKey,
|
||||
SecretKey: cfg.AWS.SecretKey,
|
||||
BucketName: cfg.AWS.BucketName,
|
||||
Endpoint: cfg.AWS.Endpoint,
|
||||
ApiKey: cfg.Yandex.APIKey,
|
||||
FolderID: cfg.Yandex.FolderID,
|
||||
})
|
||||
if err != nil {
|
||||
logger.Error("failed to create audio recognizer", "error", err)
|
||||
@@ -109,8 +125,8 @@ func main() {
|
||||
var wg sync.WaitGroup
|
||||
|
||||
tgConfig := tgcontroller.TelegramConfig{
|
||||
BotToken: os.Getenv("TELEGRAM_BOT_TOKEN"),
|
||||
UpdateTimeout: TelegramUpdateTimeout,
|
||||
BotToken: cfg.Telegram.BotToken,
|
||||
UpdateTimeout: cfg.Telegram.UpdateTimeout,
|
||||
}
|
||||
|
||||
// Создаем Telegram бот
|
||||
@@ -182,7 +198,7 @@ func main() {
|
||||
|
||||
// Создаем HTTP сервер
|
||||
srv := &http.Server{
|
||||
Addr: ":8080",
|
||||
Addr: fmt.Sprintf(":%d", cfg.Server.Port),
|
||||
Handler: router,
|
||||
}
|
||||
|
||||
@@ -190,7 +206,7 @@ func main() {
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
logger.Info("Starting HTTP server", "port", 8080)
|
||||
logger.Info("Starting HTTP server", "port", cfg.Server.Port)
|
||||
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||||
logger.Error("HTTP server error", "error", err)
|
||||
}
|
||||
@@ -214,7 +230,7 @@ func main() {
|
||||
}
|
||||
|
||||
// Создаем контекст с таймаутом для graceful shutdown HTTP сервера
|
||||
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), ServerShutdownTimeout*time.Second)
|
||||
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), time.Duration(cfg.Server.ShutdownTimeout)*time.Second)
|
||||
defer shutdownCancel()
|
||||
|
||||
// Останавливаем HTTP сервер
|
||||
@@ -239,7 +255,7 @@ func main() {
|
||||
select {
|
||||
case <-done:
|
||||
logger.Info("All workers stopped gracefully")
|
||||
case <-time.After(ForceShutdownTimeout * time.Second):
|
||||
case <-time.After(time.Duration(cfg.Server.ForceShutdownTimeout) * time.Second):
|
||||
logger.Warn("Timeout reached, forcing shutdown")
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user