refactor main tickers

This commit is contained in:
sentriz
2023-10-06 03:01:55 +01:00
parent 1ea2402559
commit 318b62415d

View File

@@ -289,80 +289,6 @@ func main() {
return server.ListenAndServe()
})
errgrp.Go(func() error {
defer logJob("session clean")()
ticker := time.NewTicker(10 * time.Minute)
defer ticker.Stop()
for {
select {
case <-ctx.Done():
return nil
case <-ticker.C:
sessDB.Cleanup()
}
}
})
errgrp.Go(func() error {
defer logJob("podcast refresh")()
ticker := time.NewTicker(time.Hour)
defer ticker.Stop()
for {
select {
case <-ctx.Done():
return nil
case <-ticker.C:
if err := podcast.RefreshPodcasts(); err != nil {
log.Printf("failed to refresh some feeds: %s", err)
}
}
}
})
errgrp.Go(func() error {
if *confPodcastPurgeAgeDays == 0 {
return nil
}
defer logJob("podcast purge")()
ticker := time.NewTicker(24 * time.Hour)
defer ticker.Stop()
for {
select {
case <-ctx.Done():
return nil
case <-ticker.C:
if err := podcast.PurgeOldPodcasts(time.Duration(*confPodcastPurgeAgeDays) * 24 * time.Hour); err != nil {
log.Printf("error purging old podcasts: %v", err)
}
}
}
})
errgrp.Go(func() error {
if *confScanIntervalMins == 0 {
return nil
}
defer logJob("scan timer")()
ticker := time.NewTicker(time.Duration(*confScanIntervalMins) * time.Minute)
defer ticker.Stop()
for {
select {
case <-ctx.Done():
return nil
case <-ticker.C:
if _, err := scannr.ScanAndClean(scanner.ScanOptions{}); err != nil {
log.Printf("error scanning: %v", err)
}
}
}
})
errgrp.Go(func() error {
if !*confScanWatcher {
return nil
@@ -412,6 +338,56 @@ func main() {
return nil
})
errgrp.Go(func() error {
defer logJob("session clean")()
ctxTick(ctx, 10*time.Minute, func() {
sessDB.Cleanup()
})
return nil
})
errgrp.Go(func() error {
defer logJob("podcast refresh")()
ctxTick(ctx, 1*time.Hour, func() {
if err := podcast.RefreshPodcasts(); err != nil {
log.Printf("failed to refresh some feeds: %s", err)
}
})
return nil
})
errgrp.Go(func() error {
if *confPodcastPurgeAgeDays == 0 {
return nil
}
defer logJob("podcast purge")()
ctxTick(ctx, 24*time.Hour, func() {
if err := podcast.PurgeOldPodcasts(time.Duration(*confPodcastPurgeAgeDays) * 24 * time.Hour); err != nil {
log.Printf("error purging old podcasts: %v", err)
}
})
return nil
})
errgrp.Go(func() error {
if *confScanIntervalMins == 0 {
return nil
}
defer logJob("scan timer")()
ctxTick(ctx, time.Duration(*confScanIntervalMins)*time.Minute, func() {
if _, err := scannr.ScanAndClean(scanner.ScanOptions{}); err != nil {
log.Printf("error scanning: %v", err)
}
})
return nil
})
errgrp.Go(func() error {
if _, _, err := lastfmClientKeySecretFunc(); err != nil {
return nil
@@ -419,18 +395,12 @@ func main() {
defer logJob("refresh artist info")()
ticker := time.NewTicker(8 * time.Second)
defer ticker.Stop()
for {
select {
case <-ctx.Done():
return nil
case <-ticker.C:
if err := artistInfoCache.Refresh(); err != nil {
log.Printf("error in artist info cache: %v", err)
}
ctxTick(ctx, 8*time.Second, func() {
if err := artistInfoCache.Refresh(); err != nil {
log.Printf("error in artist info cache: %v", err)
}
}
})
return nil
})
errgrp.Go(func() error {
@@ -541,3 +511,17 @@ func logJob(jobName string) func() {
log.Printf("starting job %q", jobName)
return func() { log.Printf("stopped job %q", jobName) }
}
func ctxTick(ctx context.Context, interval time.Duration, f func()) {
ticker := time.NewTicker(interval)
defer ticker.Stop()
for {
select {
case <-ctx.Done():
return
case <-ticker.C:
f()
}
}
}