feat: 异常收集接口、自动提单
parent
acad2ac97a
commit
4dbbce488e
@ -0,0 +1,33 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"autogo/global"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MonkeyAnomaly struct {
|
||||||
|
global.MODEL
|
||||||
|
TaskId int `json:"task_id"`
|
||||||
|
Udid string `json:"udid"`
|
||||||
|
AnomalyInfos string `json:"-" gorm:"anomaly_infos"`
|
||||||
|
Anomalies []string `json:"anomalies" gorm:"-"`
|
||||||
|
CoverdPages string `json:"coverd_pages"`
|
||||||
|
Logs string `json:"logs"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MonkeyAnomaly) TableName() string {
|
||||||
|
return "monkey_anomalies"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MonkeyAnomaly) JsonReady() {
|
||||||
|
var strs []string
|
||||||
|
if len(m.AnomalyInfos) > 3 {
|
||||||
|
err := json.Unmarshal([]byte(m.AnomalyInfos), &strs)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[JsonReady]", "序列化失败")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
m.Anomalies = strs
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,231 +1,255 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"autogo/common"
|
"autogo/common"
|
||||||
"autogo/dbsql"
|
"autogo/dbsql"
|
||||||
"autogo/device"
|
"autogo/device"
|
||||||
"autogo/models"
|
"autogo/models"
|
||||||
"autogo/monkey"
|
"autogo/monkey"
|
||||||
"fmt"
|
"autogo/test"
|
||||||
"net/http"
|
"fmt"
|
||||||
"os/exec"
|
"net/http"
|
||||||
"strings"
|
"os/exec"
|
||||||
"time"
|
"strings"
|
||||||
|
"time"
|
||||||
"github.com/imroc/req/v3"
|
|
||||||
)
|
"github.com/imroc/req/v3"
|
||||||
|
"github.com/spf13/cast"
|
||||||
func main() {
|
)
|
||||||
buglyHelper()
|
|
||||||
return
|
func main() {
|
||||||
cmd := exec.Command("docker", "ps")
|
test.GetMonkeyResult()
|
||||||
output, err := cmd.Output()
|
return
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
db, err := dbsql.GetConn(dbsql.DSN_local)
|
||||||
return
|
if err != nil {
|
||||||
}
|
return
|
||||||
|
}
|
||||||
lines := strings.Split(string(output), "\n")
|
defer dbsql.Close(db)
|
||||||
for i, line := range lines {
|
var list []models.MonkeyTask
|
||||||
if i == 0 {
|
db.Model(models.MonkeyTask{}).Where("crash_count > 0 AND is_del = 0").Find(&list)
|
||||||
continue // skip header line
|
str := ""
|
||||||
}
|
for _, v := range list {
|
||||||
fields := strings.Fields(line)
|
str += "\"" + cast.ToString(v.Id) + "\" "
|
||||||
if len(fields) >= 7 {
|
}
|
||||||
fmt.Printf("Container ID: %s, Name: %s\n", fields[0], fields[len(fields)-1])
|
fmt.Println(str)
|
||||||
getRuntime(fields[0])
|
|
||||||
}
|
return
|
||||||
}
|
buglyHelper()
|
||||||
fmt.Println("end")
|
return
|
||||||
}
|
cmd := exec.Command("docker", "ps")
|
||||||
|
output, err := cmd.Output()
|
||||||
func buglyHelper() {
|
if err != nil {
|
||||||
var rsp BuglyRsp
|
fmt.Println(err)
|
||||||
url := `https://bugly.qq.com/v2/search?start=0&userSearchPage=%2Fv2%2Fworkbench%2Fapps&pid=2&platformId=2&date=last_7_day&sortOrder=desc&useSearchTimes=2&rows=10&sortField=matchCount&appId=447d39aea1&fsn=f0726b64-a3ac-4e0d-a89d-c9148c82a5e6`
|
return
|
||||||
client := req.C().
|
}
|
||||||
SetTimeout(5 * time.Second)
|
|
||||||
resp, err := client.R().
|
lines := strings.Split(string(output), "\n")
|
||||||
SetCookies(cookies()...).
|
for i, line := range lines {
|
||||||
SetHeader("X-Token", "536325371").
|
if i == 0 {
|
||||||
SetHeader("Accept", "application/json;charset=utf-8").
|
continue // skip header line
|
||||||
SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36").
|
}
|
||||||
// SetHeader("Cookie", "ptui_loginuin=188107463; RK=vOtUmiA9WS; ptcz=d265861b48af6f48ea0f924ded6af2b654f74146c1dc4d8632cb48e67edf7484; _ga=GA1.2.1584569153.1684823271; _qpsvr_localtk=0.9318772864960871; token-skey=b9694495-0a28-882a-01f9-d038d9e43bc7; token-lifeTime=1686922095; bugly-session=s:xz-9qL2pRzO3Mz8Wu_I7Svl2SLCWJfLE.MqN7buOfwmbUlRkdLauxXaddtaS3lebknTnCdPQOmtw; referrer=eyJpdiI6IkFcLzJDUTlValNtS0lUaGRFdkg3d2pRPT0iLCJ2YWx1ZSI6Ims4YUp6cUxyZlc0N25hOEJ2QWpZUlZQa2RKc1o3N3RiRHZXVVI1MlJLZ1RrSEtaQ2VmY1BtNEhMUjg4QjJSaExnc05cLzdiaGc2SHFtOTgzdnljMmlxUjd3d0FNZWdZdFwvNjdsT2ZYaG84M21Yd25FV1N0UTJyZTd3TDBId3hiQzNhN1wvS2RTZ1ZvdVFDYStKeEIrcGNnWWs1bno3dHdjTkVWdHIrYmRYTWNUb3Z1UGVvMXdoSE50djJBZ05hZ2pXUiIsIm1hYyI6IjgwNDI0ZjI2MjI0ZDFhMDA3MjBhYjQ4MWIwYjJiZTIzY2U5YjNkZjYyNGFkNTA5NGFjN2U4Y2U3ZTQwMDVlYWQifQ==; bugly_session=eyJpdiI6IjNmQzhJamU1cUlVd08yZHdWMkpTcmc9PSIsInZhbHVlIjoiZ3dFUXZUWmZ6XC8rbTZITG1DRVdrdDUrM1p0RE5nemgzeVhJa2huYWhieVB4SVFRMnlyWFFCU2JCQVpmRHNRQjdubnhhRWVJcUd3OEdzSk1zKzF2WGt3PT0iLCJtYWMiOiIwZjc4MGFmMDk1YzUyZTQ4Zjc5MjcwMDMyNGUzNmMxYjE5MjRlNTQ2MjliMzA3NmQyMGVjODRiZDgyMDU2NGQ1In0=").
|
fields := strings.Fields(line)
|
||||||
SetHeader("Accept", "application/json;charset=utf-8").
|
if len(fields) >= 7 {
|
||||||
SetHeader("Accept-Encoding", "gzip, deflate, br").
|
fmt.Printf("Container ID: %s, Name: %s\n", fields[0], fields[len(fields)-1])
|
||||||
SetHeader("Accept-Language", "zh-CN,zh;q=0.9").
|
getRuntime(fields[0])
|
||||||
SetHeader("Connection", "keep-alive").
|
}
|
||||||
SetSuccessResult(&rsp).
|
}
|
||||||
// SetResult(&rsp).
|
fmt.Println("end")
|
||||||
Get(url)
|
}
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
func buglyHelper() {
|
||||||
return
|
var rsp BuglyRsp
|
||||||
}
|
url := `https://bugly.qq.com/v2/search?start=0&userSearchPage=%2Fv2%2Fworkbench%2Fapps&pid=2&platformId=2&date=last_7_day&sortOrder=desc&useSearchTimes=3&rows=10&sortField=matchCount&appId=447d39aea1&fsn=8799e426-34c8-4a75-bd0d-1e186509eb5e`
|
||||||
if resp.IsErrorState() {
|
client := req.C().
|
||||||
fmt.Println(resp.StatusCode)
|
SetTimeout(5 * time.Second)
|
||||||
return
|
resp, err := client.R().
|
||||||
}
|
SetCookies(cookies()...).
|
||||||
fmt.Println(len(rsp.Ret.IssueList))
|
SetHeader("X-Token", "957369952").
|
||||||
}
|
SetHeader("Accept", "application/json;charset=utf-8").
|
||||||
|
SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36").
|
||||||
func cookies() []*http.Cookie {
|
// SetHeader("Cookie", "bugly-session=s%3AqQZzQXsgw0wv_lFKAOT88ND_yh_B1f6H.au%2F78LCSHj5zhwqe%2FljmOXGP7TBW3yHnMwypYesrn34;bugly_session=eyJpdiI6InV1R3R0TmZ2S01HTkVBSGpucThXZXc9PSIsInZhbHVlIjoiam1lM3o1cVJISjNyZVJ6U3JJYzhmK1M1UVJiUlhCS1wvRTh6T1d4XC93NDdiY3FITVNJQXRpVFd6Y1BBV1wvZTBhOWR0MHBxNTlRdGNYdExoS2VWK2swckE9PSIsIm1hYyI6IjliMDExNTdmMzgyODFmNTEyYzVmMGQ3MGMxYTdjOTZmMDNjYzVjYzlkYzcxMmVjNmUyMzk4YWE2OTRmNzY4NzAifQ%3D%3D;").
|
||||||
var cookies []*http.Cookie
|
SetHeader("Accept", "application/json;charset=utf-8").
|
||||||
var c1 http.Cookie
|
SetHeader("Accept-Encoding", "gzip, deflate, br").
|
||||||
c1.Name = "bugly-session"
|
SetHeader("Accept-Language", "zh-CN,zh;q=0.9").
|
||||||
c1.Value = "s:xz-9qL2pRzO3Mz8Wu_I7Svl2SLCWJfLE.MqN7buOfwmbUlRkdLauxXaddtaS3lebknTnCdPQOmtw"
|
SetHeader("Connection", "keep-alive").
|
||||||
cookies = append(cookies, &c1)
|
SetSuccessResult(&rsp).
|
||||||
|
// SetResult(&rsp).
|
||||||
var c3 http.Cookie
|
Get(url)
|
||||||
c3.Name = "bugly_session"
|
if err != nil {
|
||||||
c3.Value = "eyJpdiI6IlpuTkc5aXcwRHdUR1JGdDhIUmJMbGc9PSIsInZhbHVlIjoiRTZhVmxya3R3Sjl6UzBKQjRLa0EyNXlVV0lVYlNWVnpvVWFrbzVRS0k5am9UK3Y2MHN5czc3XC9JV0ZJNCtBQkdBbW4rZFh5RmFrcWYzODhOanV0OE9BPT0iLCJtYWMiOiI2MmJlYTI2MWE0M2U4NTFlNjJhYzkwZTAyOTQ3MTgxZmYwMTc0ZGJjOGE4MTE0ZjQ1Y2VmN2I5NjJkYTk2ZGY5In0="
|
fmt.Println(err)
|
||||||
cookies = append(cookies, &c3)
|
return
|
||||||
return cookies
|
}
|
||||||
}
|
if resp.IsErrorState() {
|
||||||
|
fmt.Println(resp.StatusCode)
|
||||||
func getRuntime(containerID string) {
|
return
|
||||||
|
}
|
||||||
// 执行 docker inspect 命令获取容器创建时间
|
if len(rsp.Ret.IssueList) > 0 {
|
||||||
cmd := exec.Command("docker", "inspect", "-f", "{{.Created}}", containerID)
|
fmt.Println(len(rsp.Ret.IssueList))
|
||||||
output, err := cmd.Output()
|
} else {
|
||||||
if err != nil {
|
fmt.Println(resp.String())
|
||||||
fmt.Println(err)
|
}
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 将输出结果转换为时间格式
|
func cookies() []*http.Cookie {
|
||||||
createdTime, err := time.Parse(time.RFC3339Nano, strings.TrimSpace(string(output)))
|
var cookies []*http.Cookie
|
||||||
if err != nil {
|
// var c1 http.Cookie
|
||||||
fmt.Println(err)
|
// c1.Name = "bugly-session"
|
||||||
return
|
// c1.Value = "s:qQZzQXsgw0wv_lFKAOT88ND_yh_B1f6H.au/78LCSHj5zhwqe/ljmOXGP7TBW3yHnMwypYesrn34"
|
||||||
}
|
// cookies = append(cookies, &c1)
|
||||||
|
|
||||||
// 计算容器已经运行的时间
|
var c3 http.Cookie
|
||||||
uptime := time.Since(createdTime)
|
c3.Name = "bugly_session"
|
||||||
|
c3.Value = "eyJpdiI6InV1R3R0TmZ2S01HTkVBSGpucThXZXc9PSIsInZhbHVlIjoiam1lM3o1cVJISjNyZVJ6U3JJYzhmK1M1UVJiUlhCS1wvRTh6T1d4XC93NDdiY3FITVNJQXRpVFd6Y1BBV1wvZTBhOWR0MHBxNTlRdGNYdExoS2VWK2swckE9PSIsIm1hYyI6IjliMDExNTdmMzgyODFmNTEyYzVmMGQ3MGMxYTdjOTZmMDNjYzVjYzlkYzcxMmVjNmUyMzk4YWE2OTRmNzY4NzAifQ=="
|
||||||
// 将容器运行时间转换为秒级时间戳输出
|
cookies = append(cookies, &c3)
|
||||||
uptimeInSeconds := int64(uptime.Seconds())
|
return cookies
|
||||||
fmt.Printf("Container %s has been running for %d seconds\n", containerID, uptimeInSeconds)
|
}
|
||||||
}
|
|
||||||
|
func getRuntime(containerID string) {
|
||||||
func sib() {
|
|
||||||
if device.CheckSib() {
|
// 执行 docker inspect 命令获取容器创建时间
|
||||||
fmt.Println("sib已安装")
|
cmd := exec.Command("docker", "inspect", "-f", "{{.Created}}", containerID)
|
||||||
fmt.Println(device.GetIOSDevices())
|
output, err := cmd.Output()
|
||||||
} else {
|
if err != nil {
|
||||||
fmt.Println("sib未安装")
|
fmt.Println(err)
|
||||||
}
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func tmp1() {
|
// 将输出结果转换为时间格式
|
||||||
dbsql.DSN = dbsql.DSN_local
|
createdTime, err := time.Parse(time.RFC3339Nano, strings.TrimSpace(string(output)))
|
||||||
db, err := dbsql.GetConn(dbsql.DSN)
|
if err != nil {
|
||||||
if err != nil {
|
fmt.Println(err)
|
||||||
fmt.Println(err)
|
return
|
||||||
return
|
}
|
||||||
}
|
|
||||||
defer dbsql.Close(db)
|
// 计算容器已经运行的时间
|
||||||
var task models.MonkeyTask
|
uptime := time.Since(createdTime)
|
||||||
db.Last(&task)
|
|
||||||
common.PushMonkeyResult(task)
|
// 将容器运行时间转换为秒级时间戳输出
|
||||||
return
|
uptimeInSeconds := int64(uptime.Seconds())
|
||||||
// dbsql.DSN = dbsql.DSN_local
|
fmt.Printf("Container %s has been running for %d seconds\n", containerID, uptimeInSeconds)
|
||||||
// db, err := dbsql.GetConn(dbsql.DSN)
|
}
|
||||||
// if err != nil {
|
|
||||||
// fmt.Println(err)
|
func sib() {
|
||||||
// return
|
if device.CheckSib() {
|
||||||
// }
|
fmt.Println("sib已安装")
|
||||||
// defer dbsql.Close(db)
|
fmt.Println(device.GetIOSDevices())
|
||||||
|
} else {
|
||||||
var list []models.MonkeyTask
|
fmt.Println("sib未安装")
|
||||||
db.Model(models.MonkeyTask{}).Order("id DESC").Find(&list)
|
}
|
||||||
for _, v := range list {
|
}
|
||||||
if v.PackageURL != "" {
|
|
||||||
app, err := common.GetBranch(v.PackageName, v.PackageURL)
|
func tmp1() {
|
||||||
if err != nil {
|
dbsql.DSN = dbsql.DSN_local
|
||||||
fmt.Println(v.Id, "-", err, "||", v.PackageURL)
|
db, err := dbsql.GetConn(dbsql.DSN)
|
||||||
err = nil
|
if err != nil {
|
||||||
} else {
|
fmt.Println(err)
|
||||||
fmt.Println(v.Id, "-", app.Branch)
|
return
|
||||||
db.Model(models.MonkeyTask{}).Where("id = ?", v.Id).Update("version", app.Version+"_"+app.VersionCode)
|
}
|
||||||
}
|
defer dbsql.Close(db)
|
||||||
}
|
var task models.MonkeyTask
|
||||||
}
|
db.Last(&task)
|
||||||
}
|
common.PushMonkeyResult(task)
|
||||||
|
return
|
||||||
func Dir() {
|
// dbsql.DSN = dbsql.DSN_local
|
||||||
err := monkey.CreateDir("files")
|
// db, err := dbsql.GetConn(dbsql.DSN)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
fmt.Println(err)
|
// fmt.Println(err)
|
||||||
}
|
// return
|
||||||
err = monkey.CreateDir("files/1")
|
// }
|
||||||
if err != nil {
|
// defer dbsql.Close(db)
|
||||||
fmt.Println(err)
|
|
||||||
}
|
var list []models.MonkeyTask
|
||||||
err = monkey.CreateAndWriteFile("files/1/2.txt", []byte("hidiuniduini"))
|
db.Model(models.MonkeyTask{}).Order("id DESC").Find(&list)
|
||||||
if err != nil {
|
for _, v := range list {
|
||||||
fmt.Println(err)
|
if v.PackageURL != "" {
|
||||||
}
|
app, err := common.GetBranch(v.PackageName, v.PackageURL)
|
||||||
}
|
if err != nil {
|
||||||
|
fmt.Println(v.Id, "-", err, "||", v.PackageURL)
|
||||||
type BuglyRsp struct {
|
err = nil
|
||||||
Status int `json:"status"`
|
} else {
|
||||||
Msg string `json:"msg"`
|
fmt.Println(v.Id, "-", app.Branch)
|
||||||
Ret struct {
|
db.Model(models.MonkeyTask{}).Where("id = ?", v.Id).Update("version", app.Version+"_"+app.VersionCode)
|
||||||
AppID string `json:"appId"`
|
}
|
||||||
PlatformID string `json:"platformId"`
|
}
|
||||||
IssueList []struct {
|
}
|
||||||
IssueID int `json:"issueId"`
|
}
|
||||||
IssueHash string `json:"issueHash"`
|
|
||||||
IssueCount int `json:"issueCount"`
|
func Dir() {
|
||||||
CrashInfo struct {
|
err := monkey.CreateDir("files")
|
||||||
CrashID string `json:"crashId"`
|
if err != nil {
|
||||||
TagID int `json:"tagId"`
|
fmt.Println(err)
|
||||||
} `json:"crashInfo"`
|
}
|
||||||
IssueVersions []struct {
|
err = monkey.CreateDir("files/1")
|
||||||
Version string `json:"version"`
|
if err != nil {
|
||||||
Count int `json:"count"`
|
fmt.Println(err)
|
||||||
DeviceCount int `json:"deviceCount"`
|
}
|
||||||
} `json:"issueVersions"`
|
err = monkey.CreateAndWriteFile("files/1/2.txt", []byte("hidiuniduini"))
|
||||||
FtName string `json:"ftName"`
|
if err != nil {
|
||||||
IssueDocMap struct {
|
fmt.Println(err)
|
||||||
ID string `json:"id"`
|
}
|
||||||
IssueID int `json:"issueId"`
|
}
|
||||||
Status int `json:"status"`
|
|
||||||
Count int `json:"count"`
|
type BuglyRsp struct {
|
||||||
SysCount int `json:"sysCount"`
|
Status int `json:"status"`
|
||||||
ProductVersion string `json:"productVersion"`
|
Msg string `json:"msg"`
|
||||||
DeviceCount int `json:"deviceCount"`
|
Ret struct {
|
||||||
SysDeviceCount int `json:"sysDeviceCount"`
|
AppID string `json:"appId"`
|
||||||
LastUpdateTime string `json:"lastUpdateTime"`
|
PlatformID string `json:"platformId"`
|
||||||
FirstUploadTime string `json:"firstUploadTime"`
|
IssueList []struct {
|
||||||
LastUploadTime string `json:"lastUploadTime"`
|
IssueID int `json:"issueId"`
|
||||||
ExpName string `json:"expName"`
|
IssueHash string `json:"issueHash"`
|
||||||
ExpFingure string `json:"expFingure"`
|
IssueCount int `json:"issueCount"`
|
||||||
IsSystemStack int `json:"isSystemStack"`
|
CrashInfo struct {
|
||||||
KeyStack string `json:"keyStack"`
|
CrashID string `json:"crashId"`
|
||||||
Type string `json:"type"`
|
TagID int `json:"tagId"`
|
||||||
AverageBattery float64 `json:"averageBattery"`
|
} `json:"crashInfo"`
|
||||||
AverageMemory float64 `json:"averageMemory"`
|
IssueVersions []struct {
|
||||||
AverageSD float64 `json:"averageSD"`
|
Version string `json:"version"`
|
||||||
AverageStorage float64 `json:"averageStorage"`
|
Count int `json:"count"`
|
||||||
CrossVersionIssueID int `json:"crossVersionIssueId"`
|
DeviceCount int `json:"deviceCount"`
|
||||||
VersionIssueIds []int `json:"versionIssueIds"`
|
} `json:"issueVersions"`
|
||||||
SubIssueVersions string `json:"subIssueVersions"`
|
FtName string `json:"ftName"`
|
||||||
ExpMessage string `json:"expMessage"`
|
IssueDocMap struct {
|
||||||
RootCount int `json:"rootCount"`
|
ID string `json:"id"`
|
||||||
SysRootCount int `json:"sysRootCount"`
|
IssueID int `json:"issueId"`
|
||||||
ExpAddr string `json:"expAddr"`
|
Status int `json:"status"`
|
||||||
RefSdkAppID string `json:"refSdkAppId"`
|
Count int `json:"count"`
|
||||||
RefSdkIssueID string `json:"refSdkIssueId"`
|
SysCount int `json:"sysCount"`
|
||||||
CrashRecordCount int `json:"crashRecordCount"`
|
ProductVersion string `json:"productVersion"`
|
||||||
} `json:"issueDocMap"`
|
DeviceCount int `json:"deviceCount"`
|
||||||
CrossVersionIssueID int `json:"crossVersionIssueId"`
|
SysDeviceCount int `json:"sysDeviceCount"`
|
||||||
EsCount int `json:"esCount"`
|
LastUpdateTime string `json:"lastUpdateTime"`
|
||||||
EsDeviceCount int `json:"esDeviceCount"`
|
FirstUploadTime string `json:"firstUploadTime"`
|
||||||
} `json:"issueList"`
|
LastUploadTime string `json:"lastUploadTime"`
|
||||||
NumFound int `json:"numFound"`
|
ExpName string `json:"expName"`
|
||||||
CrashNums int `json:"crashNums"`
|
ExpFingure string `json:"expFingure"`
|
||||||
AnrNums int `json:"anrNums"`
|
IsSystemStack int `json:"isSystemStack"`
|
||||||
ErrorNums int `json:"errorNums"`
|
KeyStack string `json:"keyStack"`
|
||||||
} `json:"ret"`
|
Type string `json:"type"`
|
||||||
}
|
AverageBattery float64 `json:"averageBattery"`
|
||||||
|
AverageMemory float64 `json:"averageMemory"`
|
||||||
|
AverageSD float64 `json:"averageSD"`
|
||||||
|
AverageStorage float64 `json:"averageStorage"`
|
||||||
|
CrossVersionIssueID int `json:"crossVersionIssueId"`
|
||||||
|
VersionIssueIds []int `json:"versionIssueIds"`
|
||||||
|
SubIssueVersions string `json:"subIssueVersions"`
|
||||||
|
ExpMessage string `json:"expMessage"`
|
||||||
|
RootCount int `json:"rootCount"`
|
||||||
|
SysRootCount int `json:"sysRootCount"`
|
||||||
|
ExpAddr string `json:"expAddr"`
|
||||||
|
RefSdkAppID string `json:"refSdkAppId"`
|
||||||
|
RefSdkIssueID string `json:"refSdkIssueId"`
|
||||||
|
CrashRecordCount int `json:"crashRecordCount"`
|
||||||
|
} `json:"issueDocMap"`
|
||||||
|
CrossVersionIssueID int `json:"crossVersionIssueId"`
|
||||||
|
EsCount int `json:"esCount"`
|
||||||
|
EsDeviceCount int `json:"esDeviceCount"`
|
||||||
|
} `json:"issueList"`
|
||||||
|
NumFound int `json:"numFound"`
|
||||||
|
CrashNums int `json:"crashNums"`
|
||||||
|
AnrNums int `json:"anrNums"`
|
||||||
|
ErrorNums int `json:"errorNums"`
|
||||||
|
} `json:"ret"`
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue