mirror of
https://github.com/lus/pasty.git
synced 2023-08-10 21:13:09 +03:00
49 lines
854 B
Go
49 lines
854 B
Go
package cleanup
|
|
|
|
import (
|
|
"context"
|
|
"github.com/lus/pasty/internal/pastes"
|
|
"github.com/rs/zerolog/log"
|
|
"time"
|
|
)
|
|
|
|
type Task struct {
|
|
Interval time.Duration
|
|
MaxPasteAge time.Duration
|
|
Repository pastes.Repository
|
|
|
|
running bool
|
|
stop chan struct{}
|
|
}
|
|
|
|
func (task *Task) Start() {
|
|
if task.running {
|
|
return
|
|
}
|
|
task.stop = make(chan struct{}, 1)
|
|
go func() {
|
|
for {
|
|
select {
|
|
case <-time.After(task.Interval):
|
|
n, err := task.Repository.DeleteOlderThan(context.Background(), task.MaxPasteAge)
|
|
if err != nil {
|
|
log.Err(err).Msg("Could not clean up expired pastes.")
|
|
continue
|
|
}
|
|
log.Debug().Int("amount", n).Msg("Cleaned up expired pastes.")
|
|
case <-task.stop:
|
|
task.running = false
|
|
return
|
|
}
|
|
}
|
|
}()
|
|
task.running = true
|
|
}
|
|
|
|
func (task *Task) Stop() {
|
|
if !task.running {
|
|
return
|
|
}
|
|
close(task.stop)
|
|
}
|