[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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



Package: wnpp
Severity: wishlist
Owner: Loren M. Lang <lorenl@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.


Reply to: