summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Ivar Teigen <[email protected]>2023-07-12 10:09:12 +0200
committerBjørn Ivar Teigen <[email protected]>2023-07-12 10:09:12 +0200
commitdb0aea8354eb6f4d9732af5fd1cf0718e86f8f04 (patch)
treebef6e3c9bddddf681d74c1037ed5f8c09fa7032f
parent2a91b1baf26d42d5022e1ca5b5b67402507f6c60 (diff)
Addressed pull request comments
* Added units to printout * Made QualityRequirement and PercentileLatencyPair private *Removed the hist struct from the SimpleQualityAttenuation struct (it was only used for testing)
-rw-r--r--networkQuality.go20
-rw-r--r--qualityattenuation/qualityattenuation.go26
2 files changed, 20 insertions, 26 deletions
diff --git a/networkQuality.go b/networkQuality.go
index 5360666..0fff8a6 100644
--- a/networkQuality.go
+++ b/networkQuality.go
@@ -851,16 +851,16 @@ func main() {
fmt.Printf(
`Number of losses: %d
Number of samples: %d
-Loss: %f
-Min: %.6f
-Max: %.6f
-Mean: %.6f
-Variance: %.6f
-Standard Deviation: %.6f
-PDV(90): %.6f
-PDV(99): %.6f
-P(90): %.6f
-P(99): %.6f
+Loss: %f %%
+Min: %.6f s
+Max: %.6f s
+Mean: %.6f s
+Variance: %.6f s
+Standard Deviation: %.6f s
+PDV(90): %.6f s
+PDV(99): %.6f s
+P(90): %.6f s
+P(99): %.6f s
RPM: %.0f
Gaming QoO: %.0f
`, selfRttsQualityAttenuation.GetNumberOfLosses(),
diff --git a/qualityattenuation/qualityattenuation.go b/qualityattenuation/qualityattenuation.go
index d9b8e0a..c6a2f85 100644
--- a/qualityattenuation/qualityattenuation.go
+++ b/qualityattenuation/qualityattenuation.go
@@ -13,7 +13,7 @@ type cablelabsHist struct {
hist [256]float64
}
-func (h *cablelabsHist) GetHist() [256]float64 {
+func (h *cablelabsHist) GetHistogram() [256]float64 {
return h.hist
}
@@ -52,17 +52,16 @@ type SimpleQualityAttenuation struct {
latencyEqLossThreshold float64
minimumLatency float64
maximumLatency float64
- hist cablelabsHist
}
-type PercentileLatencyPair struct {
+type percentileLatencyPair struct {
percentile float64
perfectLatency float64
uselessLatency float64
}
-type QualityRequirement struct {
- latencyRequirements []PercentileLatencyPair
+type qualityRequirement struct {
+ latencyRequirements []percentileLatencyPair
}
func NewSimpleQualityAttenuation() *SimpleQualityAttenuation {
@@ -85,7 +84,6 @@ func (qa *SimpleQualityAttenuation) AddSample(sample float64) error {
// TODO: This should raise a warning and/or trigger error handling.
return fmt.Errorf("sample is zero or negative")
}
- qa.hist.AddSample(sample)
qa.numberOfSamples++
if sample > qa.latencyEqLossThreshold {
qa.numberOfLosses++
@@ -206,10 +204,6 @@ func (qa *SimpleQualityAttenuation) Merge(other *SimpleQualityAttenuation) error
return nil
}
-func (qa *SimpleQualityAttenuation) GetHist() [256]float64 {
- return qa.hist.GetHist()
-}
-
func (qa *SimpleQualityAttenuation) EmpiricalDistributionHistogram() []float64 {
// Convert the tdigest to a histogram on the format defined by CableLabs, with the following bucket edges:
// 100 bins from 0 to 50 ms, each 0.5 ms wide
@@ -240,7 +234,7 @@ func (qa *SimpleQualityAttenuation) EmpiricalDistributionHistogram() []float64 {
// Compute the Quality of Outcome (QoO) for a given quality requirement.
// The details and motivation for the QoO metric are described in the following internet draft:
// https://datatracker.ietf.org/doc/draft-olden-ippm-qoo/
-func (qa *SimpleQualityAttenuation) QoO(requirement QualityRequirement) float64 {
+func (qa *SimpleQualityAttenuation) QoO(requirement qualityRequirement) float64 {
QoO := 100.0
for _, percentileLatencyPair := range requirement.latencyRequirements {
score := 0.0
@@ -263,10 +257,10 @@ func (qa *SimpleQualityAttenuation) QoO(requirement QualityRequirement) float64
}
func (qa *SimpleQualityAttenuation) GetGamingQoO() float64 {
- qualReq := QualityRequirement{}
- qualReq.latencyRequirements = []PercentileLatencyPair{}
- qualReq.latencyRequirements = append(qualReq.latencyRequirements, PercentileLatencyPair{percentile: 50.0, perfectLatency: 0.030, uselessLatency: 0.150})
- qualReq.latencyRequirements = append(qualReq.latencyRequirements, PercentileLatencyPair{percentile: 95.0, perfectLatency: 0.065, uselessLatency: 0.200})
- qualReq.latencyRequirements = append(qualReq.latencyRequirements, PercentileLatencyPair{percentile: 99.0, perfectLatency: 0.100, uselessLatency: 0.250})
+ qualReq := qualityRequirement{}
+ qualReq.latencyRequirements = []percentileLatencyPair{}
+ qualReq.latencyRequirements = append(qualReq.latencyRequirements, percentileLatencyPair{percentile: 50.0, perfectLatency: 0.030, uselessLatency: 0.150})
+ qualReq.latencyRequirements = append(qualReq.latencyRequirements, percentileLatencyPair{percentile: 95.0, perfectLatency: 0.065, uselessLatency: 0.200})
+ qualReq.latencyRequirements = append(qualReq.latencyRequirements, percentileLatencyPair{percentile: 99.0, perfectLatency: 0.100, uselessLatency: 0.250})
return qa.QoO(qualReq)
}