Add cron tasks to distillery

This commit is contained in:
Tom Wiesing 2022-12-07 10:30:48 +01:00
parent 790460f9de
commit f52fe6abf3
No known key found for this signature in database
19 changed files with 353 additions and 141 deletions

View file

@ -5,10 +5,28 @@ import (
"fmt"
"io"
"strings"
"time"
"github.com/rs/zerolog"
"golang.org/x/term"
)
func Log[T any](operation func() T, name string, context context.Context) (res T) {
var took time.Duration
logger := zerolog.Ctx(context)
logger.Log().Msg(name)
defer func() {
logger.Log().Dur("took", took).Msg(name)
}()
start := time.Now()
res = operation()
took = time.Since(start)
return
}
// LogOperation logs a message that is displayed to the user, and then increases the log indent level.
func LogOperation(operation func() error, progress io.Writer, ctx context.Context, format string, args ...interface{}) error {
logOperation(progress, ctx, getIndent(progress), format, args...)

View file

@ -6,6 +6,25 @@ import (
"time"
)
// NewTimer creates a new timer with undefined interval.
// The timer is stopped.
func NewTimer() *time.Timer {
timer := time.NewTimer(time.Second)
StopTimer(timer)
return timer
}
// StopTimer stops t and drains the C channel.
func StopTimer(t *time.Timer) {
t.Stop()
// try to stop
select {
case <-t.C:
default:
}
}
// TickContext is like [time.Tick], but closes the returned channel once the context closes.
// As such it can be recovered by the garbage collector; see [time.TickContext].
//