github.com/argoproj/argo-cd/v2@v2.10.9/hack/gen-resources/util/progress_bar.go (about)

     1  package util
     2  
     3  import (
     4  	"fmt"
     5  )
     6  
     7  // Bar ...
     8  type Bar struct {
     9  	percent int64  // progress percentage
    10  	cur     int64  // current progress
    11  	total   int64  // total value for progress
    12  	rate    string // the actual progress bar to be printed
    13  	graph   string // the fill value for progress bar
    14  }
    15  
    16  func (bar *Bar) NewOption(start, total int64) {
    17  	bar.cur = start
    18  	bar.total = total
    19  	if bar.graph == "" {
    20  		bar.graph = "█"
    21  	}
    22  	bar.percent = bar.getPercent()
    23  	for i := 0; i < int(bar.percent); i += 2 {
    24  		bar.rate += bar.graph // initial progress position
    25  	}
    26  }
    27  
    28  func (bar *Bar) getPercent() int64 {
    29  	return int64((float32(bar.cur) / float32(bar.total)) * 100)
    30  }
    31  
    32  func (bar *Bar) Increment() {
    33  	bar.cur += 1
    34  }
    35  
    36  func (bar *Bar) Play() {
    37  	last := bar.percent
    38  	bar.percent = bar.getPercent()
    39  	if bar.percent != last && bar.percent%2 == 0 {
    40  		bar.rate += bar.graph
    41  	}
    42  	fmt.Printf("\r[%-50s]%3d%% %8d/%d", bar.rate, bar.percent, bar.cur, bar.total)
    43  }
    44  
    45  func (bar *Bar) Finish() {
    46  	fmt.Println()
    47  }