mirror of
https://github.com/cubixle/l1.git
synced 2026-04-24 22:54:47 +01:00
91 lines
1.9 KiB
Go
91 lines
1.9 KiB
Go
package l1
|
|
|
|
import "fmt"
|
|
|
|
type results struct {
|
|
Target string
|
|
Results []*Result
|
|
|
|
totalCompletedTime float64
|
|
successfulCount int
|
|
errorCount int
|
|
}
|
|
|
|
type Result struct {
|
|
// CompletedIn is in seconds
|
|
RunTime int64
|
|
CompletedIn float64
|
|
Error error
|
|
StatusCode int
|
|
}
|
|
|
|
func (r *results) RequestPerSecond() float64 {
|
|
totalCompletedIn := r.CompletedTime() / 1000
|
|
return float64(len(r.Results)) / totalCompletedIn
|
|
}
|
|
|
|
func (r *results) PeakResponseTime() {
|
|
|
|
}
|
|
|
|
func (r *results) ErrorCount() int {
|
|
if r.errorCount > 0 {
|
|
return r.errorCount
|
|
}
|
|
for _, res := range r.Results {
|
|
if res.Error == nil {
|
|
continue
|
|
}
|
|
r.errorCount++
|
|
}
|
|
return r.errorCount
|
|
}
|
|
|
|
func (r *results) SuccessfulCount() int {
|
|
if r.successfulCount > 0 {
|
|
return r.successfulCount
|
|
}
|
|
for _, res := range r.Results {
|
|
if res.Error != nil {
|
|
continue
|
|
}
|
|
r.successfulCount++
|
|
}
|
|
return r.successfulCount
|
|
}
|
|
|
|
func (r *results) AvgResponseTime() float64 {
|
|
totalCompletedIn := r.CompletedTime()
|
|
|
|
return totalCompletedIn / float64(len(r.Results))
|
|
}
|
|
|
|
func (r *results) CompletedTime() float64 {
|
|
if r.totalCompletedTime > 0 {
|
|
return r.totalCompletedTime
|
|
}
|
|
|
|
for _, res := range r.Results {
|
|
if res.Error != nil {
|
|
continue
|
|
}
|
|
r.totalCompletedTime += res.CompletedIn
|
|
}
|
|
return r.totalCompletedTime
|
|
}
|
|
|
|
func (r *results) Print() {
|
|
fmt.Println("-----------------------------------------------------------")
|
|
fmt.Println("| L1 load tester.")
|
|
fmt.Println("| Default result printer.")
|
|
fmt.Println("-----------------------------------------------------------")
|
|
fmt.Println("")
|
|
fmt.Printf("Load testing %s\n", r.Target)
|
|
fmt.Println("")
|
|
fmt.Printf("Request per second: %.2f\n", r.RequestPerSecond())
|
|
fmt.Printf("Average response time: %.0f ms\n", r.AvgResponseTime())
|
|
fmt.Printf("Success count: %d\n", r.SuccessfulCount())
|
|
fmt.Printf("Error count: %d\n", r.ErrorCount())
|
|
fmt.Println("")
|
|
}
|