Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Bug#1064082: ITP: golang-github-cheggaaa-pb -- Console progress bar for Golang

2 views
Skip to first unread message

Loren M. Lang

unread,
Feb 16, 2024, 6:10:08 PMFeb 16
to
Package: wnpp
Severity: wishlist
Owner: Loren M. Lang <lor...@north-winds.org>

* Package name : golang-github-cheggaaa-pb
Version : 3.1.5-1
Upstream Author : Sergey Cherepanov
* URL : https://github.com/cheggaaa/pb
* License : BSD-3-clause
Programming Lang: Go
Description : Console progress bar for Golang

Terminal progress bar for Go
.
Coverage Status (https://coveralls.io/github/cheggaaa/pb)
.
Installation
.
go get github.com/cheggaaa/pb/v3
.
Documentation for v1 bar available here (/README_V1.md).
.
Quick start
.
package main
.
import (
"time"
.
"github.com/cheggaaa/pb/v3"
)
.
func main() {
count := 100000
.
// create and start new bar
bar := pb.StartNew(count)
.
// start bar from 'default' template
// bar := pb.Default.Start(count)
.
// start bar from 'simple' template
// bar := pb.Simple.Start(count)
.
// start bar from 'full' template
// bar := pb.Full.Start(count)
.
for i := 0; i < count; i++ {
bar.Increment()
time.Sleep(time.Millisecond)
}
.
// finish bar
bar.Finish()
}
.
Result will be like this:
.
> go run test.go
37158 / 100000 [---------------->_______________________________] 37.16% 916 p/s
.
Settings
.
// create bar
bar := pb.New(count)
.
// refresh info every second (default 200ms)
bar.SetRefreshRate(time.Second)
.
// force set io.Writer, by default it's os.Stderr
bar.SetWriter(os.Stdout)
.
// bar will format numbers as bytes (B, KiB, MiB, etc)
bar.Set(pb.Bytes, true)
.
// bar use SI bytes prefix names (B, kB) instead of IEC (B, KiB)
bar.Set(pb.SIBytesPrefix, true)
.
// set custom bar template
bar.SetTemplateString(myTemplate)
.
// check for error after template set
if err := bar.Err(); err != nil {
return
}
.
// start bar
bar.Start()
.
Progress bar for IO Operations
.
package main
.
import (
"crypto/rand"
"io"
"io/ioutil"
.
"github.com/cheggaaa/pb/v3"
)
.
func main() {
var limit int64 = 1024 * 1024 * 500
.
// we will copy 500 MiB from /dev/rand to /dev/null
reader := io.LimitReader(rand.Reader, limit)
writer := ioutil.Discard
.
// start new bar
bar := pb.Full.Start64(limit)
.
// create proxy reader
barReader := bar.NewProxyReader(reader)
.
// copy from proxy reader
io.Copy(writer, barReader)
.
// finish bar
bar.Finish()
}
.
Custom Progress Bar templates
.
Rendering based on builtin text/template
(https://pkg.go.dev/text/template) package. You can use existing pb's
elements or create you own.
.
All available elements are described in the element.go (/v3/element.go)
file.
.
All in one example:
.
tmpl := `{{ red "With funcs:" }} {{ bar . "<" "-" (cycle . "↖" "↗" "↘"
"↙" ) "." ">"}} {{speed . | rndcolor }} {{percent .}} {{string .
"my_green_string" | green}} {{string . "my_blue_string" | blue}}`
.
// start bar based on our template
bar := pb.ProgressBarTemplate(tmpl).Start64(limit)
.
// set values for string elements
bar.Set("my_green_string", "green").Set("my_blue_string", "blue")


This is a dependency for pwru which is in RFP and I plan to complete packaging
shortly. pwru is an eBPF-based Linux kernel networking debugger.

Guillem Jover

unread,
Feb 16, 2024, 8:40:04 PMFeb 16
to
Hi!

On Fri, 2024-02-16 at 15:07:55 -0800, Loren M. Lang wrote:
> Package: wnpp
> Severity: wishlist
> Owner: Loren M. Lang <lor...@north-winds.org>

> * Package name : golang-github-cheggaaa-pb
> Version : 3.1.5-1
> Upstream Author : Sergey Cherepanov
> * URL : https://github.com/cheggaaa/pb
> * License : BSD-3-clause
> Programming Lang: Go
> Description : Console progress bar for Golang

> This is a dependency for pwru which is in RFP and I plan to complete packaging
> shortly. pwru is an eBPF-based Linux kernel networking debugger.

This is already packaged as:

golang-github-cheggaaa-pb.v3-dev
golang-gopkg-cheggaaa-pb.v2-dev
golang-gopkg-cheggaaa-pb.v1-dev

Thanks,
Guillem
0 new messages