You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gojobs/jobs_gorm.go

108 lines
3.1 KiB

package gojobs
import (
"errors"
"fmt"
"go.dtapp.net/dorm"
"go.dtapp.net/goarray"
"go.dtapp.net/goip"
"go.dtapp.net/gojobs/jobs_gorm_model"
"go.dtapp.net/golock"
"runtime"
)
type JobsGormConfig struct {
GormClient *dorm.GormClient // 数据库驱动
RedisClient *dorm.RedisClient // 缓存数据库驱动
CurrentIp string // 当前ip
LockPrefix string // 锁Key前缀 xxx_lock
LockSeparator string // 锁分隔符 xxx_lock
CornPrefix string // 任务前缀 xxx_cron
Debug bool // 调试
}
// JobsGorm Gorm数据库驱动
type JobsGorm struct {
gormClient *dorm.GormClient // 数据库驱动
redisClient *dorm.RedisClient // 缓存驱动
lockClient *golock.LockRedis // 锁驱动
config struct {
debug bool // 调试
runVersion string // 运行版本
os string // 系统类型
arch string // 系统架构
maxProCs int // CPU核数
version string // GO版本
macAddrS string // Mac地址
insideIp string // 内网ip
outsideIp string // 外网ip
lockPrefix string // 锁Key前缀
lockSeparator string // 锁分隔符
cornPrefix string // 任务key前缀
cornKeyIp string // 任务key
cornKeyChannel string // 任务频道key(任务key+_ch)
cornKeyChannels string // 任务频道key通配符匹配(任务key+_ch_*)
}
}
// NewJobsGorm 初始化
func NewJobsGorm(config *JobsGormConfig) (*JobsGorm, error) {
// 判断
if config.LockPrefix == "" {
return nil, errors.New("需要配置锁Key前缀")
}
if config.LockSeparator == "" {
return nil, errors.New("需要配置锁分隔符")
}
if config.CornPrefix == "" {
return nil, errors.New("需要配置任务前缀")
}
if config.CurrentIp == "" {
return nil, errors.New("需要配置当前的IP")
}
if config.GormClient == nil {
return nil, errors.New("需要配置数据库驱动")
}
if config.RedisClient == nil {
return nil, errors.New("需要配置缓存数据库驱动")
}
c := &JobsGorm{}
c.gormClient = config.GormClient
c.redisClient = config.RedisClient
c.config.outsideIp = config.CurrentIp
c.config.lockPrefix = config.LockPrefix
c.config.lockSeparator = config.LockSeparator
c.config.cornPrefix = config.CornPrefix
c.config.debug = config.Debug
c.lockClient = golock.NewLockRedis(c.redisClient)
// 配置信息
c.config.runVersion = Version
c.config.os = runtime.GOOS
c.config.arch = runtime.GOARCH
c.config.maxProCs = runtime.GOMAXPROCS(0)
c.config.version = runtime.Version()
c.config.macAddrS = goarray.TurnString(goip.GetMacAddr())
c.config.insideIp = goip.GetInsideIp()
// 创建模型
err := c.gormClient.Db.AutoMigrate(
&jobs_gorm_model.Task{},
&jobs_gorm_model.TaskLog{},
&jobs_gorm_model.TaskLogRun{},
&jobs_gorm_model.TaskIp{},
)
if err != nil {
return nil, errors.New(fmt.Sprintf("创建任务模型失败:%v\n", err))
}
c.config.cornKeyIp = c.getCornKeyIp()
c.config.cornKeyChannel = c.getCornKeyChannel()
c.config.cornKeyChannels = c.getCornKeyChannels()
return c, nil
}