Skip to content

Commit

Permalink
Merge pull request #336 from spidernet-io/pr/metric_fmt
Browse files Browse the repository at this point in the history
metrics format
  • Loading branch information
weizhoublue authored Apr 27, 2023
2 parents e3e0b39 + 8a14c7d commit ba3afc2
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 31 deletions.
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

0 comments on commit ba3afc2

Please sign in to comment.