diff options
-rw-r--r-- | config/config.go | 6 | ||||
-rw-r--r-- | config/config_test.go | 13 | ||||
-rw-r--r-- | service/scheduler/scheduler.go | 6 | ||||
-rw-r--r-- | storage/entry.go | 12 |
4 files changed, 28 insertions, 9 deletions
diff --git a/config/config.go b/config/config.go index 7ba3a93..99afaef 100644 --- a/config/config.go +++ b/config/config.go @@ -21,6 +21,7 @@ const ( defaultBatchSize = 10 defaultDatabaseMaxConns = 20 defaultDatabaseMinConns = 1 + defaultArchiveReadDays = 60 defaultListenAddr = "127.0.0.1:8080" defaultCertFile = "" defaultKeyFile = "" @@ -224,6 +225,11 @@ func (c *Config) HasSchedulerService() bool { return !getBooleanValue("DISABLE_SCHEDULER_SERVICE") } +// ArchiveReadDays returns the number of days after which marking read items as removed. +func (c *Config) ArchiveReadDays() int { + return getIntValue("ARCHIVE_READ_DAYS", defaultArchiveReadDays) +} + // NewConfig returns a new Config. func NewConfig() *Config { cfg := &Config{ diff --git a/config/config_test.go b/config/config_test.go index 1c188db..dc6112e 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -708,6 +708,19 @@ func TestDisableSchedulerService(t *testing.T) { } } +func TestArchiveReadDays(t *testing.T) { + os.Clearenv() + os.Setenv("ARCHIVE_READ_DAYS", "7") + + cfg := NewConfig() + expected := 7 + result := cfg.ArchiveReadDays() + + if result != expected { + t.Fatalf(`Unexpected ARCHIVE_READ_DAYS value, got %v instead of %v`, result, expected) + } +} + func TestRunMigrationsWhenUnset(t *testing.T) { os.Clearenv() diff --git a/service/scheduler/scheduler.go b/service/scheduler/scheduler.go index e938aa1..184bb49 100644 --- a/service/scheduler/scheduler.go +++ b/service/scheduler/scheduler.go @@ -17,7 +17,7 @@ import ( func Serve(cfg *config.Config, store *storage.Storage, pool *worker.Pool) { logger.Info(`Starting scheduler...`) go feedScheduler(store, pool, cfg.PollingFrequency(), cfg.BatchSize()) - go cleanupScheduler(store, cfg.CleanupFrequency()) + go cleanupScheduler(store, cfg.CleanupFrequency(), cfg.ArchiveReadDays()) } func feedScheduler(store *storage.Storage, pool *worker.Pool, frequency, batchSize int) { @@ -33,14 +33,14 @@ func feedScheduler(store *storage.Storage, pool *worker.Pool, frequency, batchSi } } -func cleanupScheduler(store *storage.Storage, frequency int) { +func cleanupScheduler(store *storage.Storage, frequency int, archiveDays int) { c := time.Tick(time.Duration(frequency) * time.Hour) for range c { nbSessions := store.CleanOldSessions() nbUserSessions := store.CleanOldUserSessions() logger.Info("[Scheduler:Cleanup] Cleaned %d sessions and %d user sessions", nbSessions, nbUserSessions) - if err := store.ArchiveEntries(); err != nil { + if err := store.ArchiveEntries(archiveDays); err != nil { logger.Error("[Scheduler:Cleanup] %v", err) } } diff --git a/storage/entry.go b/storage/entry.go index 00ef615..7b80ca0 100644 --- a/storage/entry.go +++ b/storage/entry.go @@ -186,12 +186,12 @@ func (s *Storage) UpdateEntries(userID, feedID int64, entries model.Entries, upd return nil } -// ArchiveEntries changes the status of read items to "removed" after 60 days. -func (s *Storage) ArchiveEntries() error { - query := ` - UPDATE entries SET status='removed' - WHERE id=ANY(SELECT id FROM entries WHERE status='read' AND starred is false AND published_at < now () - '60 days'::interval LIMIT 5000) - ` +// ArchiveEntries changes the status of read items to "removed" after specified days. +func (s *Storage) ArchiveEntries(days int) error { + query := fmt.Sprintf(` + UPDATE entries SET status='removed' + WHERE id=ANY(SELECT id FROM entries WHERE status='read' AND starred is false AND published_at < now () - '%d days'::interval LIMIT 5000) + `, days) if _, err := s.db.Exec(query); err != nil { return fmt.Errorf("unable to archive read entries: %v", err) } |