- Notifications
You must be signed in to change notification settings - Fork130
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
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
No packages published
Contributors12
Uh oh!
There was an error while loading.Please reload this page.