- Notifications
You must be signed in to change notification settings - Fork127
multi progress bar for Go cli applications
License
NotificationsYou must be signed in to change notification settings
vbauerster/mpb
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
mpb is a Go lib for rendering progress bars in terminal applications.
- Multiple Bars: Multiple progress bars are supported
- Dynamic Total: Set total while bar is running
- Dynamic Add/Remove: Dynamically add or remove bars
- Cancellation: Cancel whole rendering process
- Predefined Decorators: Elapsed time,ewma based ETA, Percentage, Bytes counter
- Decorator's width sync: Synchronized decorator's width among multiple bars
package mainimport ("math/rand""time""github.com/vbauerster/mpb/v8""github.com/vbauerster/mpb/v8/decor")funcmain() {// initialize progress container, with custom widthp:=mpb.New(mpb.WithWidth(64))total:=100name:="Single Bar:"// create a single bar, which will inherit container's widthbar:=p.New(int64(total),// BarFillerBuilder with custom stylempb.BarStyle().Lbound("╢").Filler("▌").Tip("▌").Padding("░").Rbound("╟"),mpb.PrependDecorators(// display our name with one space on the rightdecor.Name(name, decor.WC{C:decor.DindentRight|decor.DextraSpace}),// replace ETA decorator with "done" message, OnComplete eventdecor.OnComplete(decor.AverageETA(decor.ET_STYLE_GO),"done"), ),mpb.AppendDecorators(decor.Percentage()), )// simulating some workmax:=100*time.Millisecondfori:=0;i<total;i++ {time.Sleep(time.Duration(rand.Intn(10)+1)*max/10)bar.Increment() }// wait for our bar to complete and flushp.Wait()}
varwg sync.WaitGroup// passed wg will be accounted at p.Wait() callp:=mpb.New(mpb.WithWaitGroup(&wg))total,numBars:=100,3wg.Add(numBars)fori:=0;i<numBars;i++ {name:=fmt.Sprintf("Bar#%d:",i)bar:=p.AddBar(int64(total),mpb.PrependDecorators(// simple name decoratordecor.Name(name),// decor.DSyncWidth bit enables column width synchronizationdecor.Percentage(decor.WCSyncSpace), ),mpb.AppendDecorators(// replace ETA decorator with "done" message, OnComplete eventdecor.OnComplete(// ETA decorator with ewma age of 30decor.EwmaETA(decor.ET_STYLE_GO,30,decor.WCSyncWidth),"done", ), ), )// simulating some workgofunc() {deferwg.Done()rng:=rand.New(rand.NewSource(time.Now().UnixNano()))max:=100*time.Millisecondfori:=0;i<total;i++ {// start variable is solely for EWMA calculation// EWMA's unit of measure is an iteration's durationstart:=time.Now()time.Sleep(time.Duration(rng.Intn(10)+1)*max/10)// we need to call EwmaIncrement to fulfill ewma decorator's contractbar.EwmaIncrement(time.Since(start)) } }() }// wait for passed wg and for all bars to complete and flushp.Wait()
About
multi progress bar for Go cli applications
Topics
Resources
License
Stars
Watchers
Forks
Packages0
No packages published