aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Ty Cobb <ty.cobb.m@gmail.com>2019-09-11 22:10:34 -0500
committerGravatar Frédéric Guillot <fred@miniflux.net>2019-09-11 20:10:33 -0700
commit3a60abbac07bd342f261fccb46bfd5b0039b3f74 (patch)
tree2c1608b4918f83493f9a8e1a8482ce21d793690d
parent8d8f78241d303381abf6879cc007ca9cbc2a12e2 (diff)
Make configurable the number of days to remove old sessions
-rw-r--r--config/config_test.go35
-rw-r--r--config/options.go8
-rw-r--r--config/parser.go2
-rw-r--r--service/scheduler/scheduler.go8
-rw-r--r--storage/session.go8
-rw-r--r--storage/user_session.go8
6 files changed, 57 insertions, 12 deletions
diff --git a/config/config_test.go b/config/config_test.go
index 0e10345..353b87c 100644
--- a/config/config_test.go
+++ b/config/config_test.go
@@ -882,6 +882,41 @@ func TestArchiveReadDays(t *testing.T) {
}
}
+func TestRemoveSessionsDays(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("REMOVE_SESSIONS_DAYS", "7")
+
+ parser := NewParser()
+ opts, err := parser.ParseEnvironmentVariables()
+ if err != nil {
+ t.Fatalf(`Parsing failure: %v`, err)
+ }
+
+ expected := 7
+ result := opts.RemoveSessionsDays()
+
+ if result != expected {
+ t.Fatalf(`Unexpected REMOVE_SESSIONS_DAYS value, got %v instead of %v`, result, expected)
+ }
+}
+
+func TestDefaultRemoveSessionsDays(t *testing.T) {
+ os.Clearenv()
+
+ parser := NewParser()
+ opts, err := parser.ParseEnvironmentVariables()
+ if err != nil {
+ t.Fatalf(`Parsing failure: %v`, err)
+ }
+
+ expected := 30
+ result := opts.RemoveSessionsDays()
+
+ if result != expected {
+ t.Fatalf(`Unexpected REMOVE_SESSIONS_DAYS value, got %v instead of %v`, result, expected)
+ }
+}
+
func TestRunMigrationsWhenUnset(t *testing.T) {
os.Clearenv()
diff --git a/config/options.go b/config/options.go
index e23a4ae..a5c75b8 100644
--- a/config/options.go
+++ b/config/options.go
@@ -27,6 +27,7 @@ const (
defaultDatabaseMaxConns = 20
defaultDatabaseMinConns = 1
defaultArchiveReadDays = 60
+ defaultRemoveSessionsDays = 30
defaultListenAddr = "127.0.0.1:8080"
defaultCertFile = ""
defaultKeyFile = ""
@@ -67,6 +68,7 @@ type Options struct {
certKeyFile string
cleanupFrequency int
archiveReadDays int
+ removeSessionsDays int
pollingFrequency int
batchSize int
workerPoolSize int
@@ -105,6 +107,7 @@ func NewOptions() *Options {
certKeyFile: defaultKeyFile,
cleanupFrequency: defaultCleanupFrequency,
archiveReadDays: defaultArchiveReadDays,
+ removeSessionsDays: defaultRemoveSessionsDays,
pollingFrequency: defaultPollingFrequency,
batchSize: defaultBatchSize,
workerPoolSize: defaultWorkerPoolSize,
@@ -271,6 +274,11 @@ func (o *Options) ArchiveReadDays() int {
return o.archiveReadDays
}
+// RemoveSessionsDays returns the number of days after which to remove sessions.
+func (o *Options) RemoveSessionsDays() int {
+ return o.removeSessionsDays
+}
+
// PocketConsumerKey returns the Pocket Consumer Key if configured.
func (o *Options) PocketConsumerKey(defaultValue string) string {
if o.pocketConsumerKey != "" {
diff --git a/config/parser.go b/config/parser.go
index 7e70db5..e151c59 100644
--- a/config/parser.go
+++ b/config/parser.go
@@ -118,6 +118,8 @@ func (p *Parser) parseLines(lines []string) (err error) {
p.opts.batchSize = parseInt(value, defaultBatchSize)
case "ARCHIVE_READ_DAYS":
p.opts.archiveReadDays = parseInt(value, defaultArchiveReadDays)
+ case "REMOVE_SESSIONS_DAYS":
+ p.opts.removeSessionsDays = parseInt(value, defaultRemoveSessionsDays)
case "PROXY_IMAGES":
p.opts.proxyImages = parseString(value, defaultProxyImages)
case "CREATE_ADMIN":
diff --git a/service/scheduler/scheduler.go b/service/scheduler/scheduler.go
index 1d51356..a5e41d5 100644
--- a/service/scheduler/scheduler.go
+++ b/service/scheduler/scheduler.go
@@ -17,7 +17,7 @@ import (
func Serve(store *storage.Storage, pool *worker.Pool) {
logger.Info(`Starting scheduler...`)
go feedScheduler(store, pool, config.Opts.PollingFrequency(), config.Opts.BatchSize())
- go cleanupScheduler(store, config.Opts.CleanupFrequency(), config.Opts.ArchiveReadDays())
+ go cleanupScheduler(store, config.Opts.CleanupFrequency(), config.Opts.ArchiveReadDays(), config.Opts.RemoveSessionsDays())
}
func feedScheduler(store *storage.Storage, pool *worker.Pool, frequency, batchSize int) {
@@ -33,11 +33,11 @@ func feedScheduler(store *storage.Storage, pool *worker.Pool, frequency, batchSi
}
}
-func cleanupScheduler(store *storage.Storage, frequency int, archiveDays int) {
+func cleanupScheduler(store *storage.Storage, frequency int, archiveDays int, sessionsDays int) {
c := time.Tick(time.Duration(frequency) * time.Hour)
for range c {
- nbSessions := store.CleanOldSessions()
- nbUserSessions := store.CleanOldUserSessions()
+ nbSessions := store.CleanOldSessions(sessionsDays)
+ nbUserSessions := store.CleanOldUserSessions(sessionsDays)
logger.Info("[Scheduler:Cleanup] Cleaned %d sessions and %d user sessions", nbSessions, nbUserSessions)
if err := store.ArchiveEntries(archiveDays); err != nil {
diff --git a/storage/session.go b/storage/session.go
index 8c1f615..f57d2eb 100644
--- a/storage/session.go
+++ b/storage/session.go
@@ -100,10 +100,10 @@ func (s *Storage) FlushAllSessions() (err error) {
return nil
}
-// CleanOldSessions removes sessions older than 30 days.
-func (s *Storage) CleanOldSessions() int64 {
- query := `DELETE FROM sessions
- WHERE id IN (SELECT id FROM sessions WHERE created_at < now() - interval '30 days')`
+// CleanOldSessions removes sessions older than specified days.
+func (s *Storage) CleanOldSessions(days int) int64 {
+ query := fmt.Sprintf(`DELETE FROM sessions
+ WHERE id IN (SELECT id FROM sessions WHERE created_at < now() - interval '%d days')`, days)
result, err := s.db.Exec(query)
if err != nil {
diff --git a/storage/user_session.go b/storage/user_session.go
index 9c1381e..5fa0f0a 100644
--- a/storage/user_session.go
+++ b/storage/user_session.go
@@ -124,10 +124,10 @@ func (s *Storage) RemoveUserSessionByID(userID, sessionID int64) error {
return nil
}
-// CleanOldUserSessions removes user sessions older than 30 days.
-func (s *Storage) CleanOldUserSessions() int64 {
- query := `DELETE FROM user_sessions
- WHERE id IN (SELECT id FROM user_sessions WHERE created_at < now() - interval '30 days')`
+// CleanOldUserSessions removes user sessions older than specified days.
+func (s *Storage) CleanOldUserSessions(days int) int64 {
+ query := fmt.Sprintf(`DELETE FROM user_sessions
+ WHERE id IN (SELECT id FROM user_sessions WHERE created_at < now() - interval '%d days')`, days)
result, err := s.db.Exec(query)
if err != nil {