use speedType directly
Vladimir Bauer
6 years ago
| 8 | 8 | "github.com/VividCortex/ewma" |
| 9 | 9 | ) |
| 10 | 10 | |
| 11 | const ( | |
| 12 | perSecond = "/s" | |
| 13 | ) | |
| 14 | ||
| 15 | 11 | type speedType struct { |
| 16 | sizeT fmt.Formatter | |
| 17 | perSecond string | |
| 12 | fmt.Formatter | |
| 18 | 13 | } |
| 19 | 14 | |
| 20 | 15 | func (self *speedType) Format(st fmt.State, verb rune) { |
| 21 | self.sizeT.Format(st, verb) | |
| 22 | io.WriteString(st, self.perSecond) | |
| 23 | } | |
| 24 | ||
| 25 | func speedPerSecond(sizeT fmt.Formatter) fmt.Formatter { | |
| 26 | return &speedType{ | |
| 27 | sizeT: sizeT, | |
| 28 | perSecond: perSecond, | |
| 29 | } | |
| 16 | self.Formatter.Format(st, verb) | |
| 17 | io.WriteString(st, "/s") | |
| 30 | 18 | } |
| 31 | 19 | |
| 32 | 20 | // EwmaSpeed exponential-weighted-moving-average based speed decorator. |
| 92 | 80 | |
| 93 | 81 | speed := d.average.Value() |
| 94 | 82 | |
| 83 | var val interface{} | |
| 95 | 84 | switch d.unit { |
| 96 | 85 | case UnitKiB: |
| 97 | d.msg = fmt.Sprintf(d.fmt, speedPerSecond(SizeB1024(math.Round(speed)))) | |
| 86 | val = &speedType{SizeB1024(math.Round(speed))} | |
| 98 | 87 | case UnitKB: |
| 99 | d.msg = fmt.Sprintf(d.fmt, speedPerSecond(SizeB1000(math.Round(speed)))) | |
| 88 | val = &speedType{SizeB1000(math.Round(speed))} | |
| 100 | 89 | default: |
| 101 | d.msg = fmt.Sprintf(d.fmt, speed) | |
| 90 | val = speed | |
| 102 | 91 | } |
| 92 | d.msg = fmt.Sprintf(d.fmt, val) | |
| 103 | 93 | |
| 104 | 94 | return d.FormatMsg(d.msg) |
| 105 | 95 | } |
| 182 | 172 | timeElapsed := time.Since(d.startTime) |
| 183 | 173 | speed := float64(st.Current) / timeElapsed.Seconds() |
| 184 | 174 | |
| 175 | var val interface{} | |
| 185 | 176 | switch d.unit { |
| 186 | 177 | case UnitKiB: |
| 187 | d.msg = fmt.Sprintf(d.fmt, speedPerSecond(SizeB1024(math.Round(speed)))) | |
| 178 | val = &speedType{SizeB1024(math.Round(speed))} | |
| 188 | 179 | case UnitKB: |
| 189 | d.msg = fmt.Sprintf(d.fmt, speedPerSecond(SizeB1000(math.Round(speed)))) | |
| 180 | val = &speedType{SizeB1000(math.Round(speed))} | |
| 190 | 181 | default: |
| 191 | d.msg = fmt.Sprintf(d.fmt, speed) | |
| 182 | val = speed | |
| 192 | 183 | } |
| 184 | d.msg = fmt.Sprintf(d.fmt, val) | |
| 193 | 185 | |
| 194 | 186 | return d.FormatMsg(d.msg) |
| 195 | 187 | } |