From 03526b65ef45ca225597ecbc1938ac61f1c4712f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Bouzour=C3=A8ne?= Date: Tue, 21 Jan 2025 15:59:51 +0100 Subject: [PATCH] Purge old expired sessions --- helpers/jobs.go | 30 ++++++++++++++++++++++++++++++ jobs/saved_session.go | 40 ++++++++++++++++++++++++++++++++++++++++ main.go | 5 +++++ 3 files changed, 75 insertions(+) create mode 100644 helpers/jobs.go create mode 100644 jobs/saved_session.go diff --git a/helpers/jobs.go b/helpers/jobs.go new file mode 100644 index 0000000..77a8547 --- /dev/null +++ b/helpers/jobs.go @@ -0,0 +1,30 @@ +package helpers + +import ( + "time" +) + +func RegisterJob(interval time.Duration, name string, job func(string) error) { + log := GetLogger() + log.Info( + "registering job", + "name", name, + "interval", interval, + ) + + for { + go func(job func(string) error, name string) { + log := GetLogger() + log.Info("starting job", "name", name) + + err := job(name) + if err != nil { + log.Error(err, "job", name) + } + + log.Info("job finished", "name", name) + }(job, name) + + time.Sleep(interval) + } +} diff --git a/jobs/saved_session.go b/jobs/saved_session.go new file mode 100644 index 0000000..2c69db4 --- /dev/null +++ b/jobs/saved_session.go @@ -0,0 +1,40 @@ +package jobs + +import ( + "time" + + "git.readonly.ch/bouzoure/pop-camarades/helpers" + "git.readonly.ch/bouzoure/pop-camarades/models" +) + +func CleanSavedSessions(jobName string) error { + log := helpers.GetLogger() + + db, err := helpers.GetDatabase() + if err != nil { + return err + } + + log.Info("fetching expired sessions", "job", jobName) + + result := db.Unscoped().Delete( + &models.UserSavedSession{}, + "expiration <= ?", time.Now(), + ) + + if result.Error != nil { + return result.Error + } + + if result.RowsAffected < 1 { + log.Info("found no expired sessions", "job", jobName) + } else { + log.Info( + "removed expired sessions", + "sessions", result.RowsAffected, + "job", jobName, + ) + } + + return nil +} diff --git a/main.go b/main.go index 2176f97..cd7a745 100644 --- a/main.go +++ b/main.go @@ -5,9 +5,11 @@ import ( "fmt" "io/fs" "net/http" + "time" "git.readonly.ch/bouzoure/pop-camarades/controllers" "git.readonly.ch/bouzoure/pop-camarades/helpers" + "git.readonly.ch/bouzoure/pop-camarades/jobs" "git.readonly.ch/bouzoure/pop-camarades/middlewares" "github.com/flosch/pongo2/v6" "github.com/gofiber/fiber/v2" @@ -43,6 +45,9 @@ func main() { } } + // RegisterJobs + go helpers.RegisterJob(60*time.Minute, "clean saved sessions", jobs.CleanSavedSessions) + // Create a new engine var engine *django.Engine if config.Debug {