Merge branch 'refs/heads/feat-cid'
This commit is contained in:
commit
cf7d5d7992
|
|
@ -93,12 +93,12 @@ func FindRunLogByAuthID(auth_id int) []CIDRunLog {
|
||||||
|
|
||||||
func FindRunLogByID(auth_id, cid_id int) []CIDRunLog {
|
func FindRunLogByID(auth_id, cid_id int) []CIDRunLog {
|
||||||
var cidRunLog []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
|
return cidRunLog
|
||||||
}
|
}
|
||||||
func FindRunLogByCIDLogID(id, auth_id int) []CIDRunLog {
|
func FindRunLogByCIDLogID(id, auth_id int) []CIDRunLog {
|
||||||
var cidRunLogs []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
|
return cidRunLogs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
120
handler/cid.go
120
handler/cid.go
|
|
@ -41,6 +41,9 @@ type CIDUpdateReq struct {
|
||||||
Token string `json:"cidtoken" form:"cidtoken"`
|
Token string `json:"cidtoken" form:"cidtoken"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 全局变量,记录是否进行cron定时任务的刷新
|
||||||
|
var cron_count int
|
||||||
|
|
||||||
func SetUpCIDGroup(router *gin.Engine) {
|
func SetUpCIDGroup(router *gin.Engine) {
|
||||||
cidGroup := router.Group("/cid") //持续集成、部署
|
cidGroup := router.Group("/cid") //持续集成、部署
|
||||||
cidGroup.POST("/create", CreateCID)
|
cidGroup.POST("/create", CreateCID)
|
||||||
|
|
@ -88,6 +91,9 @@ func CreateCID(c *gin.Context) {
|
||||||
token, _ := generateRandomHexString(32)
|
token, _ := generateRandomHexString(32)
|
||||||
res := dao.CreateCID(req.Name, req.Url, req.Script, token, req.Time, authID)
|
res := dao.CreateCID(req.Name, req.Url, req.Script, token, req.Time, authID)
|
||||||
if res != 0 {
|
if res != 0 {
|
||||||
|
if req.Time > 0 {
|
||||||
|
updateCronRedisTime(int(res), req.Time)
|
||||||
|
}
|
||||||
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": res})
|
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": res})
|
||||||
} else {
|
} else {
|
||||||
c.JSON(200, gin.H{"error": "CreateCID failed", "code": proto.OperationFailed, "message": "failed"})
|
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"})
|
c.JSON(200, gin.H{"error": "CID not found", "code": proto.OperationFailed, "message": "failed"})
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
|
if req.Time > 0 {
|
||||||
|
updateCronRedisTime(req.ID, req.Time)
|
||||||
|
}
|
||||||
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": "success"})
|
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": "success"})
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -228,6 +237,11 @@ echo "end"`
|
||||||
|
|
||||||
// 定时任务处理逻辑
|
// 定时任务处理逻辑
|
||||||
func RunCron() {
|
func RunCron() {
|
||||||
|
cron_count++
|
||||||
|
if cron_count > 6 {
|
||||||
|
updateCronFromDBToRedis()
|
||||||
|
cron_count = 0
|
||||||
|
}
|
||||||
//从redis查看是否有定时任务
|
//从redis查看是否有定时任务
|
||||||
//如果有定时任务,执行定时任务
|
//如果有定时任务,执行定时任务
|
||||||
//如果没有定时任务,查找数据库是否有定时任务,如果有,则加入redis,如果没有,则不做任何操作
|
//如果没有定时任务,查找数据库是否有定时任务,如果有,则加入redis,如果没有,则不做任何操作
|
||||||
|
|
@ -235,20 +249,7 @@ func RunCron() {
|
||||||
res := worker.GetRedis(key)
|
res := worker.GetRedis(key)
|
||||||
//fmt.Println("cid run cron res:", res)
|
//fmt.Println("cid run cron res:", res)
|
||||||
if res == "" {
|
if res == "" {
|
||||||
cids := dao.FindCIDByTime()
|
readCronFromDBToRedis(key)
|
||||||
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))
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
var cid_workers []proto.CIDRUN
|
var cid_workers []proto.CIDRUN
|
||||||
err := json.Unmarshal([]byte(res), &cid_workers)
|
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