45 lines
805 B
Go
45 lines
805 B
Go
package cleanup
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"time"
|
|
|
|
"scratchbox/internal/storage"
|
|
)
|
|
|
|
type Worker struct {
|
|
store *storage.FilesystemStore
|
|
interval time.Duration
|
|
logger *log.Logger
|
|
}
|
|
|
|
func NewWorker(store *storage.FilesystemStore, interval time.Duration, logger *log.Logger) *Worker {
|
|
return &Worker{
|
|
store: store,
|
|
interval: interval,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
func (w *Worker) Start(ctx context.Context) {
|
|
ticker := time.NewTicker(w.interval)
|
|
defer ticker.Stop()
|
|
|
|
for {
|
|
select {
|
|
case <-ctx.Done():
|
|
return
|
|
case now := <-ticker.C:
|
|
deleted, err := w.store.DeleteExpired(now)
|
|
if err != nil {
|
|
w.logger.Printf("cleanup worker failed: %v", err)
|
|
continue
|
|
}
|
|
if deleted > 0 {
|
|
w.logger.Printf("cleanup worker removed %d expired scratches", deleted)
|
|
}
|
|
}
|
|
}
|
|
}
|