borgmatic-monitor/pkg/database/database.go
2026-02-24 09:21:41 +01:00

68 lines
1 KiB
Go

package database
import (
"fmt"
"os"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var (
db *gorm.DB
config mysql.Config
)
func Init() {
config = mysql.Config{
DSN: fmt.Sprintf(
"%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local",
fallback(os.Getenv("MYSQL_USERNAME"), "root"),
fallback(os.Getenv("MYSQL_PASSWORD"), "root"),
fallback(os.Getenv("MYSQL_HOST"), "127.0.0.1"),
fallback(os.Getenv("MYSQL_PORT"), "3306"),
fallback(os.Getenv("MYSQL_DATABASE"), "app"),
),
DefaultStringSize: 256,
DisableDatetimePrecision: true,
DontSupportRenameIndex: true,
DontSupportRenameColumn: true,
SkipInitializeWithVersion: false,
}
}
func GetDb() *gorm.DB {
var err error
if db == nil {
db, err = gorm.Open(mysql.New(config))
if err != nil {
panic(err)
}
}
gdb, err := db.DB()
if err != nil {
db = nil
return GetDb()
}
if err = gdb.Ping(); err != nil {
db = nil
return GetDb()
}
return db
}
func fallback(value string, fb string) string {
if value == "" {
return fb
}
return value
}