63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package dataretention
|
|
|
|
import (
|
|
"service-operation/pocketbase"
|
|
"time"
|
|
)
|
|
|
|
// Scheduler handles periodic data retention cleanup
|
|
type Scheduler struct {
|
|
service *Service
|
|
interval time.Duration
|
|
stopChan chan bool
|
|
}
|
|
|
|
// NewScheduler creates a new cleanup scheduler
|
|
func NewScheduler(pbClient *pocketbase.PocketBaseClient, interval time.Duration) *Scheduler {
|
|
return &Scheduler{
|
|
service: NewService(pbClient),
|
|
interval: interval,
|
|
stopChan: make(chan bool),
|
|
}
|
|
}
|
|
|
|
// Start begins the periodic cleanup process
|
|
func (s *Scheduler) Start() {
|
|
// log.Printf("Starting data retention scheduler with interval: %v", s.interval)
|
|
|
|
ticker := time.NewTicker(s.interval)
|
|
defer ticker.Stop()
|
|
|
|
// Run initial cleanup
|
|
go func() {
|
|
if err := s.service.ScheduleCleanup(); err != nil {
|
|
// log.Printf("Initial cleanup failed: %v", err)
|
|
}
|
|
}()
|
|
|
|
for {
|
|
select {
|
|
case <-ticker.C:
|
|
go func() {
|
|
if err := s.service.ScheduleCleanup(); err != nil {
|
|
// log.Printf("Scheduled cleanup failed: %v", err)
|
|
}
|
|
}()
|
|
case <-s.stopChan:
|
|
// log.Println("Data retention scheduler stopped")
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
// Stop stops the scheduler
|
|
func (s *Scheduler) Stop() {
|
|
// log.Println("Stopping data retention scheduler...")
|
|
s.stopChan <- true
|
|
}
|
|
|
|
// RunOnce executes cleanup immediately (for manual triggers)
|
|
func (s *Scheduler) RunOnce() (*CleanupSummary, error) {
|
|
// log.Println("Running manual data retention cleanup...")
|
|
return s.service.CleanupOldRecords()
|
|
} |