package database
import (
"fmt"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/schema"
"openeuler.org/PilotGo/container-plugin/config"
)
var globalDB *gorm.DB
func MysqlInit(conf *config.MysqlConf) error {
url := fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=utf8mb4&parseTime=true",
conf.User,
conf.Password,
conf.Host,
conf.Port,
conf.Database)
gdb, err := gorm.Open(mysql.Open(url), &gorm.Config{
NamingStrategy: schema.NamingStrategy{
SingularTable: true,
},
})
if err != nil {
return err
}
globalDB = gdb
db, err := gdb.DB()
if err != nil {
return err
}
maxOpenConns := conf.MaxOpenConns
if maxOpenConns <= 0 {
maxOpenConns = 100
}
maxIdleConns := conf.MaxIdleConns
if maxIdleConns <= 0 {
maxIdleConns = 10
}
connMaxLifetime := conf.ConnMaxLifetime
if connMaxLifetime <= 0 {
connMaxLifetime = time.Hour
}
connMaxIdleTime := conf.ConnMaxIdleTime
if connMaxIdleTime <= 0 {
connMaxIdleTime = 30 * time.Minute
}
db.SetMaxOpenConns(maxOpenConns)
db.SetMaxIdleConns(maxIdleConns)
db.SetConnMaxLifetime(connMaxLifetime)
db.SetConnMaxIdleTime(connMaxIdleTime)
return nil
}
func DB() *gorm.DB {
return globalDB
}