diff --git a/handler/restart/restart.go b/handler/restart/restart.go index 2587893..735fa51 100644 --- a/handler/restart/restart.go +++ b/handler/restart/restart.go @@ -3,6 +3,7 @@ package restart import ( "errors" "log" + "net/http" "os" "os/exec" "time" @@ -11,6 +12,8 @@ import ( "git.lxtend.com/qqbot/handler" "git.lxtend.com/qqbot/model" docker "git.lxtend.com/qqbot/service/exec" + "git.lxtend.com/qqbot/util" + "github.com/gin-gonic/gin" ) var hasVaildBuild = true @@ -94,7 +97,7 @@ func buildAndRestart(msg model.Message) model.Reply { } func pullCode(msg model.Message) model.Reply { - err := gitPull() + err := util.GitPull() if err != nil { return model.Reply{ ReplyMsg: "拉取代码失败,报错如下\n" + err.Error(), @@ -164,17 +167,26 @@ func buildBot() error { return nil } -func gitPull() error { - workDir, err := os.Getwd() +func PullCodeHandler(c *gin.Context) { + err := util.GitPull() if err != nil { - return err + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) } - cmd := exec.Command("git", "pull") - cmd.Dir = workDir - - output, err := cmd.CombinedOutput() - if err != nil { - return errors.New(string(output) + err.Error()) - } - return nil + c.JSON(http.StatusOK, gin.H{"message": "拉取代码成功"}) +} + +func BuildBotHandler(c *gin.Context) { + err := buildBot() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + } + c.JSON(http.StatusOK, gin.H{"message": "构建成功"}) +} + +func RestartBotHandler(c *gin.Context) { + err := restartProgram() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + } + c.JSON(http.StatusOK, gin.H{"message": "重启成功"}) } diff --git a/router.go b/router.go index b027c3c..513e73f 100644 --- a/router.go +++ b/router.go @@ -3,6 +3,7 @@ package main import ( "time" + "git.lxtend.com/qqbot/handler/restart" "git.lxtend.com/qqbot/handler/ticket" "git.lxtend.com/qqbot/health" "github.com/gin-contrib/cors" @@ -12,7 +13,7 @@ import ( func startRouter() { ginServer := gin.New() ginServer.Use(cors.New(cors.Config{ - AllowOrigins: []string{"https://www.lxtend.com"}, + AllowOrigins: []string{"https://www.lxtend.com", "https://git.lxtend.com"}, AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}, AllowHeaders: []string{"Origin", "Content-Type", "Accept", "Authorization", "X-CSRF-Token"}, ExposeHeaders: []string{"Content-Length", "X-CSRF-Token"}, @@ -23,5 +24,9 @@ func startRouter() { healthEngine.GET("/ping", health.HealthHandler) ticketEngine := ginServer.Group("/ticket") ticketEngine.GET("", ticket.TicketHandler) + gitEngine := ginServer.Group("/git") + gitEngine.GET("/pull", restart.PullCodeHandler) + gitEngine.GET("/build", restart.BuildBotHandler) + gitEngine.GET("/restart", restart.RestartBotHandler) go ginServer.Run(":3434") } diff --git a/util/automatic.go b/util/automatic.go new file mode 100644 index 0000000..487b160 --- /dev/null +++ b/util/automatic.go @@ -0,0 +1,22 @@ +package util + +import ( + "errors" + "os" + "os/exec" +) + +func GitPull() error { + workDir, err := os.Getwd() + if err != nil { + return err + } + cmd := exec.Command("git", "pull") + cmd.Dir = workDir + + output, err := cmd.CombinedOutput() + if err != nil { + return errors.New(string(output) + err.Error()) + } + return nil +}