定时任务redis更新
This commit is contained in:
parent
eda29d09a4
commit
32b108c314
|
|
@ -93,12 +93,12 @@ func FindRunLogByAuthID(auth_id int) []CIDRunLog {
|
|||
|
||||
func FindRunLogByID(auth_id, cid_id int) []CIDRunLog {
|
||||
var cidRunLog []CIDRunLog
|
||||
DB.Debug().Where("cid_id = ? and auth_id = ?", cid_id, auth_id).Order("created_at desc").Find(&cidRunLog)
|
||||
DB.Debug().Where("cid_id = ? and auth_id = ?", cid_id, auth_id).Order("created_at desc").Find(&cidRunLog).Limit(30)
|
||||
return cidRunLog
|
||||
}
|
||||
func FindRunLogByCIDLogID(id, auth_id int) []CIDRunLog {
|
||||
var cidRunLogs []CIDRunLog
|
||||
DB.Debug().Where("id = ? and auth_id = ?", id, auth_id).Order("created_at desc").Find(&cidRunLogs)
|
||||
DB.Debug().Where("id = ? and auth_id = ?", id, auth_id).Order("created_at desc").Find(&cidRunLogs).Limit(30)
|
||||
return cidRunLogs
|
||||
}
|
||||
|
||||
|
|
|
|||
120
handler/cid.go
120
handler/cid.go
|
|
@ -41,6 +41,9 @@ type CIDUpdateReq struct {
|
|||
Token string `json:"cidtoken" form:"cidtoken"`
|
||||
}
|
||||
|
||||
// 全局变量,记录是否进行cron定时任务的刷新
|
||||
var cron_count int
|
||||
|
||||
func SetUpCIDGroup(router *gin.Engine) {
|
||||
cidGroup := router.Group("/cid") //持续集成、部署
|
||||
cidGroup.POST("/create", CreateCID)
|
||||
|
|
@ -88,6 +91,9 @@ func CreateCID(c *gin.Context) {
|
|||
token, _ := generateRandomHexString(32)
|
||||
res := dao.CreateCID(req.Name, req.Url, req.Script, token, req.Time, authID)
|
||||
if res != 0 {
|
||||
if req.Time > 0 {
|
||||
updateCronRedisTime(int(res), req.Time)
|
||||
}
|
||||
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": res})
|
||||
} else {
|
||||
c.JSON(200, gin.H{"error": "CreateCID failed", "code": proto.OperationFailed, "message": "failed"})
|
||||
|
|
@ -126,6 +132,9 @@ func UpdateCID(c *gin.Context) {
|
|||
c.JSON(200, gin.H{"error": "CID not found", "code": proto.OperationFailed, "message": "failed"})
|
||||
return
|
||||
} else {
|
||||
if req.Time > 0 {
|
||||
updateCronRedisTime(req.ID, req.Time)
|
||||
}
|
||||
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": "success"})
|
||||
}
|
||||
} else {
|
||||
|
|
@ -228,6 +237,11 @@ echo "end"`
|
|||
|
||||
// 定时任务处理逻辑
|
||||
func RunCron() {
|
||||
cron_count++
|
||||
if cron_count > 6 {
|
||||
updateCronFromDBToRedis()
|
||||
cron_count = 0
|
||||
}
|
||||
//从redis查看是否有定时任务
|
||||
//如果有定时任务,执行定时任务
|
||||
//如果没有定时任务,查找数据库是否有定时任务,如果有,则加入redis,如果没有,则不做任何操作
|
||||
|
|
@ -235,20 +249,7 @@ func RunCron() {
|
|||
res := worker.GetRedis(key)
|
||||
//fmt.Println("cid run cron res:", res)
|
||||
if res == "" {
|
||||
cids := dao.FindCIDByTime()
|
||||
cid_workers := make([]proto.CIDRUN, 0)
|
||||
for _, v := range cids {
|
||||
cid_worker := proto.CIDRUN{CID: v.ID, Curr: v.Time, Every: v.Time}
|
||||
cid_workers = append(cid_workers, cid_worker)
|
||||
}
|
||||
if len(cid_workers) > 0 {
|
||||
//将定时任务加入redis
|
||||
json_data, err := json.Marshal(cid_workers)
|
||||
if err != nil {
|
||||
fmt.Println("json marshal failed")
|
||||
}
|
||||
worker.SetRedis(key, string(json_data))
|
||||
}
|
||||
readCronFromDBToRedis(key)
|
||||
} else {
|
||||
var cid_workers []proto.CIDRUN
|
||||
err := json.Unmarshal([]byte(res), &cid_workers)
|
||||
|
|
@ -277,3 +278,94 @@ func RunCron() {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
// 将数据库中的定时任务加入redis
|
||||
func readCronFromDBToRedis(key string) {
|
||||
cids := dao.FindCIDByTime()
|
||||
cid_workers := make([]proto.CIDRUN, 0)
|
||||
for _, v := range cids {
|
||||
cid_worker := proto.CIDRUN{CID: v.ID, Curr: v.Time, Every: v.Time}
|
||||
cid_workers = append(cid_workers, cid_worker)
|
||||
}
|
||||
if len(cid_workers) > 0 {
|
||||
//将定时任务加入redis
|
||||
json_data, err := json.Marshal(cid_workers)
|
||||
if err != nil {
|
||||
fmt.Println("json marshal failed")
|
||||
}
|
||||
worker.SetRedis(key, string(json_data))
|
||||
}
|
||||
}
|
||||
|
||||
// 从数据库更新定时任务到redis
|
||||
func updateCronFromDBToRedis() {
|
||||
key := "cron_cid_runs"
|
||||
cids := dao.FindCIDByTime()
|
||||
cid_maps := make(map[uint]int)
|
||||
|
||||
//将数据库中的定时任务加入map,key为cid,value为时间,便于后续查找
|
||||
for _, v := range cids {
|
||||
cid_maps[v.ID] = v.Time
|
||||
}
|
||||
res := worker.GetRedis(key)
|
||||
if res == "" {
|
||||
readCronFromDBToRedis(key)
|
||||
return
|
||||
}
|
||||
var cid_workers_redis []proto.CIDRUN
|
||||
err := json.Unmarshal([]byte(res), &cid_workers_redis)
|
||||
if err != nil {
|
||||
fmt.Println("json unmarshal failed")
|
||||
return
|
||||
}
|
||||
for i, v := range cid_workers_redis {
|
||||
if time, ok := cid_maps[v.CID]; ok {
|
||||
if v.Every != time {
|
||||
cid_workers_redis[i].Every = time
|
||||
cid_workers_redis[i].Curr = time
|
||||
}
|
||||
}
|
||||
}
|
||||
//将定时任务加入redis
|
||||
json_data, err := json.Marshal(cid_workers_redis)
|
||||
if err != nil {
|
||||
fmt.Println("json marshal failed")
|
||||
return
|
||||
}
|
||||
worker.SetRedis(key, string(json_data))
|
||||
}
|
||||
|
||||
// 查看指定定时任务是否存在,如果存在则更新时间,如果不存在则加入
|
||||
func updateCronRedisTime(id int, time int) {
|
||||
key := "cron_cid_runs"
|
||||
res := worker.GetRedis(key)
|
||||
if res == "" {
|
||||
readCronFromDBToRedis(key)
|
||||
return
|
||||
} else {
|
||||
var cid_workers []proto.CIDRUN
|
||||
err := json.Unmarshal([]byte(res), &cid_workers)
|
||||
if err != nil {
|
||||
fmt.Println("json unmarshal failed")
|
||||
}
|
||||
isContain := false
|
||||
for i, v := range cid_workers {
|
||||
if v.CID == uint(id) {
|
||||
//更新时间,不会继续原来的时间
|
||||
cid_workers[i].Curr = time
|
||||
cid_workers[i].Every = time
|
||||
isContain = true
|
||||
}
|
||||
}
|
||||
if isContain == false {
|
||||
cid_worker := proto.CIDRUN{CID: uint(id), Curr: time, Every: time}
|
||||
cid_workers = append(cid_workers, cid_worker)
|
||||
}
|
||||
//将定时任务加入redis
|
||||
json_data, err := json.Marshal(cid_workers)
|
||||
if err != nil {
|
||||
fmt.Println("json marshal failed")
|
||||
}
|
||||
worker.SetRedis(key, string(json_data))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue