|
|
package monkey
|
|
|
|
|
|
import (
|
|
|
"autogo/common"
|
|
|
"autogo/controllers"
|
|
|
"autogo/dbsql"
|
|
|
"autogo/models"
|
|
|
"fmt"
|
|
|
"net/http"
|
|
|
"strings"
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
"github.com/spf13/cast"
|
|
|
"gorm.io/gorm"
|
|
|
)
|
|
|
|
|
|
// @Tags Monkey相关 /api/monkey/v2/
|
|
|
// @Summary 新建Monkey任务
|
|
|
// @Description 新建Monkey任务,创建成功后将会发送指令到monkey服务,初始status为WAITTING-等待中
|
|
|
// @accept x-www-form-urlencoded
|
|
|
// @Param project formData string true "项目名"
|
|
|
// @Param product formData string true "产品名"
|
|
|
// @Param package_name formData string true "应用包名"
|
|
|
// @Param package_url formData string true "测试包下载链接"
|
|
|
// @Param platform formData string true "平台adr/ios"
|
|
|
// @Param run_time formData string false "运行时间(s),默认两小时(3600s)"
|
|
|
// @Param launch_activity formData string false "安卓启动页名称"
|
|
|
// @Param creator formData string false "任务创建者"
|
|
|
// @Param referer formData string false "启动来源,web-平台启动,ci-持续集成"
|
|
|
// @Param mode formData string false "调用服务的方式,0-cli模式/1-api模式,默认cli"
|
|
|
// @Param remark formData string false "备注"
|
|
|
// @Success 200 {object} models.Response "返回创建的任务id"
|
|
|
// @Router /api/monkey/v2/create_task [post]
|
|
|
func CreateTaskV2(c *gin.Context) {
|
|
|
rsp := controllers.NewResponse()
|
|
|
|
|
|
db, err := dbsql.GetConn(dbsql.DSN)
|
|
|
if err != nil {
|
|
|
rsp.Error(err.Error())
|
|
|
c.JSON(http.StatusOK, rsp)
|
|
|
}
|
|
|
defer dbsql.Close(db)
|
|
|
|
|
|
var task models.MonkeyTask
|
|
|
// 必填
|
|
|
task.Project = strings.ToLower(c.PostForm("project"))
|
|
|
task.Product = c.PostForm("product")
|
|
|
task.PackageName = c.PostForm("package_name")
|
|
|
task.PackageURL = c.PostForm("package_url")
|
|
|
task.Platform = c.PostForm("platform")
|
|
|
|
|
|
// 选填项
|
|
|
task.RunTime = cast.ToInt(c.DefaultPostForm("run_time", "3600"))
|
|
|
task.LaunchActivity = c.PostForm("launch_activity")
|
|
|
task.Creator = c.PostForm("creator")
|
|
|
task.Referer = c.DefaultPostForm("referer", "api")
|
|
|
task.Status = "WAITTING"
|
|
|
task.Remark = c.PostForm("remark")
|
|
|
|
|
|
// 安卓需要获取launch_activity
|
|
|
if task.Platform == "adr" {
|
|
|
if c.PostForm("launch_activity") == "" {
|
|
|
fmt.Println("从接口请求producct信息")
|
|
|
product, err := common.GetProduct(task.Product, task.Platform)
|
|
|
if err != nil {
|
|
|
rsp.Error(err.Error())
|
|
|
c.JSON(http.StatusOK, rsp)
|
|
|
return
|
|
|
}
|
|
|
task.LaunchActivity = product.LaunchActivity
|
|
|
}
|
|
|
// // 表单无传入,接口请求没有数据返回
|
|
|
// if task.LaunchActivity == "" {
|
|
|
// rsp.Error("缺少LaunchActivity")
|
|
|
// c.JSON(http.StatusOK, rsp)
|
|
|
// return
|
|
|
// }
|
|
|
}
|
|
|
if task.PackageURL != "" {
|
|
|
app, e := common.GetBranch(task.PackageName, task.PackageURL)
|
|
|
if e != nil {
|
|
|
fmt.Println(e)
|
|
|
} else {
|
|
|
if task.Branch == "" {
|
|
|
task.Branch = app.Branch
|
|
|
}
|
|
|
if task.Version == "" {
|
|
|
task.Version = app.Version + "_" + app.VersionCode
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
err = task.Check()
|
|
|
if err != nil {
|
|
|
rsp.Error(err.Error())
|
|
|
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)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
rsp.Success()
|
|
|
rsp.Data = task
|
|
|
c.JSON(http.StatusOK, rsp)
|
|
|
|
|
|
// go RunAndroidMonkeyCmd(task, device.Udid)
|
|
|
}
|
|
|
|
|
|
// 根据id查询monkey任务信息,db传nil时会另外新建数据库链接
|
|
|
func getTaskById(id int, db *gorm.DB) (models.MonkeyTask, error) {
|
|
|
var task models.MonkeyTask
|
|
|
if db == nil {
|
|
|
db, err := dbsql.GetConn(dbsql.DSN)
|
|
|
if err != nil {
|
|
|
return task, err
|
|
|
}
|
|
|
defer dbsql.Close(db)
|
|
|
}
|
|
|
db.Table(task.TableName()).Model(models.MonkeyTask{}).Where("id = ?", id).Last(&task)
|
|
|
|
|
|
if task.Id == 0 {
|
|
|
return task, db.Error
|
|
|
}
|
|
|
|
|
|
return task, nil
|
|
|
}
|