Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/reconquest/barely
Simple and extensible status bar to pretty display of Golang program's progress
https://github.com/reconquest/barely
Last synced: about 1 month ago
JSON representation
Simple and extensible status bar to pretty display of Golang program's progress
- Host: GitHub
- URL: https://github.com/reconquest/barely
- Owner: reconquest
- License: mit
- Created: 2016-06-28T12:18:25.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2021-10-11T07:56:41.000Z (about 3 years ago)
- Last Synced: 2024-04-16T00:07:36.985Z (8 months ago)
- Language: Go
- Homepage:
- Size: 5.86 KB
- Stars: 256
- Watchers: 8
- Forks: 10
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-discoveries - barely - simple and extensible status bar to pretty display of Go-lang program's progress _(`Go`)_ (Libraries)
README
# barely [![report](https://goreportcard.com/badge/github.com/reconquest/barely)](https://goreportcard.com/report/reconquest/barely)
Dead simple but yet extensible status bar for displaying interactive progress
for the shell-based tools, written in Go-lang.![barely-example](https://cloud.githubusercontent.com/assets/674812/16452828/4c788a68-3e2c-11e6-8247-19e3db8f71fe.gif)
# Example
```go
package mainimport (
"fmt"
"math/rand"
"os"
"sync"
"sync/atomic"
"time""github.com/reconquest/barely"
"github.com/reconquest/loreley"
)func main() {
format, err := loreley.CompileWithReset(
` {bg 2}{fg 15}{bold} {.Mode} `+
`{bg 253}{fg 0} `+
`{if .Updated}{fg 70}{end}{.Done}{fg 0}/{.Total} `,
nil,
)
if err != nil {
panic(err)
}var (
bar = barely.NewStatusBar(format.Template)
wg = sync.WaitGroup{}status = &struct {
Mode string
Total int
Done int64Updated int64
}{
Mode: "PROCESSING",
Total: 100,
}
)bar.SetStatus(status)
bar.Render(os.Stderr)for i := 1; i <= status.Total; i++ {
wg.Add(1)go func(i int) {
sleep := time.Duration(rand.Intn(i)) * time.Millisecond * 300
time.Sleep(sleep)atomic.AddInt64(&status.Done, 1)
atomic.AddInt64(&status.Updated, 1)if i%10 == 0 {
bar.Clear(os.Stderr)
fmt.Printf("go-routine %d done (%s sleep)\n", i, sleep)
}bar.Render(os.Stderr)
wg.Done()
<-time.After(time.Millisecond * 500)
atomic.AddInt64(&status.Updated, -1)
bar.Render(os.Stderr)
}(i)
}wg.Wait()
bar.Clear(os.Stderr)
}
```