You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
4.6 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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)
}