init: 1.0.0

This commit is contained in:
tension
2025-04-25 12:08:29 +09:00
commit c81c9bd724
1031 changed files with 76472 additions and 0 deletions
+22
View File
@@ -0,0 +1,22 @@
package orm
import (
"github.com/go-sql-driver/mysql"
)
func ParseDSN(dsn string) *Config {
cfg, err := mysql.ParseDSN(dsn)
if err != nil {
return nil
}
return &Config{
Addr: cfg.Addr,
Dbname: cfg.DBName,
Username: cfg.User,
Password: cfg.Passwd,
Config: "charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai",
MaxIdleConns: 10,
MaxOpenConns: 10,
SlowThreshold: 1000,
}
}
+72
View File
@@ -0,0 +1,72 @@
package orm
import (
"errors"
"fmt"
"time"
"github.com/perfect-panel/ppanel-server/pkg/logger"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/schema"
)
type Config struct {
Addr string `yaml:"Addr"`
Username string `yaml:"Username"`
Password string `yaml:"Password"`
Dbname string `yaml:"Dbname"`
Config string `yaml:"Config" default:"charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai"`
MaxIdleConns int `yaml:"MaxIdleConns" default:"10"`
MaxOpenConns int `yaml:"MaxOpenConns" default:"10"`
SlowThreshold int64 `yaml:"SlowThreshold" default:"1000"`
}
type Mysql struct {
Config Config
}
func (m *Mysql) Dsn() string {
return m.Config.Username + ":" + m.Config.Password + "@tcp(" + m.Config.Addr + ")/" + m.Config.Dbname + "?" + m.Config.Config
}
func (m *Mysql) GetSlowThreshold() time.Duration {
return time.Duration(m.Config.SlowThreshold) * time.Millisecond
}
func (m *Mysql) GetColorful() bool {
return true
}
func ConnectMysql(m Mysql) (*gorm.DB, error) {
if m.Config.Dbname == "" {
return nil, errors.New("database name is empty")
}
mysqlCfg := mysql.Config{
DSN: m.Dsn(),
}
db, err := gorm.Open(mysql.New(mysqlCfg), &gorm.Config{
Logger: new(logger.GormLogger),
NamingStrategy: schema.NamingStrategy{
SingularTable: true,
},
})
if err != nil {
return nil, err
} else {
sqldb, _ := db.DB()
sqldb.SetMaxIdleConns(m.Config.MaxIdleConns)
sqldb.SetMaxOpenConns(m.Config.MaxOpenConns)
return db, nil
}
}
func Ping(dsn string) bool {
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Printf("connect mysql failed, err: %v\n", err.Error())
return false
}
sqlDB, _ := db.DB()
return sqlDB.Ping() == nil
}
+18
View File
@@ -0,0 +1,18 @@
package orm
import "testing"
func TestParseDSN(t *testing.T) {
dsn := "root:mylove520@tcp(localhost:3306)/vpnboard"
config := ParseDSN(dsn)
if config == nil {
t.Fatal("config is nil")
}
t.Log(config)
}
func TestPing(t *testing.T) {
dsn := "root:mylove520@tcp(localhost:3306)/vpnboard"
status := Ping(dsn)
t.Log(status)
}