Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 22 additions & 18 deletions pkg/loadRequest/dns.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,33 +35,33 @@ type DnsRequestData struct {
DnsServerAddr string
PerRequestTimeoutInMs int
Qps int
DurationInMs int
DurationInSecond int
}

// ------------------

type DelayMetric struct {
// Mean is the mean request latency.
Mean time.Duration `json:"mean"`
Mean string `json:"mean"`
// P50 is the 50th percentile request latency.
P50 time.Duration `json:"50th"`
P50 string `json:"50th"`
// P90 is the 90th percentile request latency.
P90 time.Duration `json:"90th"`
P90 string `json:"90th"`
// P95 is the 95th percentile request latency.
P95 time.Duration `json:"95th"`
P95 string `json:"95th"`
// P99 is the 99th percentile request latency.
P99 time.Duration `json:"99th"`
P99 string `json:"99th"`
// Max is the maximum observed request latency.
Max time.Duration `json:"max"`
Max string `json:"max"`
// Min is the minimum observed request latency.
Min time.Duration `json:"min"`
Min string `json:"min"`
}

// final metric
type DnsMetrics struct {
StartTime time.Time
EndTime time.Time
Duration time.Duration
Duration string

TargetDomain string
DnsServer string
Expand Down Expand Up @@ -110,43 +110,43 @@ func ParseMetrics(final *DnsMetrics, validVals []float32) (*DnsMetrics, error) {
if e != nil {
return nil, fmt.Errorf("failed to parse mean delay, error=%v", e)
}
final.DelayForSuccess.Mean = time.Duration(t)
final.DelayForSuccess.Mean = parseTime(time.Duration(t))

t, e = stats.Max(validVals)
if e != nil {
return nil, fmt.Errorf("failed to parse max delay, error=%v", e)
}
final.DelayForSuccess.Max = time.Duration(t)
final.DelayForSuccess.Max = parseTime(time.Duration(t))

t, e = stats.Min(validVals)
if e != nil {
return nil, fmt.Errorf("failed to parse min delay, error=%v", e)
}
final.DelayForSuccess.Min = time.Duration(t)
final.DelayForSuccess.Min = parseTime(time.Duration(t))

t, e = stats.Percentile(validVals, 50)
if e != nil {
return nil, fmt.Errorf("failed to parse 50 Percentile, error=%v", e)
}
final.DelayForSuccess.P50 = time.Duration(t)
final.DelayForSuccess.P50 = parseTime(time.Duration(t))

t, e = stats.Percentile(validVals, 90)
if e != nil {
return nil, fmt.Errorf("failed to parse 90 Percentile, error=%v", e)
}
final.DelayForSuccess.P90 = time.Duration(t)
final.DelayForSuccess.P90 = parseTime(time.Duration(t))

t, e = stats.Percentile(validVals, 95)
if e != nil {
return nil, fmt.Errorf("failed to parse 95 Percentile, error=%v", e)
}
final.DelayForSuccess.P95 = time.Duration(t)
final.DelayForSuccess.P95 = parseTime(time.Duration(t))

t, e = stats.Percentile(validVals, 99)
if e != nil {
return nil, fmt.Errorf("failed to parse 99 Percentile, error=%v", e)
}
final.DelayForSuccess.P99 = time.Duration(t)
final.DelayForSuccess.P99 = parseTime(time.Duration(t))
}

return final, nil
Expand All @@ -169,7 +169,7 @@ func DnsRequest(logger *zap.Logger, req *DnsRequestData) (result *DnsMetrics, er

rl := ratelimit.New(req.Qps)
var wg sync.WaitGroup
d := time.Duration(req.DurationInMs) * time.Millisecond
d := time.Duration(req.DurationInSecond) * time.Second
ctx, cancel := context.WithTimeout(context.Background(), d)
defer cancel()
var duration time.Duration
Expand Down Expand Up @@ -240,7 +240,7 @@ LOOP:
}
r.StartTime = start
r.EndTime = end
r.Duration = duration
r.Duration = duration.String()
r.TargetDomain = req.TargetDomain
r.DnsServer = ServerAddress
r.DnsMethod = string(req.Protocol)
Expand All @@ -249,3 +249,7 @@ LOOP:
return r, nil

}

