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() if c.config.cornKeyIp == "" { return nil, errors.New(fmt.Sprintf("没有配置 cornKeyIp:%s", c.config.cornKeyIp)) } if c.config.cornKeyChannel == "" { return nil, errors.New(fmt.Sprintf("没有配置 cornKeyChannel:%s", c.config.cornKeyChannel)) } if c.config.cornKeyChannels == "" { return nil, errors.New(fmt.Sprintf("没有配置 cornKeyChannels:%s", c.config.cornKeyChannels)) } return c, nil }