48 lines
980 B
Go
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:
|
|
}
|
|
}
|
|
}
|