67 lines
1.2 KiB
Go
67 lines
1.2 KiB
Go
package k8s_manager
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/sirupsen/logrus"
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/gorm"
|
|
"sync"
|
|
)
|
|
|
|
var instance *gorm.DB = nil
|
|
var lock sync.Mutex
|
|
|
|
func opendb() *gorm.DB {
|
|
if instance == nil {
|
|
lock.Lock()
|
|
if instance == nil {
|
|
db_host := GetConfig().DBHost
|
|
db_user := GetConfig().DBUser
|
|
db_pass := GetConfig().DBPassword
|
|
dsn := fmt.Sprintf("%s:%s@tcp(%s:3306)/k8s?charset=utf8mb4&parseTime=True&loc=Local", db_user, db_pass, db_host)
|
|
var err error
|
|
instance, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
|
|
if err != nil {
|
|
logrus.WithError(err).Error("Cannot open database.")
|
|
instance = nil
|
|
}
|
|
}
|
|
lock.Unlock()
|
|
}
|
|
return instance
|
|
}
|
|
|
|
func checkdb(cnt int) *gorm.DB {
|
|
ans := opendb()
|
|
if ans == nil {
|
|
return nil
|
|
}
|
|
db, err := ans.DB()
|
|
if err != nil {
|
|
logrus.WithError(err).Error("Cannot get *sql.DB.")
|
|
db = nil
|
|
}
|
|
if db != nil {
|
|
err = db.Ping()
|
|
if err != nil {
|
|
logrus.WithError(err).Errorf("Ping error %d.", cnt)
|
|
err = db.Close()
|
|
if err != nil {
|
|
logrus.WithError(err).Errorf("Close error %d.", cnt)
|
|
}
|
|
instance = nil
|
|
ans = nil
|
|
}
|
|
}
|
|
return ans
|
|
}
|
|
|
|
func DB() *gorm.DB {
|
|
ans := checkdb(1)
|
|
if ans != nil {
|
|
return ans
|
|
}
|
|
instance = nil
|
|
return checkdb(2)
|
|
}
|