diff --git a/.idea/copilot.data.migration.ask2agent.xml b/.idea/copilot.data.migration.ask2agent.xml new file mode 100644 index 0000000..1f2ea11 --- /dev/null +++ b/.idea/copilot.data.migration.ask2agent.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/handler/cid.go b/handler/cid.go index 2e790f9..e21a8e0 100644 --- a/handler/cid.go +++ b/handler/cid.go @@ -10,6 +10,7 @@ import ( "os/exec" "strconv" "strings" + "sync" "time" "videoplayer/dao" "videoplayer/proto" @@ -17,6 +18,19 @@ import ( "videoplayer/worker" ) +type CIDTask struct { + Name string + Url string + Script string + ID int + AuthID int +} + +var ( + cidTaskQueue = make(chan CIDTask, 100) + cidQueueOnce sync.Once +) + type CIDCreateReq struct { Name string `json:"name" form:"name"` Url string `json:"url" form:"url"` @@ -48,7 +62,18 @@ type CIDUpdateReq struct { // 全局变量,记录是否进行cron定时任务的刷新 var cron_count int +func initCIDTaskQueue() { + cidQueueOnce.Do(func() { + go func() { + for task := range cidTaskQueue { + RunShellCID(task.Name, task.Url, task.Script, task.ID, task.AuthID) + } + }() + }) +} + func SetUpCIDGroup(router *gin.Engine) { + initCIDTaskQueue() cidGroup := router.Group("/cid") //持续集成、部署 cidGroup.POST("/create", CreateCID) cidGroup.POST("/delete", DeleteCID) @@ -100,7 +125,13 @@ func RunCID(c *gin.Context) { c.JSON(200, gin.H{"error": "CID not found", "code": proto.OperationFailed, "message": "failed"}) return } else { - go RunShellCID(cid.Name, cid.Url, cid.Script, req.ID, authID) + cidTaskQueue <- CIDTask{ + Name: cid.Name, + Url: cid.Url, + Script: cid.Script, + ID: req.ID, + AuthID: authID, + } c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": "success"}) } } else { @@ -237,7 +268,13 @@ func CIDCallback(c *gin.Context) { return } if res.ID != 0 { - go RunShellCID(res.Name, res.Url, res.Script, int(res.ID), res.Auth_id) + cidTaskQueue <- CIDTask{ + Name: res.Name, + Url: res.Url, + Script: res.Script, + ID: int(res.ID), + AuthID: res.Auth_id, + } resp.Code, resp.Message, resp.Data = proto.SuccessCode, "success", res.Name c.JSON(http.StatusOK, resp) return @@ -261,17 +298,14 @@ echo "end"` start := time.Now() //执行脚本 cmd := exec.Command("/bin/bash", "-c", scriptContent) - // 使用bytes.Buffer捕获输出 - var out bytes.Buffer - cmd.Stdout = &out - err3 := cmd.Run() + output, err3 := cmd.CombinedOutput() err3_info := "" if err3 != nil { err3_info = err3.Error() } elapsed := time.Since(start) //fmt.Println("bash content:", scriptContent) - dao.CreateRunLog(id, authID, scriptContent, out.String(), err3_info, elapsed.Seconds()) //添加执行日志 + dao.CreateRunLog(id, authID, scriptContent, string(output), err3_info, elapsed.Seconds()) //添加执行日志 } func RunShellCID(cid_name, url, script string, id, authID int) { @@ -300,10 +334,7 @@ echo "end"` start := time.Now() //执行脚本 cmd := exec.Command("/bin/bash", "-c", scriptContent) - // 使用bytes.Buffer捕获输出 - var out bytes.Buffer - cmd.Stdout = &out - err3 := cmd.Run() + output, err3 := cmd.CombinedOutput() err3_info := "" if err3 != nil { err3_info = err3.Error() @@ -314,7 +345,7 @@ echo "end"` } elapsed := time.Since(start) //fmt.Println("bash content:", scriptContent) - dao.CreateRunLog(id, authID, scriptContent, out.String(), err3_info, elapsed.Seconds()) //添加执行日志 + dao.CreateRunLog(id, authID, scriptContent, string(output), err3_info, elapsed.Seconds()) //添加执行日志 if err3 != nil { dao.UpdateLastFailByID(id, time.Now()) } else {