Некоторые проверки не удались
CI / test (push) Successful in 2m5s
Docker / Build and publish worker image (push) Failing after 31s
81 строка
1.9 KiB
Go
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)
|
|
}
|