alice-lg/pkg/store/housekeeping.go
2021-10-22 22:51:11 +02:00

48 lines
980 B
Go

package store
import (
"context"
"fmt"
"log"
"runtime/debug"
"time"
"github.com/alice-lg/alice-lg/pkg/config"
)
// StartHousekeeping is a background task flushing
// memory and expireing caches.
func StartHousekeeping(ctx context.Context, cfg *config.Config) {
for {
if cfg.Housekeeping.Interval > 0 {
time.Sleep(time.Duration(cfg.Housekeeping.Interval) * time.Minute)
} else {
time.Sleep(5 * time.Minute)
}
log.Println("Housekeeping started")
// Expire the caches
log.Println("Expiring caches")
for _, source := range cfg.Sources {
count := source.GetInstance().ExpireCaches()
log.Println("Expired", count, "entries for source", source.Name)
}
if cfg.Housekeeping.ForceReleaseMemory {
// Trigger a GC and SCVG run
log.Println("Freeing memory")
debug.FreeOSMemory()
}
// Check if our services are still required
select {
case <-ctx.Done():
fmt.Println("shutting down Housekeeping...")
return
default:
}
}
}