diff options
| author | Bjørn Ivar Teigen <[email protected]> | 2023-07-12 10:09:12 +0200 |
|---|---|---|
| committer | Bjørn Ivar Teigen <[email protected]> | 2023-07-12 10:09:12 +0200 |
| commit | db0aea8354eb6f4d9732af5fd1cf0718e86f8f04 (patch) | |
| tree | bef6e3c9bddddf681d74c1037ed5f8c09fa7032f | |
| parent | 2a91b1baf26d42d5022e1ca5b5b67402507f6c60 (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.go | 20 | ||||
| -rw-r--r-- | qualityattenuation/qualityattenuation.go | 26 |
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) } |
