mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-18 10:27:37 +08:00
77 lines
1.5 KiB
Go
77 lines
1.5 KiB
Go
package boomer
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"math"
|
|
"os"
|
|
"runtime/pprof"
|
|
"time"
|
|
)
|
|
|
|
func round(val float64, roundOn float64, places int) (newVal float64) {
|
|
var round float64
|
|
pow := math.Pow(10, float64(places))
|
|
digit := pow * val
|
|
_, div := math.Modf(digit)
|
|
if div >= roundOn {
|
|
round = math.Ceil(digit)
|
|
} else {
|
|
round = math.Floor(digit)
|
|
}
|
|
newVal = round / pow
|
|
return
|
|
}
|
|
|
|
// genMD5 returns the md5 hash of strings.
|
|
func genMD5(slice ...string) string {
|
|
h := md5.New()
|
|
for _, v := range slice {
|
|
io.WriteString(h, v)
|
|
}
|
|
return fmt.Sprintf("%x", h.Sum(nil))
|
|
}
|
|
|
|
// startMemoryProfile starts memory profiling and save the results in file.
|
|
func startMemoryProfile(file string, duration time.Duration) (err error) {
|
|
f, err := os.Create(file)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
log.Println("Start memory profiling for", duration)
|
|
time.AfterFunc(duration, func() {
|
|
err = pprof.WriteHeapProfile(f)
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
f.Close()
|
|
log.Println("Stop memory profiling after", duration)
|
|
})
|
|
return nil
|
|
}
|
|
|
|
// startCPUProfile starts cpu profiling and save the results in file.
|
|
func startCPUProfile(file string, duration time.Duration) (err error) {
|
|
f, err := os.Create(file)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
log.Println("Start cpu profiling for", duration)
|
|
err = pprof.StartCPUProfile(f)
|
|
if err != nil {
|
|
f.Close()
|
|
return err
|
|
}
|
|
|
|
time.AfterFunc(duration, func() {
|
|
pprof.StopCPUProfile()
|
|
f.Close()
|
|
log.Println("Stop CPU profiling after", duration)
|
|
})
|
|
return nil
|
|
}
|