func parseTime(t time.Duration) string {
return fmt.Sprintf("%.6fms", t.Seconds()*1000)
}
8 changes: 4 additions & 4 deletions pkg/loadRequest/dns_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ var _ = Describe("test dns ", Label("dns"), func() {
TargetDomain: "www.baidu.com",
DnsServerAddr: dnsServer,
PerRequestTimeoutInMs: 1000,
DurationInMs: 1000,
DurationInSecond: 1,
Qps: 10,
}

Expand Down Expand Up @@ -55,7 +55,7 @@ var _ = Describe("test dns ", Label("dns"), func() {
TargetDomain: "www.baidu.com",
DnsServerAddr: dnsServer,
PerRequestTimeoutInMs: 1000,
DurationInMs: 1000,
DurationInSecond: 1,
Qps: 10,
}

Expand Down Expand Up @@ -84,7 +84,7 @@ var _ = Describe("test dns ", Label("dns"), func() {
TargetDomain: "www.no-existed.com",
DnsServerAddr: dnsServer,
PerRequestTimeoutInMs: 1000,
DurationInMs: 1000,
DurationInSecond: 1,
Qps: 10,
}

Expand Down Expand Up @@ -113,7 +113,7 @@ var _ = Describe("test dns ", Label("dns"), func() {
TargetDomain: "wikipedia.org",
DnsServerAddr: dnsServer,
PerRequestTimeoutInMs: 1000,
DurationInMs: 1000,
DurationInSecond: 1,
Qps: 10,
}

Expand Down
22 changes: 13 additions & 9 deletions pkg/pluginManager/netdns/agentExecuteTask.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,22 @@ import (
"strconv"
"strings"
"sync"
"time"
)

func ParseSuccessCondition(successCondition *crd.NetSuccessCondition, metricResult *loadRequest.DnsMetrics) (failureReason string, err error) {
mean, _ := time.ParseDuration(metricResult.DelayForSuccess.Mean)

switch {
case successCondition.SuccessRate != nil && metricResult.SuccessRate < *(successCondition.SuccessRate):
failureReason = fmt.Sprintf("Success Rate %v is lower than request %v", metricResult.SuccessRate, *(successCondition.SuccessRate))
case successCondition.MeanAccessDelayInMs != nil && metricResult.DelayForSuccess.Mean.Milliseconds() > *(successCondition.MeanAccessDelayInMs):
failureReason = fmt.Sprintf("mean delay %v ms is bigger than request %v ms", metricResult.DelayForSuccess.Mean.Milliseconds(), *(successCondition.MeanAccessDelayInMs))
case successCondition.MeanAccessDelayInMs != nil && mean.Milliseconds() > *(successCondition.MeanAccessDelayInMs):
failureReason = fmt.Sprintf("mean delay %v ms is bigger than request %v ms", mean.Milliseconds(), *(successCondition.MeanAccessDelayInMs))
default:
failureReason = ""
err = nil
}

return
}

Expand All @@ -47,7 +51,7 @@ func SendRequestAndReport(logger *zap.Logger, targetName string, req *loadReques
report["FailureReason"] = failureReason
return
}
report["MeanDelay"] = result.DelayForSuccess.Mean.String()
report["MeanDelay"] = result.DelayForSuccess.Mean
report["SucceedRate"] = fmt.Sprintf("%v", result.SuccessRate)

failureReason, err = ParseSuccessCondition(successCondition, result)
Expand Down Expand Up @@ -108,7 +112,7 @@ func (s *PluginNetDns) AgentExecuteTask(logger *zap.Logger, ctx context.Context,
DnsServerAddr: server,
PerRequestTimeoutInMs: int(*instance.Spec.Request.PerRequestTimeoutInMS),
Qps: int(*instance.Spec.Request.QPS),
DurationInMs: int(*instance.Spec.Request.DurationInSecond),
DurationInSecond: int(*instance.Spec.Request.DurationInSecond),
}})
} else {
testTargetList = append(testTargetList, &testTarget{Name: "typeAAAA_" + server + "_" + instance.Spec.Request.Domain, Request: &loadRequest.DnsRequestData{
Expand All @@ -118,7 +122,7 @@ func (s *PluginNetDns) AgentExecuteTask(logger *zap.Logger, ctx context.Context,
DnsServerAddr: server,
PerRequestTimeoutInMs: int(*instance.Spec.Request.PerRequestTimeoutInMS),
Qps: int(*instance.Spec.Request.QPS),
DurationInMs: int(*instance.Spec.Request.DurationInSecond),
DurationInSecond: int(*instance.Spec.Request.DurationInSecond),
}})
}
}
Expand All @@ -142,7 +146,7 @@ func (s *PluginNetDns) AgentExecuteTask(logger *zap.Logger, ctx context.Context,
DnsServerAddr: server,
PerRequestTimeoutInMs: int(*instance.Spec.Request.PerRequestTimeoutInMS),
Qps: int(*instance.Spec.Request.QPS),
DurationInMs: int(*instance.Spec.Request.DurationInSecond),
DurationInSecond: int(*instance.Spec.Request.DurationInSecond),
}})
} else if ip.To4() == nil && *instance.Spec.Target.NetDnsTargetDns.TestIPv6 {
testTargetList = append(testTargetList, &testTarget{Name: "typeAAAA_" + server + "_" + instance.Spec.Request.Domain, Request: &loadRequest.DnsRequestData{
Expand All @@ -152,7 +156,7 @@ func (s *PluginNetDns) AgentExecuteTask(logger *zap.Logger, ctx context.Context,
DnsServerAddr: server,
PerRequestTimeoutInMs: int(*instance.Spec.Request.PerRequestTimeoutInMS),
Qps: int(*instance.Spec.Request.QPS),
DurationInMs: int(*instance.Spec.Request.DurationInSecond),
DurationInSecond: int(*instance.Spec.Request.DurationInSecond),
}})
}
}
Expand All @@ -174,7 +178,7 @@ func (s *PluginNetDns) AgentExecuteTask(logger *zap.Logger, ctx context.Context,
DnsServerAddr: server,
PerRequestTimeoutInMs: int(*instance.Spec.Request.PerRequestTimeoutInMS),
Qps: int(*instance.Spec.Request.QPS),
DurationInMs: int(*instance.Spec.Request.DurationInSecond),
DurationInSecond: int(*instance.Spec.Request.DurationInSecond),
}})
} else if ip.To4() == nil && *instance.Spec.Target.NetDnsTargetDns.TestIPv6 {
testTargetList = append(testTargetList, &testTarget{Name: "typeAAAA_" + server + "_" + instance.Spec.Request.Domain, Request: &loadRequest.DnsRequestData{
Expand All @@ -184,7 +188,7 @@ func (s *PluginNetDns) AgentExecuteTask(logger *zap.Logger, ctx context.Context,
DnsServerAddr: server,
PerRequestTimeoutInMs: int(*instance.Spec.Request.PerRequestTimeoutInMS),
Qps: int(*instance.Spec.Request.QPS),
DurationInMs: int(*instance.Spec.Request.DurationInSecond),
DurationInSecond: int(*instance.Spec.Request.DurationInSecond),
}})
}
}
Expand Down