Files
worker/config/database/database.go
Gleb Tv 2c884c5612
Некоторые проверки не удались
CI / test (push) Successful in 2m5s
Docker / Build and publish worker image (push) Failing after 31s
refactor: adopt worker module path
2026-07-13 17:56:12 +03:00

81 строка
1.9 KiB
Go

// Package database provides database initialization and access for RSMon.
package database
import (
"fmt"
"log"
"os"
"time"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"rocketgit.ru/rsmon/worker/app/models"
_ "rocketgit.ru/rsmon/worker/config/env" // Import to ensure .env is loaded before reading env vars
)
// db Gorm DB
var db *gorm.DB
// Logger provides functionality.
var Logger logger.Interface
func envOrDefault(key, fallbackKey, defaultVal string) string {
if v := os.Getenv(key); v != "" {
return v
}
if fallbackKey != "" {
if v := os.Getenv(fallbackKey); v != "" {
return v
}
}
return defaultVal
}
// Init provides functionality.
func Init() {
host := envOrDefault("DATABASE_HOST", "POSTGRES_HOST", "localhost")
portStr := envOrDefault("DATABASE_PORT", "POSTGRES_PORT", "5432")
user := envOrDefault("DATABASE_USER", "POSTGRES_USER", "rsmon")
pass := envOrDefault("DATABASE_PASSWORD", "POSTGRES_PASSWORD", "rsmon")
dbname := envOrDefault("DATABASE_NAME", "POSTGRES_DB", "rsmon_development")
dbLog := envOrDefault("DATABASE_LOG", "", "false")
port := 5432
_, _ = fmt.Sscanf(portStr, "%d", &port)
connstr := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
host, port, user, pass, dbname)
logMode := logger.Silent
if dbLog == "true" || dbLog == "1" {
logMode = logger.Info
}
cfg := &gorm.Config{
Logger: logger.Default.LogMode(logMode),
}
pg := postgres.Open(connstr)
var err error
db, err = gorm.Open(pg, cfg)
if err != nil {
panic(err)
}
sqlDB, err := db.DB()
if err != nil {
panic(err)
}
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(10)
sqlDB.SetConnMaxLifetime(time.Hour)
models.RegisterCallbacks(db)
db = db.Set("gorm:association_autoupdate", false)
models.SetDB(db)
log.Printf("Database connected: %s@%s:%d/%s (log=%s)", user, host, port, dbname, dbLog)
}