Update examples
Vladimir Bauer
9 years ago
| 40 | 40 | ), |
| 41 | 41 | ) |
| 42 | 42 | go func() { |
| 43 | defer func() { | |
| 44 | // fmt.Printf("%s done\n", name) | |
| 45 | wg.Done() | |
| 46 | }() | |
| 43 | defer wg.Done() | |
| 47 | 44 | blockSize := rand.Intn(maxBlockSize) + 1 |
| 48 | 45 | for i := 0; i < total; i++ { |
| 49 | 46 | select { |
| 6 | 6 | "time" |
| 7 | 7 | |
| 8 | 8 | "github.com/vbauerster/mpb" |
| 9 | "github.com/vbauerster/mpb/decor" | |
| 9 | 10 | ) |
| 10 | 11 | |
| 11 | 12 | const ( |
| 14 | 15 | |
| 15 | 16 | func main() { |
| 16 | 17 | |
| 18 | p := mpb.New(mpb.WithWidth(64)) | |
| 19 | ||
| 20 | total := 100 | |
| 21 | numBars := 3 | |
| 17 | 22 | var wg sync.WaitGroup |
| 18 | p := mpb.New().SetWidth(64) | |
| 23 | wg.Add(numBars) | |
| 19 | 24 | |
| 20 | name1 := "Bar#1:" | |
| 21 | bar1 := p.AddBar(50). | |
| 22 | PrependName(name1, 0, mpb.DwidthSync|mpb.DidentRight). | |
| 23 | PrependElapsed(3, mpb.DwidthSync|mpb.DextraSpace). | |
| 24 | AppendPercentage(5, 0) | |
| 25 | ||
| 26 | wg.Add(1) | |
| 27 | go func() { | |
| 28 | defer wg.Done() | |
| 29 | blockSize := rand.Intn(maxBlockSize) + 1 | |
| 30 | for i := 0; i < 50; i++ { | |
| 31 | sleep(blockSize) | |
| 32 | bar1.Incr(1) | |
| 33 | blockSize = rand.Intn(maxBlockSize) + 1 | |
| 25 | for i := 0; i < numBars; i++ { | |
| 26 | var name string | |
| 27 | if i != 1 { | |
| 28 | name = fmt.Sprintf("Bar#%d:", i) | |
| 34 | 29 | } |
| 35 | }() | |
| 36 | ||
| 37 | bar2 := p.AddBar(100). | |
| 38 | PrependName("", 0, mpb.DwidthSync). | |
| 39 | PrependElapsed(3, mpb.DwidthSync|mpb.DextraSpace). | |
| 40 | AppendPercentage(5, 0) | |
| 41 | ||
| 42 | wg.Add(1) | |
| 43 | go func() { | |
| 44 | defer wg.Done() | |
| 45 | blockSize := rand.Intn(maxBlockSize) + 1 | |
| 46 | for i := 0; i < 100; i++ { | |
| 47 | sleep(blockSize) | |
| 48 | bar2.Incr(1) | |
| 49 | blockSize = rand.Intn(maxBlockSize) + 1 | |
| 50 | } | |
| 51 | }() | |
| 52 | ||
| 53 | bar3 := p.AddBar(80). | |
| 54 | PrependName("Bar#3:", 0, mpb.DwidthSync|mpb.DidentRight). | |
| 55 | PrependElapsed(3, mpb.DwidthSync|mpb.DextraSpace). | |
| 56 | AppendPercentage(5, 0) | |
| 57 | ||
| 58 | wg.Add(1) | |
| 59 | go func() { | |
| 60 | defer wg.Done() | |
| 61 | blockSize := rand.Intn(maxBlockSize) + 1 | |
| 62 | for i := 0; i < 80; i++ { | |
| 63 | sleep(blockSize) | |
| 64 | bar3.Incr(1) | |
| 65 | blockSize = rand.Intn(maxBlockSize) + 1 | |
| 66 | } | |
| 67 | }() | |
| 30 | b := p.AddBar(int64(total), | |
| 31 | mpb.PrependDecorators( | |
| 32 | decor.Name(name, 0, decor.DwidthSync|decor.DidentRight), | |
| 33 | decor.Elapsed(3, decor.DSyncSpace), | |
| 34 | ), | |
| 35 | mpb.AppendDecorators( | |
| 36 | decor.Percentage(5, 0), | |
| 37 | ), | |
| 38 | ) | |
| 39 | go func() { | |
| 40 | defer wg.Done() | |
| 41 | blockSize := rand.Intn(maxBlockSize) + 1 | |
| 42 | for i := 0; i < total; i++ { | |
| 43 | sleep(blockSize) | |
| 44 | b.Incr(1) | |
| 45 | blockSize = rand.Intn(maxBlockSize) + 1 | |
| 46 | } | |
| 47 | }() | |
| 48 | } | |
| 68 | 49 | |
| 69 | 50 | wg.Wait() |
| 70 | 51 | p.Stop() |
| 71 | // p.AddBar(1) // panic: you cannot reuse p, create new one! | |
| 72 | 52 | fmt.Println("stop") |
| 73 | 53 | } |
| 74 | 54 | |
| 6 | 6 | "time" |
| 7 | 7 | |
| 8 | 8 | "github.com/vbauerster/mpb" |
| 9 | "github.com/vbauerster/mpb/decor" | |
| 9 | 10 | ) |
| 10 | 11 | |
| 11 | 12 | const ( |
| 14 | 15 | |
| 15 | 16 | func main() { |
| 16 | 17 | |
| 18 | p := mpb.New(mpb.WithWidth(64)) | |
| 19 | ||
| 20 | total := 100 | |
| 21 | numBars := 3 | |
| 17 | 22 | var wg sync.WaitGroup |
| 18 | p := mpb.New().SetWidth(64) | |
| 23 | wg.Add(numBars) | |
| 19 | 24 | |
| 20 | name1 := "Bar#1:" | |
| 21 | bar1 := p.AddBar(50). | |
| 22 | PrependName(name1, 0, mpb.DwidthSync|mpb.DidentRight). | |
| 23 | PrependETA(4, mpb.DwidthSync|mpb.DextraSpace). | |
| 24 | AppendPercentage(5, 0) | |
| 25 | wg.Add(1) | |
| 26 | go func() { | |
| 27 | defer wg.Done() | |
| 28 | blockSize := rand.Intn(maxBlockSize) + 1 | |
| 29 | for i := 0; i < 50; i++ { | |
| 30 | sleep(blockSize) | |
| 31 | bar1.Incr(1) | |
| 32 | blockSize = rand.Intn(maxBlockSize) + 1 | |
| 25 | for i := 0; i < numBars; i++ { | |
| 26 | var name string | |
| 27 | if i != 1 { | |
| 28 | name = fmt.Sprintf("Bar#%d:", i) | |
| 33 | 29 | } |
| 34 | }() | |
| 35 | ||
| 36 | bar2 := p.AddBar(100). | |
| 37 | PrependName("", 0, mpb.DwidthSync). | |
| 38 | PrependETA(4, mpb.DwidthSync|mpb.DextraSpace). | |
| 39 | AppendPercentage(5, 0) | |
| 40 | wg.Add(1) | |
| 41 | go func() { | |
| 42 | defer wg.Done() | |
| 43 | blockSize := rand.Intn(maxBlockSize) + 1 | |
| 44 | for i := 0; i < 100; i++ { | |
| 45 | sleep(blockSize) | |
| 46 | bar2.Incr(1) | |
| 47 | stat := bar2.GetStatistics() | |
| 48 | if stat.Current > 42 && p.RemoveBar(bar2) { | |
| 49 | break | |
| 30 | b := p.AddBar(int64(total), mpb.BarID(i), | |
| 31 | mpb.PrependDecorators( | |
| 32 | decor.Name(name, 0, decor.DwidthSync|decor.DidentRight), | |
| 33 | decor.ETA(4, decor.DSyncSpace), | |
| 34 | ), | |
| 35 | mpb.AppendDecorators( | |
| 36 | decor.Percentage(5, 0), | |
| 37 | ), | |
| 38 | ) | |
| 39 | go func() { | |
| 40 | defer wg.Done() | |
| 41 | blockSize := rand.Intn(maxBlockSize) + 1 | |
| 42 | for i := 0; i < total; i++ { | |
| 43 | sleep(blockSize) | |
| 44 | b.Incr(1) | |
| 45 | blockSize = rand.Intn(maxBlockSize) + 1 | |
| 46 | if b.ID() == 1 && i >= 42 { | |
| 47 | p.RemoveBar(b) | |
| 48 | return | |
| 49 | } | |
| 50 | 50 | } |
| 51 | blockSize = rand.Intn(maxBlockSize) + 1 | |
| 52 | } | |
| 53 | }() | |
| 54 | ||
| 55 | bar3 := p.AddBar(80). | |
| 56 | PrependName("Bar#3:", 0, mpb.DwidthSync|mpb.DidentRight). | |
| 57 | PrependETA(4, mpb.DwidthSync|mpb.DextraSpace). | |
| 58 | AppendPercentage(5, 0) | |
| 59 | wg.Add(1) | |
| 60 | go func() { | |
| 61 | defer wg.Done() | |
| 62 | blockSize := rand.Intn(maxBlockSize) + 1 | |
| 63 | for i := 0; i < 80; i++ { | |
| 64 | sleep(blockSize) | |
| 65 | bar3.Incr(1) | |
| 66 | blockSize = rand.Intn(maxBlockSize) + 1 | |
| 67 | } | |
| 68 | }() | |
| 51 | }() | |
| 52 | } | |
| 69 | 53 | |
| 70 | 54 | wg.Wait() |
| 71 | 55 | p.Stop() |
| 72 | // p.AddBar(2) // panic: you cannot reuse p, create new one! | |
| 73 | 56 | fmt.Println("stop") |
| 74 | 57 | } |
| 75 | 58 | |
| 6 | 6 | "time" |
| 7 | 7 | |
| 8 | 8 | "github.com/vbauerster/mpb" |
| 9 | "github.com/vbauerster/mpb/decor" | |
| 9 | 10 | ) |
| 10 | 11 | |
| 11 | 12 | func main() { |
| 13 | p := mpb.New() | |
| 14 | total := 100 | |
| 15 | numBars := 3 | |
| 12 | 16 | var wg sync.WaitGroup |
| 13 | p := mpb.New() | |
| 14 | wg.Add(3) // add wg delta | |
| 15 | for i := 0; i < 3; i++ { | |
| 17 | wg.Add(numBars) | |
| 18 | ||
| 19 | for i := 0; i < numBars; i++ { | |
| 16 | 20 | name := fmt.Sprintf("Bar#%d:", i) |
| 17 | bar := p.AddBar(100). | |
| 18 | PrependName(name, len(name), 0). | |
| 19 | // Prepend Percentage decorator and sync width | |
| 20 | PrependPercentage(3, mpb.DwidthSync|mpb.DextraSpace). | |
| 21 | // Append ETA and don't sync width | |
| 22 | AppendETA(2, 0) | |
| 21 | bar := p.AddBar(int64(total), | |
| 22 | mpb.PrependDecorators( | |
| 23 | // Name decorator with minWidth and no width sync | |
| 24 | decor.Name(name, len(name), 0), | |
| 25 | // Percentage decorator with DwidthSync and DextraSpace | |
| 26 | decor.Percentage(3, decor.DSyncSpace), | |
| 27 | ), | |
| 28 | mpb.AppendDecorators( | |
| 29 | // ETA decorator, with no width sync | |
| 30 | decor.ETA(2, 0), | |
| 31 | ), | |
| 32 | ) | |
| 33 | ||
| 23 | 34 | go func() { |
| 24 | 35 | defer wg.Done() |
| 25 | // you can p.AddBar() here, but ordering will be non deterministic | |
| 26 | // if you still need p.AddBar() here and maintain ordering, use | |
| 27 | // (*mpb.Progress).BeforeRenderFunc(f mpb.BeforeRender) | |
| 28 | for i := 0; i < 100; i++ { | |
| 36 | for i := 0; i < total; i++ { | |
| 29 | 37 | time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond) |
| 30 | 38 | bar.Incr(1) |
| 31 | 39 | } |
| 5 | 5 | "time" |
| 6 | 6 | |
| 7 | 7 | "github.com/vbauerster/mpb" |
| 8 | "github.com/vbauerster/mpb/decor" | |
| 8 | 9 | ) |
| 9 | 10 | |
| 10 | 11 | func main() { |
| 11 | // Star mpb's rendering goroutine. | |
| 12 | p := mpb.New() | |
| 13 | // Set custom width for every bar, which mpb will render | |
| 14 | // The default one in 80 | |
| 15 | p.SetWidth(100) | |
| 16 | // Set custom format for every bar, the default one is "[=>-]" | |
| 17 | p.Format("╢▌▌░╟") | |
| 18 | // Set custom refresh rate, the default one is 100 ms | |
| 19 | p.RefreshRate(120 * time.Millisecond) | |
| 12 | p := mpb.New( | |
| 13 | // Override default (80) width | |
| 14 | mpb.WithWidth(100), | |
| 15 | // Override default "[=>-]" format | |
| 16 | mpb.WithFormat("╢▌▌░╟"), | |
| 17 | // Override default 100ms refresh rate | |
| 18 | mpb.WithRefreshRate(120*time.Millisecond), | |
| 19 | ) | |
| 20 | 20 | |
| 21 | 21 | // Add a bar. You're not limited to just one bar, add many if you need. |
| 22 | bar := p.AddBar(100).PrependName("Single Bar:", 0, 0).AppendPercentage(5, 0) | |
| 22 | bar := p.AddBar(100, | |
| 23 | mpb.PrependDecorators(decor.Name("Single Bar:", 0, 0)), | |
| 24 | mpb.AppendDecorators(decor.Percentage(5, 0)), | |
| 25 | ) | |
| 23 | 26 | |
| 24 | 27 | for i := 0; i < 100; i++ { |
| 25 | 28 | bar.Incr(1) // increment progress bar |
| 7 | 7 | "time" |
| 8 | 8 | |
| 9 | 9 | "github.com/vbauerster/mpb" |
| 10 | "github.com/vbauerster/mpb/decor" | |
| 10 | 11 | ) |
| 11 | 12 | |
| 12 | 13 | const ( |
| 18 | 19 | func (bs barSlice) Len() int { return len(bs) } |
| 19 | 20 | |
| 20 | 21 | func (bs barSlice) Less(i, j int) bool { |
| 21 | is := bs[i].GetStatistics() | |
| 22 | js := bs[j].GetStatistics() | |
| 23 | ip := percentage(is.Total, is.Current, 100) | |
| 24 | jp := percentage(js.Total, js.Current, 100) | |
| 22 | ip := decor.CalcPercentage(bs[i].Total(), bs[i].Current(), 100) | |
| 23 | jp := decor.CalcPercentage(bs[j].Total(), bs[j].Current(), 100) | |
| 25 | 24 | return ip < jp |
| 26 | 25 | } |
| 27 | 26 | |
| 33 | 32 | } |
| 34 | 33 | } |
| 35 | 34 | |
| 36 | func percentage(total, current int64, ratio int) int { | |
| 37 | if total == 0 || current > total { | |
| 38 | return 0 | |
| 39 | } | |
| 40 | return int(float64(ratio) * float64(current) / float64(total)) | |
| 41 | } | |
| 42 | ||
| 43 | 35 | func main() { |
| 44 | 36 | |
| 37 | p := mpb.New(mpb.WithWidth(64), mpb.WithBeforeRenderFunc(sortByProgressFunc())) | |
| 38 | ||
| 39 | total := 100 | |
| 40 | numBars := 3 | |
| 45 | 41 | var wg sync.WaitGroup |
| 46 | p := mpb.New().SetWidth(60).BeforeRenderFunc(sortByProgressFunc()) | |
| 42 | wg.Add(numBars) | |
| 47 | 43 | |
| 48 | name1 := "Bar#1:" | |
| 49 | bar1 := p.AddBar(100). | |
| 50 | PrependName(name1, 0, mpb.DwidthSync). | |
| 51 | PrependCounters("%3s/%3s", 0, 10, mpb.DwidthSync|mpb.DextraSpace). | |
| 52 | AppendETA(3, 0) | |
| 53 | wg.Add(1) | |
| 54 | go func() { | |
| 55 | defer wg.Done() | |
| 56 | blockSize := rand.Intn(maxBlockSize) + 1 | |
| 57 | for i := 0; i < 100; i++ { | |
| 58 | sleep(blockSize) | |
| 59 | bar1.Incr(1) | |
| 60 | blockSize = rand.Intn(maxBlockSize) + 1 | |
| 44 | for i := 0; i < numBars; i++ { | |
| 45 | var name string | |
| 46 | if i != 1 { | |
| 47 | name = fmt.Sprintf("Bar#%d:", i) | |
| 61 | 48 | } |
| 62 | }() | |
| 63 | ||
| 64 | bar2 := p.AddBar(60). | |
| 65 | PrependName("", 0, mpb.DwidthSync). | |
| 66 | PrependCounters("%3s/%3s", 0, 10, mpb.DwidthSync|mpb.DextraSpace). | |
| 67 | AppendETA(3, 0) | |
| 68 | wg.Add(1) | |
| 69 | go func() { | |
| 70 | defer wg.Done() | |
| 71 | blockSize := rand.Intn(maxBlockSize) + 1 | |
| 72 | for i := 0; i < 60; i++ { | |
| 73 | sleep(blockSize) | |
| 74 | bar2.Incr(1) | |
| 75 | blockSize = rand.Intn(maxBlockSize) + 1 | |
| 76 | } | |
| 77 | }() | |
| 78 | ||
| 79 | bar3 := p.AddBar(80). | |
| 80 | PrependName("Bar#3:", 0, mpb.DwidthSync). | |
| 81 | PrependCounters("%3s/%3s", 0, 10, mpb.DwidthSync|mpb.DextraSpace). | |
| 82 | AppendETA(3, 0) | |
| 83 | wg.Add(1) | |
| 84 | go func() { | |
| 85 | defer wg.Done() | |
| 86 | blockSize := rand.Intn(maxBlockSize) + 1 | |
| 87 | for i := 0; i < 80; i++ { | |
| 88 | sleep(blockSize) | |
| 89 | bar3.Incr(1) | |
| 90 | blockSize = rand.Intn(maxBlockSize) + 1 | |
| 91 | } | |
| 92 | }() | |
| 49 | b := p.AddBar(int64(total), | |
| 50 | mpb.PrependDecorators( | |
| 51 | decor.Name(name, 0, decor.DwidthSync), | |
| 52 | decor.Counters("%3s/%3s", 0, 10, decor.DSyncSpace), | |
| 53 | ), | |
| 54 | mpb.AppendDecorators( | |
| 55 | decor.ETA(3, 0), | |
| 56 | ), | |
| 57 | ) | |
| 58 | go func() { | |
| 59 | defer wg.Done() | |
| 60 | blockSize := rand.Intn(maxBlockSize) + 1 | |
| 61 | for i := 0; i < total; i++ { | |
| 62 | sleep(blockSize) | |
| 63 | b.Incr(1) | |
| 64 | blockSize = rand.Intn(maxBlockSize) + 1 | |
| 65 | } | |
| 66 | }() | |
| 67 | } | |
| 93 | 68 | |
| 94 | 69 | wg.Wait() |
| 95 | 70 | p.Stop() |
| 96 | // p.AddBar(1) // panic: you cannot reuse p, create new one! | |
| 97 | 71 | fmt.Println("stop") |
| 98 | 72 | } |
| 99 | 73 | |
| 6 | 6 | "time" |
| 7 | 7 | |
| 8 | 8 | "github.com/vbauerster/mpb" |
| 9 | "github.com/vbauerster/mpb/decor" | |
| 9 | 10 | ) |
| 10 | 11 | |
| 11 | 12 | const ( |
| 22 | 23 | for i := 0; i < totalBars; i++ { |
| 23 | 24 | name := fmt.Sprintf("Bar#%02d: ", i) |
| 24 | 25 | total := rand.Intn(120) + 10 |
| 25 | bar := p.AddBar(int64(total)). | |
| 26 | PrependName(name, len(name), 0). | |
| 27 | PrependETA(4, mpb.DwidthSync|mpb.DextraSpace). | |
| 28 | AppendPercentage(5, 0) | |
| 26 | bar := p.AddBar(int64(total), | |
| 27 | mpb.PrependDecorators( | |
| 28 | decor.Name(name, len(name), 0), | |
| 29 | decor.ETA(4, decor.DSyncSpace), | |
| 30 | ), | |
| 31 | mpb.AppendDecorators( | |
| 32 | decor.Percentage(5, 0), | |
| 33 | ), | |
| 34 | ) | |
| 29 | 35 | |
| 30 | 36 | go func() { |
| 31 | 37 | defer wg.Done() |
| 40 | 46 | |
| 41 | 47 | wg.Wait() |
| 42 | 48 | p.Stop() |
| 43 | // p.AddBar(1) // panic: you cannot reuse p, create new one! | |
| 44 | 49 | fmt.Println("stop") |
| 45 | 50 | } |
| 46 | 51 | |