skeleton added
This commit is contained in:
99
pkg/config/config.go
Executable file
99
pkg/config/config.go
Executable file
@@ -0,0 +1,99 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/ilyakaznacheev/cleanenv"
|
||||
)
|
||||
|
||||
type DB struct {
|
||||
User string `yaml:"user" env-required:"true"`
|
||||
Pass string `yaml:"password" env-required:"true"`
|
||||
Host string `yaml:"host"`
|
||||
Ssl string `yaml:"sslmode" env-required:"true"`
|
||||
MigrationsPath string `yaml:"migrations_path" env-required:"true"`
|
||||
}
|
||||
|
||||
type APIKeys struct {
|
||||
Telegram string `yaml:"telegram" env-required:"true"`
|
||||
TelegramPhone string `yaml:"telegram_phone" env-default:"+79934771502"` // номер для userbot (MTProto), код/2FA — в сообщениях боту
|
||||
Youtube string `yaml:"youtube" env-required:"true"`
|
||||
TelegramAppId int `yaml:"telegram_app_id" env-required:"true"`
|
||||
TelegramAppHash string `yaml:"telegram_app_hash" env-required:"true"`
|
||||
}
|
||||
|
||||
type Log struct {
|
||||
FilePath string `yaml:"file_path"`
|
||||
}
|
||||
|
||||
type Service struct {
|
||||
StartupLag time.Duration `yaml:"startup_lag"`
|
||||
Cooldown time.Duration `yaml:"cooldown" default:"3600"`
|
||||
Timeout time.Duration `yaml:"timeout" default:"60"`
|
||||
MaxConnections int `yaml:"max_watcher_connections" default:"100"`
|
||||
}
|
||||
|
||||
type Downloader struct {
|
||||
Host string `yaml:"host" env-required:"true"`
|
||||
Max_downloads int `yaml:"max_parallel_downloads" default:"10"`
|
||||
VideoPath string `yaml:"video_path"`
|
||||
}
|
||||
|
||||
type UploaderConfig struct {
|
||||
MaxRetries int `env:"UPLOADER_MAX_RETRIES" envDefault:"5"`
|
||||
RetryCooldown time.Duration `env:"UPLOADER_RETRY_COOLDOWN" envDefault:"5m"`
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
Env string `yaml:"env"`
|
||||
DB DB `yaml:"postgres_db"`
|
||||
APIKeys APIKeys `yaml:"API_keys"`
|
||||
Log Log `yaml:"logger"`
|
||||
Service Service `yaml:"service"`
|
||||
Downloader Downloader `yaml:"downloader"`
|
||||
Uploader UploaderConfig
|
||||
}
|
||||
|
||||
func MustLoad() Config {
|
||||
configPath := os.Getenv("CONFIG_PATH")
|
||||
if configPath == "" {
|
||||
configPath = "../config.yaml"
|
||||
}
|
||||
|
||||
//проверка существует ли файл
|
||||
if _, err := os.Stat(configPath); os.IsNotExist(err) {
|
||||
log.Fatal("cannot read config file")
|
||||
}
|
||||
|
||||
var cfg Config
|
||||
|
||||
err := cleanenv.ReadConfig(configPath, &cfg)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
dbhost := os.Getenv("DB_HOST") //получаем переменную из окружения (она есть если запущен в докер контейнере)
|
||||
if dbhost != "" {
|
||||
//time.Sleep(30 * time.Second) //если мы в докер контейнере, дадим время бд чтоб она поднялась
|
||||
cfg.DB.Host = dbhost
|
||||
}
|
||||
downloaderHost := os.Getenv("DOWNLOADER_HOST")
|
||||
if downloaderHost != "" {
|
||||
cfg.Downloader.Host = downloaderHost
|
||||
}
|
||||
migrationsPath := os.Getenv("MIGRATIONS_PATH")
|
||||
if migrationsPath != "" {
|
||||
cfg.DB.MigrationsPath = migrationsPath
|
||||
}
|
||||
dbUser := os.Getenv("DB_USER")
|
||||
if dbUser != "" {
|
||||
cfg.DB.User = dbUser
|
||||
}
|
||||
if cfg.Downloader.VideoPath == "" {
|
||||
cfg.Downloader.VideoPath = os.TempDir()
|
||||
}
|
||||
|
||||
return cfg
|
||||
}
|
||||
Reference in New Issue
Block a user