diff --git a/_examples/poplog/main.go b/_examples/poplog/main.go new file mode 100644 index 0000000..27da893 --- /dev/null +++ b/_examples/poplog/main.go @@ -0,0 +1,63 @@ +package main + +import ( + "fmt" + "io" + "math/rand" + "sync" + "time" + + "github.com/vbauerster/mpb/v4" + "github.com/vbauerster/mpb/v4/decor" +) + +func main() { + rand.Seed(time.Now().UnixNano()) + p := mpb.New(mpb.PopCompletedMode()) + + total, numBars := 100, 2 + for i := 0; i < numBars; i++ { + name := fmt.Sprintf("Bar#%d:", i) + bar := p.AddBar(int64(total), + mpb.BarNoPop(), + mpb.PrependDecorators( + decor.Name(name), + decor.Percentage(decor.WCSyncSpace), + ), + mpb.AppendDecorators( + decor.OnComplete( + decor.EwmaETA(decor.ET_STYLE_GO, 60), "done!", + ), + ), + ) + // simulating some work + go func() { + max := 100 * time.Millisecond + for i := 0; i < total; i++ { + start := time.Now() + time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) + bar.Increment(time.Since(start)) + } + }() + } + + var wg sync.WaitGroup + wg.Add(1) + go func() { + defer wg.Done() + max := 3000 * time.Millisecond + for i := 0; i < 10; i++ { + p.Add(0, makeLogBar(fmt.Sprintf("some log: %d", i))).SetTotal(0, true) + time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) + } + }() + + wg.Wait() + p.Wait() +} + +func makeLogBar(msg string) mpb.FillerFunc { + return func(w io.Writer, width int, st *decor.Statistics) { + fmt.Fprint(w, msg) + } +}