mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-04-20 19:38:39 +00:00
implement structured logging
This commit is contained in:
committed by
Benj Fassbind
parent
0c749922c9
commit
8e62195eb5
@@ -7,6 +7,7 @@ import (
|
||||
|
||||
"github.com/aptly-dev/aptly/aptly"
|
||||
"github.com/cheggaaa/pb"
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/wsxiaoys/terminal/color"
|
||||
)
|
||||
|
||||
@@ -34,6 +35,7 @@ type Progress struct {
|
||||
queue chan printTask
|
||||
bar *pb.ProgressBar
|
||||
barShown bool
|
||||
worker ProgressWorker
|
||||
}
|
||||
|
||||
// Check interface
|
||||
@@ -42,16 +44,19 @@ var (
|
||||
)
|
||||
|
||||
// NewProgress creates new progress instance
|
||||
func NewProgress() *Progress {
|
||||
return &Progress{
|
||||
func NewProgress(structuredLogging bool) *Progress {
|
||||
p := &Progress{
|
||||
stopped: make(chan bool),
|
||||
queue: make(chan printTask, 100),
|
||||
}
|
||||
|
||||
p.worker = progressWorkerFactroy(structuredLogging, p)
|
||||
return p
|
||||
}
|
||||
|
||||
// Start makes progress start its work
|
||||
func (p *Progress) Start() {
|
||||
go p.worker()
|
||||
go p.worker.run()
|
||||
}
|
||||
|
||||
// Shutdown shuts down progress display
|
||||
@@ -173,42 +178,94 @@ func (p *Progress) ColoredPrintf(msg string, a ...interface{}) {
|
||||
}
|
||||
}
|
||||
|
||||
func (p *Progress) worker() {
|
||||
type ProgressWorker interface {
|
||||
run()
|
||||
}
|
||||
|
||||
func progressWorkerFactroy(structuredLogging bool, progress *Progress) ProgressWorker {
|
||||
if structuredLogging {
|
||||
worker := loggerProgressWorker{progress: progress}
|
||||
return &worker
|
||||
}
|
||||
|
||||
worker := standardProgressWorker{progress: progress}
|
||||
return &worker
|
||||
}
|
||||
|
||||
type standardProgressWorker struct {
|
||||
progress *Progress
|
||||
}
|
||||
|
||||
func (w *standardProgressWorker) run() {
|
||||
hasBar := false
|
||||
|
||||
for {
|
||||
task := <-p.queue
|
||||
task := <-w.progress.queue
|
||||
switch task.code {
|
||||
case codeBarEnabled:
|
||||
hasBar = true
|
||||
case codeBarDisabled:
|
||||
hasBar = false
|
||||
case codePrint:
|
||||
if p.barShown {
|
||||
if w.progress.barShown {
|
||||
fmt.Print("\r\033[2K")
|
||||
p.barShown = false
|
||||
w.progress.barShown = false
|
||||
}
|
||||
fmt.Print(task.message)
|
||||
case codePrintStdErr:
|
||||
if p.barShown {
|
||||
if w.progress.barShown {
|
||||
fmt.Print("\r\033[2K")
|
||||
p.barShown = false
|
||||
w.progress.barShown = false
|
||||
}
|
||||
fmt.Fprint(os.Stderr, task.message)
|
||||
case codeProgress:
|
||||
if hasBar {
|
||||
fmt.Print("\r" + task.message)
|
||||
p.barShown = true
|
||||
w.progress.barShown = true
|
||||
}
|
||||
case codeHideProgress:
|
||||
if p.barShown {
|
||||
if w.progress.barShown {
|
||||
fmt.Print("\r\033[2K")
|
||||
p.barShown = false
|
||||
w.progress.barShown = false
|
||||
}
|
||||
case codeFlush:
|
||||
task.reply <- true
|
||||
case codeStop:
|
||||
p.stopped <- true
|
||||
w.progress.stopped <- true
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type loggerProgressWorker struct {
|
||||
progress *Progress
|
||||
}
|
||||
|
||||
func (w *loggerProgressWorker) run() {
|
||||
hasBar := false
|
||||
|
||||
for {
|
||||
task := <-w.progress.queue
|
||||
switch task.code {
|
||||
case codeBarEnabled:
|
||||
hasBar = true
|
||||
case codeBarDisabled:
|
||||
hasBar = false
|
||||
case codePrint, codePrintStdErr:
|
||||
log.Info().Msg(strings.TrimSuffix(task.message, "\n"))
|
||||
case codeProgress:
|
||||
if hasBar {
|
||||
log.Info().Msg(strings.TrimSuffix(task.message, "\n"))
|
||||
w.progress.barShown = true
|
||||
}
|
||||
case codeHideProgress:
|
||||
if w.progress.barShown {
|
||||
w.progress.barShown = false
|
||||
}
|
||||
case codeFlush:
|
||||
task.reply <- true
|
||||
case codeStop:
|
||||
w.progress.stopped <- true
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user