Codebase list golang-github-vbauerster-mpb / 0a704b7
named speedType Vladimir Bauer 6 years ago
3 changed file(s) with 30 addition(s) and 89 deletion(s). Raw diff Collapse all Expand all
44 "io"
55 "math"
66 "strconv"
7 "strings"
87 )
98
109 //go:generate stringer -type=SizeB1024 -trimprefix=_i
5150 unit = _iTiB
5251 }
5352
54 var b strings.Builder
55 b.WriteString(strconv.FormatFloat(float64(self)/float64(unit), 'f', prec, 64))
53 io.WriteString(st, strconv.FormatFloat(float64(self)/float64(unit), 'f', prec, 64))
5654
5755 if st.Flag(' ') {
58 b.WriteString(" ")
56 io.WriteString(st, " ")
5957 }
60 b.WriteString(unit.String())
61
62 if w, ok := st.Width(); ok {
63 if l := b.Len(); l < w {
64 pad := strings.Repeat(" ", w-l)
65 if st.Flag('-') {
66 b.WriteString(pad)
67 } else {
68 tmp := b.String()
69 b.Reset()
70 b.WriteString(pad)
71 b.WriteString(tmp)
72 }
73 }
74 }
75
76 io.WriteString(st, b.String())
58 io.WriteString(st, unit.String())
7759 }
7860
7961 const (
11799 unit = _TB
118100 }
119101
120 var b strings.Builder
121 b.WriteString(strconv.FormatFloat(float64(self)/float64(unit), 'f', prec, 64))
102 io.WriteString(st, strconv.FormatFloat(float64(self)/float64(unit), 'f', prec, 64))
122103
123104 if st.Flag(' ') {
124 b.WriteString(" ")
105 io.WriteString(st, " ")
125106 }
126 b.WriteString(unit.String())
127
128 if w, ok := st.Width(); ok {
129 if l := b.Len(); l < w {
130 pad := strings.Repeat(" ", w-l)
131 if st.Flag('-') {
132 b.WriteString(pad)
133 } else {
134 tmp := b.String()
135 b.Reset()
136 b.WriteString(pad)
137 b.WriteString(tmp)
138 }
139 }
140 }
141
142 io.WriteString(st, b.String())
107 io.WriteString(st, unit.String())
143108 }
2121 "verb % .1f": {12345678, "% .1f", "11.8 MiB"},
2222 "verb % .2f": {12345678, "% .2f", "11.77 MiB"},
2323 "verb % .3f": {12345678, "% .3f", "11.774 MiB"},
24
25 "verb %8.f": {12345678, "%8.f", " 12MiB"},
26 "verb %8.0f": {12345678, "%8.0f", " 12MiB"},
27 "verb %8.1f": {12345678, "%8.1f", " 11.8MiB"},
28 "verb %8.2f": {12345678, "%8.2f", "11.77MiB"},
29 "verb %8.3f": {12345678, "%8.3f", "11.774MiB"},
30
31 "verb % 8.f": {12345678, "% 8.f", " 12 MiB"},
32 "verb % 8.0f": {12345678, "% 8.0f", " 12 MiB"},
33 "verb % 8.1f": {12345678, "% 8.1f", "11.8 MiB"},
34
35 "verb %-8.f": {12345678, "%-8.f", "12MiB "},
36 "verb %-8.0f": {12345678, "%-8.0f", "12MiB "},
37 "verb %-8.1f": {12345678, "%-8.1f", "11.8MiB "},
38 "verb %-8.2f": {12345678, "%8.2f", "11.77MiB"},
39 "verb %-8.3f": {12345678, "%8.3f", "11.774MiB"},
40
41 "verb % -8.f": {12345678, "% -8.f", "12 MiB "},
42 "verb % -8.0f": {12345678, "% -8.0f", "12 MiB "},
43 "verb % -8.1f": {12345678, "% -8.1f", "11.8 MiB"},
4424
4525 "1000 %f": {1000, "%f", "1000.000000b"},
4626 "1000 %d": {1000, "%d", "1000b"},
9070 "verb % .2f": {12345678, "% .2f", "12.35 MB"},
9171 "verb % .3f": {12345678, "% .3f", "12.346 MB"},
9272
93 "verb %8.f": {12345678, "%8.f", " 12MB"},
94 "verb %8.0f": {12345678, "%8.0f", " 12MB"},
95 "verb %8.1f": {12345678, "%8.1f", " 12.3MB"},
96 "verb %8.2f": {12345678, "%8.2f", " 12.35MB"},
97 "verb %8.3f": {12345678, "%8.3f", "12.346MB"},
98
99 "verb % 8.f": {12345678, "% 8.f", " 12 MB"},
100 "verb % 8.0f": {12345678, "% 8.0f", " 12 MB"},
101 "verb % 8.1f": {12345678, "% 8.1f", " 12.3 MB"},
102
103 "verb %-8.f": {12345678, "%-8.f", "12MB "},
104 "verb %-8.0f": {12345678, "%-8.0f", "12MB "},
105 "verb %-8.1f": {12345678, "%-8.1f", "12.3MB "},
106 "verb %-8.2f": {12345678, "%8.2f", " 12.35MB"},
107 "verb %-8.3f": {12345678, "%8.3f", "12.346MB"},
108
109 "verb % -8.f": {12345678, "% -8.f", "12 MB "},
110 "verb % -8.0f": {12345678, "% -8.0f", "12 MB "},
111 "verb % -8.1f": {12345678, "% -8.1f", "12.3 MB "},
112
11373 "1000 %f": {1000, "%f", "1.000000KB"},
11474 "1000 %d": {1000, "%d", "1KB"},
11575 "1000 %s": {1000, "%s", "1KB"},
11
22 import (
33 "fmt"
4 "io"
45 "math"
56 "time"
67
78 "github.com/VividCortex/ewma"
89 )
10
11 const (
12 perSecond = "/s"
13 )
14
15 type speedType struct {
16 sizeT fmt.Formatter
17 perSecond string
18 }
19
20 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 sizePerSecond(sizeT fmt.Formatter) fmt.Formatter {
26 return &speedType{
27 sizeT: sizeT,
28 perSecond: perSecond,
29 }
30 }
931
1032 // EwmaSpeed exponential-weighted-moving-average based speed decorator.
1133 // Note that it's necessary to supply bar.Incr* methods with incremental
4163 wc.Init()
4264 if fmt == "" {
4365 fmt = "%.0f"
44 }
45 if unit > 0 {
46 fmt += "/s"
4766 }
4867 d := &movingAverageSpeed{
4968 WC: wc,
134153 if fmt == "" {
135154 fmt = "%.0f"
136155 }
137 if unit > 0 {
138 fmt += "/s"
139 }
140156 d := &averageSpeed{
141157 WC: wc,
142158 unit: unit,
168184
169185 switch d.unit {
170186 case UnitKiB:
171 d.msg = fmt.Sprintf(d.fmt, SizeB1024(math.Round(speed)))
187 d.msg = fmt.Sprintf(d.fmt, sizePerSecond(SizeB1024(math.Round(speed))))
172188 case UnitKB:
173 d.msg = fmt.Sprintf(d.fmt, SizeB1000(math.Round(speed)))
189 d.msg = fmt.Sprintf(d.fmt, sizePerSecond(SizeB1000(math.Round(speed))))
174190 default:
175191 d.msg = fmt.Sprintf(d.fmt, speed)
176192 }