59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package pgconfig
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
type DatabaseConfig struct {
|
|
DatabaseURL string
|
|
Host string
|
|
Port int
|
|
User string
|
|
Password string
|
|
Database string
|
|
SSLMode string
|
|
MaxConnections int
|
|
MaxIdleTime time.Duration
|
|
ConnMaxLifetime time.Duration
|
|
}
|
|
|
|
func LoadDatabaseConfig() *DatabaseConfig {
|
|
maxConns, _ := strconv.Atoi(getEnv("DB_MAX_CONNECTIONS", "25"))
|
|
maxIdle, _ := time.ParseDuration(getEnv("DB_MAX_IDLE_TIME", "5m"))
|
|
maxLifetime, _ := time.ParseDuration(getEnv("DB_CONN_MAX_LIFETIME", "1h"))
|
|
return &DatabaseConfig{
|
|
DatabaseURL: getEnv("DATABASE_URL", ""),
|
|
Host: getEnv("DB_HOST", "localhost"), Port: getIntEnv("DB_PORT", 5432),
|
|
User: getEnv("DB_USER", "explorer"), Password: getEnv("DB_PASSWORD", ""),
|
|
Database: getEnv("DB_NAME", "explorer"), SSLMode: getEnv("DB_SSLMODE", "disable"),
|
|
MaxConnections: maxConns, MaxIdleTime: maxIdle, ConnMaxLifetime: maxLifetime,
|
|
}
|
|
}
|
|
|
|
func (c *DatabaseConfig) ConnectionString() string {
|
|
if c.DatabaseURL != "" {
|
|
return c.DatabaseURL
|
|
}
|
|
return fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=%s",
|
|
c.Host, c.Port, c.User, c.Password, c.Database, c.SSLMode)
|
|
}
|
|
|
|
func getEnv(k, d string) string {
|
|
if v := os.Getenv(k); v != "" {
|
|
return v
|
|
}
|
|
return d
|
|
}
|
|
|
|
func getIntEnv(k string, d int) int {
|
|
if v := os.Getenv(k); v != "" {
|
|
if i, err := strconv.Atoi(v); err == nil {
|
|
return i
|
|
}
|
|
}
|
|
return d
|
|
}
|