go-common/app/admin/ep/melloi/http/ptest.go

244 lines
6.1 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package http
import (
"encoding/json"
"go-common/app/admin/ep/melloi/model"
"go-common/app/admin/ep/melloi/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/binding"
)
//excute performTest
func doPtest(c *bm.Context) {
var (
script model.Script
ptestParam model.DoPtestParam
)
userName := c.Request.Form.Get("userName")
param := c.Request.Form.Get("param")
resJtl := c.Request.Form.Get("resJtl")
jmeterLog := c.Request.Form.Get("jmeterLog")
cookie := c.Request.Header.Get("Cookie")
if err := json.Unmarshal([]byte(param), &script); err != nil {
log.Error("sorry,script err(%v)", err)
c.JSON(nil, err)
return
}
log.Info("接口名:(%s),压测脚本路径:(%s)", script.TestName, script.SavePath)
if script.Upload {
testNames := service.QueryTestNamesByJmfile(script.SavePath)
ptestParam = model.DoPtestParam{
TestNames: testNames,
FileName: script.SavePath,
LoadTime: 1800,
UserName: userName,
Upload: true,
ProjectName: script.ProjectName,
FileSplit: script.FileSplit,
SplitNum: script.SplitNum,
APIHeader: script.APIHeader,
}
} else {
ptestParam = model.DoPtestParam{
TestNames: service.StringToSlice(script.TestName),
FileName: script.SavePath,
LoadTime: script.LoadTime,
UserName: userName,
URL: script.URL,
FileSplit: script.FileSplit,
SplitNum: script.SplitNum,
APIHeader: script.APIHeader,
}
}
ptestParam.Department = script.Department
ptestParam.Project = script.Project
ptestParam.APP = script.App
ptestParam.Domain = script.Domain
ptestParam.Cookie = cookie
ptestParam.JmeterLog = jmeterLog
ptestParam.ResJtl = resJtl
ptestParam.ScriptID = script.ID
ptestParam.UseBusinessStop = script.UseBusinessStop
ptestParam.BusinessStopPercent = script.BusinessStopPercent
ptestParam.Fusing = script.Fusing
c.JSON(srv.DoPtest(c, ptestParam))
}
//addPtest 加压
func addPtest(c *bm.Context) {
var ptestAdd model.PtestAdd
if err := c.BindWith(&ptestAdd, binding.Form); err != nil {
c.JSON(nil, err)
return
}
log.Info("AddPtest ----")
c.JSON(nil, srv.AddPtest(c, ptestAdd))
}
//stopPtest
func stopPtest(c *bm.Context) {
var ptestJob model.PtestJob
if err := c.BindWith(&ptestJob, binding.Form); err != nil {
c.JSON(nil, err)
return
}
c.JSON(nil, srv.StopPtest(c, ptestJob))
}
//stopAllPtest
func stopAllPtest(c *bm.Context) {
var allPtestStop model.AllPtestStop
if err := c.BindWith(&allPtestStop, binding.Form); err != nil {
c.JSON(nil, err)
return
}
c.JSON(srv.QueryOrStopAllPtestByJobName(c, allPtestStop.ReportSuID, true, 3))
}
//reducePtest
func reducePtest(c *bm.Context) {
var (
reducePtest model.ReducePtest
resMap = make(map[string]interface{})
)
if err := c.BindWith(&reducePtest, binding.Form); err != nil {
c.JSON(nil, err)
return
}
message, err := srv.ReducePtest(c, reducePtest)
if err != nil {
return
}
resMap["message"] = message
c.JSON(resMap, err)
}
//queryAllJob
func queryAllJob(c *bm.Context) {
var (
ptestJob model.PtestJob
resMap = make(map[string]interface{})
)
if err := c.BindWith(&ptestJob, binding.Form); err != nil {
c.JSON(nil, err)
return
}
ptestJobs, err := srv.QueryOrStopAllPtestByJobName(c, ptestJob.ReportSuID, false, 3)
if err != nil {
log.Error("query ptestJob err", err)
return
}
resMap["ptest_jobs"] = ptestJobs
c.JSON(resMap, err)
}
//queryAllJobFree queryAll JobFree
func queryAllJobFree(c *bm.Context) {
var (
ptestJob model.PtestJob
resMap = make(map[string]interface{})
)
if err := c.BindWith(&ptestJob, binding.Form); err != nil {
c.JSON(nil, err)
return
}
ptestJobs, err := srv.QueryAllJobFree(c, &ptestJob)
if err != nil {
log.Error("query ptestJob err", err)
return
}
resMap["ptest_jobs"] = ptestJobs
c.JSON(resMap, err)
}
//doDebug
func doDebug(c *bm.Context) {
var script model.Script
var ptestParam model.DoPtestParam
param := c.Request.Form.Get("param")
userName := c.Request.Form.Get("userName")
if err := json.Unmarshal([]byte(param), &script); err != nil {
log.Error("sorry,script err(%v)", err)
c.JSON(nil, err)
return
}
log.Info("接口名:(%s),压测脚本路径:(%s)", script.TestName, script.SavePath)
if script.Upload {
ptestParam = model.DoPtestParam{
TestNames: service.QueryTestNamesByJmfile(script.SavePath),
FileName: script.SavePath,
LoadTime: 1800,
UserName: userName,
Upload: true,
ProjectName: script.ProjectName,
ResJtl: script.ResJtl,
JmeterLog: script.JmeterLog,
Department: script.Department,
Project: script.Project,
APP: script.App,
ScriptID: script.ID,
}
} else {
ptestParam = model.DoPtestParam{
TestNames: service.StringToSlice(script.TestName),
FileName: script.SavePath,
LoadTime: script.LoadTime,
UserName: userName,
ResJtl: script.ResJtl,
JmeterLog: script.JmeterLog,
Department: script.Department,
Project: script.Project,
APP: script.App,
ScriptID: script.ID,
Domain: script.Domain,
}
}
c.JSON(srv.DoPtest(c, ptestParam))
}
func doPtestByFile(c *bm.Context) {
var script model.Script
if err := c.BindWith(&script, binding.JSON); err != nil {
c.JSON(nil, err)
return
}
resJtl := script.ResJtl
jmeterLog := script.JmeterLog
script.ResJtl = ""
script.JmeterLog = ""
resp, err := srv.DoPtestByFile(c, script, resJtl, jmeterLog)
if err != nil {
c.JSON(err, nil)
return
}
c.JSON(resp, err)
}
//excute batch ptest
func doPtestBatch(c *bm.Context) {
var PtestBatch model.PtestBatch
if err := c.BindWith(&PtestBatch, binding.JSON); err != nil {
c.JSON(nil, err)
return
}
cookie := c.Request.Header.Get("Cookie")
status, _ := srv.DoPtestArr(c, PtestBatch, cookie)
var doPostMap = make(map[string]string)
doPostMap["status"] = status
c.JSON(doPostMap, nil)
}
//doPtestByScriptId
func doPtestByScriptId(c *bm.Context) {
var script model.Script
if err := c.BindWith(&script, binding.Form); err != nil {
c.JSON(nil, err)
return
}
cookie := c.Request.Header.Get("Cookie")
executor := c.Request.Form.Get("executor")
c.JSON(srv.DoPtestByScriptId(c, &script, cookie, executor))
}