实装耗时功能, 现在可以看到每个任务与每个请求的耗时

This commit is contained in:
M09Ic 2022-12-02 18:29:26 +08:00
parent a780f002bf
commit 023e316518
5 changed files with 17 additions and 5 deletions

View File

@ -80,7 +80,7 @@ func NewPool(ctx context.Context, config *pkg.Config) (*Pool, error) {
logs.Log.Error(err.Error())
return
}
start := time.Now()
resp, reqerr := pool.client.Do(pctx, req)
if pool.ClientType == ihttp.FAST {
defer fasthttp.ReleaseResponse(resp.FastResponse)
@ -117,6 +117,7 @@ func NewPool(ctx context.Context, config *pkg.Config) (*Pool, error) {
}
}
bl.Spended = time.Since(start).Milliseconds()
switch unit.source {
case InitRandomSource:
pool.base = bl
@ -320,6 +321,7 @@ Loop:
}
p.wg.Wait()
p.Statistor.ReqNumber = p.reqCount
p.Statistor.EndTime = time.Now().Unix()
p.Close()
}

View File

@ -141,6 +141,7 @@ func (r *Runner) Prepare(ctx context.Context) error {
}
pool.Run(ctx, r.Offset, r.Limit)
logs.Log.Important(pool.Statistor.String())
logs.Log.Important(pool.Statistor.Detail())
if r.StatFile != nil {

View File

@ -72,7 +72,7 @@ type Baseline struct {
RedirectURL string `json:"redirect_url,omitempty"`
FrontURL string `json:"front_url,omitempty"`
Status int `json:"status"`
Spended int `json:"spended"` // 耗时, 毫秒
Spended int64 `json:"spend"` // 耗时, 毫秒
Title string `json:"title"`
Frameworks Frameworks `json:"frameworks"`
Extracteds Extracteds `json:"extracts"`
@ -164,7 +164,7 @@ func (bl *Baseline) Get(key string) string {
case "stat", "status":
return strconv.Itoa(bl.Status)
case "spend":
return strconv.Itoa(bl.Spended)
return strconv.Itoa(int(bl.Spended))
case "extract":
return bl.Extracteds.String()
case "frame", "framework":
@ -240,6 +240,8 @@ func (bl *Baseline) String() string {
line.WriteString(strconv.Itoa(bl.Status))
line.WriteString(" - ")
line.WriteString(strconv.Itoa(bl.BodyLength))
line.WriteString(" - ")
line.WriteString(strconv.Itoa(int(bl.Spended)) + "ms")
line.WriteString(bl.Additional("title"))
line.WriteString(bl.Frameworks.String())
line.WriteString(bl.Extracteds.String())

View File

@ -5,12 +5,14 @@ import (
"fmt"
"strconv"
"strings"
"time"
)
var DefaultStatistor Statistor
func NewStatistor(url string) *Statistor {
stat := DefaultStatistor
stat.StartTime = time.Now().Unix()
stat.Counts = make(map[int]int)
stat.BaseUrl = url
return &stat
@ -29,13 +31,15 @@ type Statistor struct {
End int `json:"end"`
Offset int `json:"offset"`
Total int `json:"total"`
StartTime int64 `json:"start_time"`
EndTime int64 `json:"end_time"`
Word string `json:"word"`
Dictionaries []string `json:"dictionaries"`
}
func (stat *Statistor) String() string {
var s strings.Builder
s.WriteString(fmt.Sprintf("[stat] %s request total: %d, found: %d, check: %d, failed: %d", stat.BaseUrl, stat.ReqNumber, stat.FoundNumber, stat.CheckNumber, stat.FailedNumber))
s.WriteString(fmt.Sprintf("[stat] %s took %d s, request total: %d, found: %d, check: %d, failed: %d", stat.BaseUrl, stat.EndTime-stat.StartTime, stat.ReqNumber, stat.FoundNumber, stat.CheckNumber, stat.FailedNumber))
if stat.FuzzyNumber != 0 {
s.WriteString(", fuzzy: " + strconv.Itoa(stat.FuzzyNumber))
@ -54,6 +58,9 @@ func (stat *Statistor) Detail() string {
s.WriteString("[stat] ")
s.WriteString(stat.BaseUrl)
for k, v := range stat.Counts {
if k == 0 {
continue
}
s.WriteString(fmt.Sprintf(" %d: %d,", k, v))
}
return s.String()