Source: golang-github-vbauerster-mpb
Section: devel
Priority: optional
Maintainer: Debian Go Packaging Team <team+pkg-go@tracker.debian.org>
Uploaders: Reinhard Tartler <siretart@tauware.de>
Build-Depends: debhelper (>= 11),
dh-golang,
golang-any,
golang-github-mattn-go-isatty-dev,
golang-github-vividcortex-ewma-dev,
golang-golang-x-crypto-dev
Standards-Version: 4.2.1
Homepage: https://github.com/vbauerster/mpb
Vcs-Browser: https://salsa.debian.org/go-team/packages/golang-github-vbauerster-mpb
Vcs-Git: https://salsa.debian.org/go-team/packages/golang-github-vbauerster-mpb.git
XS-Go-Import-Path: github.com/vbauerster/mpb
Testsuite: autopkgtest-pkg-go
Package: golang-github-vbauerster-mpb-dev
Architecture: all
Depends: ${misc:Depends},
golang-github-mattn-go-isatty-dev,
golang-github-vividcortex-ewma-dev,
golang-golang-x-crypto-dev
Description: multi progress bar for Go cli applications
Multi Progress Bar GoDoc (https://godoc.org/github.com/vbauerster/mpb)
Build Status (https://travis-ci.org/vbauerster/mpb) Go Report Card
(https://goreportcard.com/report/github.com/vbauerster/mpb)
.
mpb is a Go lib for rendering progress bars in terminal applications.
Features• 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
(https://github.com/VividCortex/ewma) based ETA, Percentage, Bytes
counter• Decorator's width sync: Synchronized decorator's width among
multiple barsUsageRendering single bar (_examples/singleBar/main.go)
```go package main
.
import (
"math/rand" "time"
"github.com/vbauerster/mpb/v4" "github.com/vbauerster/mpb/v4/decor"
.
)
.
func main() {
// initialize progress container, with custom width p :=
mpb.New(mpb.WithWidth(64))
total := 100 name := "Single Bar:" // adding a single bar, which will
inherit container's width bar := p.AddBar(int64(total),
// set custom bar style, default one is "[=>-]"
mpb.BarStyle("╢▌▌░╟"), mpb.PrependDecorators(
// display our name with one space on the right decor.Name(name,
decor.WC{W: len(name) + 1, C: decor.DidentRight}), // replace ETA
decorator with "done" message, OnComplete event decor.OnComplete(
// ETA decorator with ewma age of 60, and width reservation
of 4 decor.EwmaETA(decor.ET_STYLE_GO, 60, decor.WC{W: 4}),
"done",
),
), mpb.AppendDecorators(decor.Percentage()),
) // simulating some work max := 100 * time.Millisecond for i := 0; i <
total; i++ {
start := time.Now() time.Sleep(time.Duration(rand.Intn(10)+1) *
max / 10) // ewma based decorators require work duration measurement
bar.IncrBy(1, time.Since(start))
} // wait for our bar to complete and flush p.Wait()
.
} ``` Rendering multiple bars (_examples/multiBars//main.go) ```go
var wg sync.WaitGroup // pass &wg (optional), so p will wait for it
eventually p := mpb.New(mpb.WithWaitGroup(&wg)) total, numBars :=
100, 3 wg.Add(numBars)
for i := 0; i < numBars; i++ {
name := fmt.Sprintf("Bar#%d:", i) bar := p.AddBar(int64(total),
mpb.PrependDecorators(
// simple name decorator decor.Name(name), //
decor.DSyncWidth bit enables column width synchronization
decor.Percentage(decor.WCSyncSpace),
), mpb.AppendDecorators(
// replace ETA decorator with "done" message, OnComplete
event decor.OnComplete(
// ETA decorator with ewma age of 60
decor.EwmaETA(decor.ET_STYLE_GO, 60), "done",
),
),
) // simulating some work go func() {
defer wg.Done() max := 100 * time.Millisecond for i := 0; i <
total; i++ {
start := time.Now() time.Sleep(time.Duration(rand.Intn(10)+1)
* max / 10) // ewma based decorators require work duration
measurement bar.IncrBy(1, time.Since(start))
}
}()
} // Waiting for passed &wg and for all bars to complete and flush
p.Wait()
.
``` Dynamic total (_examples/dynTotal/main.go) dynamic total
Complex example (_examples/complex/main.go) complex Bytes counters
(_examples/io/main.go) byte counters