package monkey import ( "goqs/controllers" "goqs/dbsql" "goqs/models" "net/http" "strconv" "github.com/gin-gonic/gin" "github.com/spf13/cast" ) // @Tags Monkey相关 /api/monkey/v1/ // @Summary 新建Monkey任务 // @Description 新建Monkey任务,创建成功后将会发送指令到monkey服务,初始status为WAITTING-等待中 // @accept x-www-form-urlencoded // @Param project formData string false "项目名" // @Param package_url formData string false "测试包下载链接" // @Param package_name formData string true "应用包名" // @Param launch_activity formData string false "启动activity页" // @Param device_amount formData string false "运行设备数,默认1台" // @Param platform formData string true "平台adr/ios" // @Param run_time formData string false "运行时间(s),默认两小时(7200s)" // @Param creator formData string false "任务创建者" // @Param mode formData string false "调用服务的方式,0-cli模式/1-api模式,默认cli" // @Success 200 {object} models.Response "返回创建的任务id" // @Router /api/monkey/v1/create_task [post] func CreateTask(c *gin.Context) { rsp := controllers.NewResponse() db, err := dbsql.GetConn(dbsql.DSN) if err != nil { rsp.Error(err.Error()) c.JSON(http.StatusOK, rsp) } var task models.MonkeyTask task.Project = c.PostForm("project") task.PackageURL = c.PostForm("package_url") task.PackageName = c.PostForm("package_name") task.LaunchActivity = c.PostForm("launch_activity") task.DeviceAmount = cast.ToInt(c.DefaultPostForm("device_amount", "1")) task.Platform = c.PostForm("platform") task.RunTime = cast.ToInt(c.DefaultPostForm("run_time", "7200")) task.Creator = c.PostForm("creator") task.Status = "WAITTING" // || task.Creator == "" if task.PackageName == "" || task.LaunchActivity == "" || task.DeviceAmount <= 0 || task.Platform == "" || task.RunTime <= 10 || task.PackageURL == "" { rsp.Error("get formdata error") rsp.Data = task c.JSON(http.StatusOK, rsp) return } db.Model(models.MonkeyTask{}).Create(&task) if db.Error != nil { rsp.Error(db.Error.Error()) c.JSON(http.StatusOK, rsp) } rsp.Success() rsp.Data = task c.JSON(http.StatusOK, rsp) go runAndroidMonkeyCmd(task) } // @Tags Monkey相关 /api/monkey/v1/ // @Summary 更新Monkey任务状态 // @Description 更新Monkey任务状态,进行中为RUNNING,已完成为FINIASHED,如有错误为ERROR // @accept x-www-form-urlencoded // @Param task_id formData int true "项目名" // @Param status formData string false "要更新的任务状态" // @Success 200 {object} models.Response "返回更新后的任务信息" // @Router /api/monkey/v1/task/status [post] func UpdateTaskStatus(c *gin.Context) { rsp := controllers.NewResponse() task_id := cast.ToInt(c.PostForm("task_id")) status := c.PostForm("status") if task_id <= 0 { rsp.Error("task_id error") c.JSON(http.StatusOK, rsp) return } db, err := dbsql.GetConn(dbsql.DSN) if err != nil { rsp.Error(err.Error()) c.JSON(http.StatusOK, rsp) } var task models.MonkeyTask db.Where("id = ?", task_id).Find(&task) if task.Id <= 0 { rsp.Error("任务不存在") c.JSON(http.StatusOK, rsp) return } task.Status = status db.Save(&task) rsp.Success() rsp.Data = task c.JSON(http.StatusOK, rsp) } // @Tags Monkey相关 /api/monkey/v1/ // @Summary 获取任务列表 // @Description 获取任务列表 // @accept x-www-form-urlencoded // @Param page_size query int false "每页大小,默认为10" // @Param page_index query int false "第几页,默认为第一页" // @Success 200 {object} models.Response "返回更新后的任务信息" // @Router /api/monkey/v1/tasks [get] func GetTasks(c *gin.Context) { var rsp models.Response var p models.Page pageIndex, err := strconv.Atoi(c.DefaultQuery("page_index", "1")) if rsp.CheckErr(err) { c.JSON(http.StatusOK, rsp) return } p.Index = pageIndex pageSize, err := strconv.Atoi(c.DefaultQuery("page_size", "10")) if rsp.CheckErr(err) { c.JSON(http.StatusOK, rsp) return } p.Size = pageSize db, err := dbsql.GetConn(dbsql.DSN) if rsp.CheckErr(err) { c.JSON(http.StatusOK, rsp) return } defer dbsql.Close(db) var list []models.MonkeyTask db = db.Model(&models.MonkeyTask{}) var count int64 db = db.Count(&count) db = dbsql.SetPageQuery(db, pageIndex, pageSize) db.Order("id desc").Find(&list) p.MaxPage = count/(int64(p.Size)+1) + 1 p.List = list p.Total = int(count) rsp.Success() rsp.Data = p c.JSON(http.StatusOK, rsp) }