feat: publish standalone worker
Separate worker packaging and service lifecycle from the control plane.
Этот коммит содержится в:
80
config/database/database.go
Обычный файл
80
config/database/database.go
Обычный файл
@@ -0,0 +1,80 @@
|
||||
// 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"
|
||||
|
||||
"rsgit.ru/rsmon/rsmon/app/models"
|
||||
_ "rsgit.ru/rsmon/rsmon/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)
|
||||
}
|
||||
Ссылка в новой задаче
Block a user