1
0
Fork 0
mirror of https://github.com/miniflux/v2.git synced 2025-06-27 16:36:00 +00:00

Make configurable the number of days to remove old sessions

This commit is contained in:
Ty Cobb 2019-09-11 22:10:34 -05:00 committed by Frédéric Guillot
parent 8d8f78241d
commit 3a60abbac0
6 changed files with 57 additions and 12 deletions

View file

@ -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) { func TestRunMigrationsWhenUnset(t *testing.T) {
os.Clearenv() os.Clearenv()

View file

@ -27,6 +27,7 @@ const (
defaultDatabaseMaxConns = 20 defaultDatabaseMaxConns = 20
defaultDatabaseMinConns = 1 defaultDatabaseMinConns = 1
defaultArchiveReadDays = 60 defaultArchiveReadDays = 60
defaultRemoveSessionsDays = 30
defaultListenAddr = "127.0.0.1:8080" defaultListenAddr = "127.0.0.1:8080"
defaultCertFile = "" defaultCertFile = ""
defaultKeyFile = "" defaultKeyFile = ""
@ -67,6 +68,7 @@ type Options struct {
certKeyFile string certKeyFile string
cleanupFrequency int cleanupFrequency int
archiveReadDays int archiveReadDays int
removeSessionsDays int
pollingFrequency int pollingFrequency int
batchSize int batchSize int
workerPoolSize int workerPoolSize int
@ -105,6 +107,7 @@ func NewOptions() *Options {
certKeyFile: defaultKeyFile, certKeyFile: defaultKeyFile,
cleanupFrequency: defaultCleanupFrequency, cleanupFrequency: defaultCleanupFrequency,
archiveReadDays: defaultArchiveReadDays, archiveReadDays: defaultArchiveReadDays,
removeSessionsDays: defaultRemoveSessionsDays,
pollingFrequency: defaultPollingFrequency, pollingFrequency: defaultPollingFrequency,
batchSize: defaultBatchSize, batchSize: defaultBatchSize,
workerPoolSize: defaultWorkerPoolSize, workerPoolSize: defaultWorkerPoolSize,
@ -271,6 +274,11 @@ func (o *Options) ArchiveReadDays() int {
return o.archiveReadDays 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. // PocketConsumerKey returns the Pocket Consumer Key if configured.
func (o *Options) PocketConsumerKey(defaultValue string) string { func (o *Options) PocketConsumerKey(defaultValue string) string {
if o.pocketConsumerKey != "" { if o.pocketConsumerKey != "" {

View file

@ -118,6 +118,8 @@ func (p *Parser) parseLines(lines []string) (err error) {
p.opts.batchSize = parseInt(value, defaultBatchSize) p.opts.batchSize = parseInt(value, defaultBatchSize)
case "ARCHIVE_READ_DAYS": case "ARCHIVE_READ_DAYS":
p.opts.archiveReadDays = parseInt(value, defaultArchiveReadDays) p.opts.archiveReadDays = parseInt(value, defaultArchiveReadDays)
case "REMOVE_SESSIONS_DAYS":
p.opts.removeSessionsDays = parseInt(value, defaultRemoveSessionsDays)
case "PROXY_IMAGES": case "PROXY_IMAGES":
p.opts.proxyImages = parseString(value, defaultProxyImages) p.opts.proxyImages = parseString(value, defaultProxyImages)
case "CREATE_ADMIN": case "CREATE_ADMIN":

View file

@ -17,7 +17,7 @@ import (
func Serve(store *storage.Storage, pool *worker.Pool) { func Serve(store *storage.Storage, pool *worker.Pool) {
logger.Info(`Starting scheduler...`) logger.Info(`Starting scheduler...`)
go feedScheduler(store, pool, config.Opts.PollingFrequency(), config.Opts.BatchSize()) 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) { 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) c := time.Tick(time.Duration(frequency) * time.Hour)
for range c { for range c {
nbSessions := store.CleanOldSessions() nbSessions := store.CleanOldSessions(sessionsDays)
nbUserSessions := store.CleanOldUserSessions() nbUserSessions := store.CleanOldUserSessions(sessionsDays)
logger.Info("[Scheduler:Cleanup] Cleaned %d sessions and %d user sessions", nbSessions, nbUserSessions) logger.Info("[Scheduler:Cleanup] Cleaned %d sessions and %d user sessions", nbSessions, nbUserSessions)
if err := store.ArchiveEntries(archiveDays); err != nil { if err := store.ArchiveEntries(archiveDays); err != nil {

View file

@ -100,10 +100,10 @@ func (s *Storage) FlushAllSessions() (err error) {
return nil return nil
} }
// CleanOldSessions removes sessions older than 30 days. // CleanOldSessions removes sessions older than specified days.
func (s *Storage) CleanOldSessions() int64 { func (s *Storage) CleanOldSessions(days int) int64 {
query := `DELETE FROM sessions query := fmt.Sprintf(`DELETE FROM sessions
WHERE id IN (SELECT id FROM sessions WHERE created_at < now() - interval '30 days')` WHERE id IN (SELECT id FROM sessions WHERE created_at < now() - interval '%d days')`, days)
result, err := s.db.Exec(query) result, err := s.db.Exec(query)
if err != nil { if err != nil {

View file

@ -124,10 +124,10 @@ func (s *Storage) RemoveUserSessionByID(userID, sessionID int64) error {
return nil return nil
} }
// CleanOldUserSessions removes user sessions older than 30 days. // CleanOldUserSessions removes user sessions older than specified days.
func (s *Storage) CleanOldUserSessions() int64 { func (s *Storage) CleanOldUserSessions(days int) int64 {
query := `DELETE FROM user_sessions query := fmt.Sprintf(`DELETE FROM user_sessions
WHERE id IN (SELECT id FROM user_sessions WHERE created_at < now() - interval '30 days')` WHERE id IN (SELECT id FROM user_sessions WHERE created_at < now() - interval '%d days')`, days)
result, err := s.db.Exec(query) result, err := s.db.Exec(query)
if err != nil { if err != nil {