51 lines
1.0 KiB
Go
51 lines
1.0 KiB
Go
package log
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// ListTask is a Task implementation that logs all updates in a list where each
|
|
// entry is line-delimited.
|
|
//
|
|
// For example:
|
|
// entry #1
|
|
// entry #2
|
|
// msg: ..., done
|
|
type ListTask struct {
|
|
msg string
|
|
ch chan *Update
|
|
}
|
|
|
|
// NewListTask instantiates a new *ListTask instance with the given message.
|
|
func NewListTask(msg string) *ListTask {
|
|
return &ListTask{
|
|
msg: msg,
|
|
ch: make(chan *Update, 1),
|
|
}
|
|
}
|
|
|
|
// Entry logs a line-delimited task entry.
|
|
func (l *ListTask) Entry(update string) {
|
|
l.ch <- &Update{
|
|
S: fmt.Sprintf("%s\n", update),
|
|
At: time.Now(),
|
|
}
|
|
}
|
|
|
|
func (l *ListTask) Complete() {
|
|
l.ch <- &Update{
|
|
S: fmt.Sprintf("%s: ...", l.msg),
|
|
At: time.Now(),
|
|
}
|
|
close(l.ch)
|
|
}
|
|
|
|
// Throttled implements the Task.Throttled function and ensures that all log
|
|
// updates are printed to the sink.
|
|
func (l *ListTask) Throttled() bool { return false }
|
|
|
|
// Updates implements the Task.Updates function and returns a channel of updates
|
|
// to log to the sink.
|
|
func (l *ListTask) Updates() <-chan *Update { return l.ch }
|