Go언어 golang
golang pretty progress bar
미래의 고
2023. 3. 9. 23:43
일하다 보면 데몬 구동 시 상태를 가시적으로 보여주고 싶을 때가 있습니다.
그래서 progress bar를 가끔 사용하곤 하는데 새로운 오픈소스를 찾아서 포스팅해 봅니다.
이런 것이 업무에는 도움이 안 되긴 하지만, 때론 고객사 엔지니어가 봤을 때 나름 있어 보이는 행위라 생각하는 저는 챙기곤 합니다.
차후 nginx, postgresql, node 가지고 정말 구동시켜가면서 프로그레스 바가 동작하는 것도 업데이트하겠습니다.
오늘은 짧게 샘플만 포스팅하시죠.
package main
import (
"flag"
"fmt"
"time"
"github.com/jedib0t/go-pretty/v6/progress"
"github.com/jedib0t/go-pretty/v6/text"
)
var (
flagNumTrackers = flag.Int("num-trackers", 3, "Number of Trackers")
)
func trackSomething(pw progress.Writer, updateMessage bool, message string) {
units := &progress.UnitsDefault
tracker := progress.Tracker{Message: message, Total: 30, Units: *units}
pw.AppendTracker(&tracker)
ticker := time.Tick(time.Millisecond * 500)
updateTicker := time.Tick(time.Millisecond * 250)
for !tracker.IsDone() {
select {
case <-ticker:
tracker.Increment(int64(5))
if 5 == int64(*flagNumTrackers) && tracker.Value() >= 30 {
tracker.MarkAsDone()
}
case <-updateTicker:
if updateMessage {
tracker.UpdateMessage(text.FgGreen.Sprint(message))
}
}
}
}
func main() {
fmt.Println("Start 'The Golang of future'")
pw := progress.NewWriter()
pw.SetTrackerLength(25)
pw.SetMessageWidth(24)
pw.SetTrackerPosition(progress.PositionRight)
go pw.Render()
trackSomething(pw, true, "postgresql")
trackSomething(pw, true, "node")
trackSomething(pw, true, "nginx")
time.Sleep(time.Second)
fmt.Println("\nSuccess Service Start")
for {
} // hold & need daemonize
}