78 lines
1.5 KiB
Go
78 lines
1.5 KiB
Go
package dao
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/eigeen/furryboard/spider-scheduler/pkg/conf"
|
|
"github.com/eigeen/furryboard/spider-scheduler/pkg/dao/model"
|
|
"github.com/eigeen/furryboard/spider-scheduler/pkg/log"
|
|
"github.com/sirupsen/logrus"
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/logger"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
once sync.Once
|
|
db *gorm.DB
|
|
)
|
|
|
|
func DB() *gorm.DB {
|
|
once.Do(initDB)
|
|
return db
|
|
|
|
}
|
|
|
|
type LogrusWriter struct {
|
|
log *logrus.Logger
|
|
}
|
|
|
|
func (w *LogrusWriter) Printf(format string, v ...interface{}) {
|
|
logStr := fmt.Sprintf(format, v...)
|
|
w.log.WithField("method", "GORM").Warn(logStr)
|
|
}
|
|
|
|
func NewLogger() *LogrusWriter {
|
|
return &LogrusWriter{log: log.Logger()}
|
|
}
|
|
|
|
func initDB() {
|
|
var err error
|
|
dsn := fmt.Sprintf(
|
|
"host=%s user=%s password=%s dbname=%s port=%d sslmode=disable TimeZone=Asia/Shanghai",
|
|
conf.Conf.Database.Host,
|
|
conf.Conf.Database.User,
|
|
conf.Conf.Database.Password,
|
|
conf.Conf.Database.DB,
|
|
conf.Conf.Database.Port,
|
|
)
|
|
|
|
// >= 1s SQL慢查询
|
|
slowLogger := logger.New(NewLogger(), logger.Config{
|
|
SlowThreshold: time.Second * 1,
|
|
LogLevel: logger.Warn,
|
|
})
|
|
db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{
|
|
Logger: slowLogger,
|
|
})
|
|
if err != nil {
|
|
log.Logger().Fatal("创建数据库连接失败:", err)
|
|
}
|
|
|
|
autoMigrate()
|
|
}
|
|
|
|
func autoMigrate() {
|
|
var err error
|
|
err = db.AutoMigrate(&model.Changelog{})
|
|
err = db.AutoMigrate(&model.Fans{})
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if err != nil {
|
|
log.Logger().Fatal("关联数据表失败:", err)
|
|
}
|
|
}
|