From e7d499e9bb3dbd1f15cf49b722ba89619d0f56f8 Mon Sep 17 00:00:00 2001 From: losyme Date: Fri, 15 Apr 2022 17:54:42 +0200 Subject: [PATCH] =?UTF-8?q?En=20cours=20de=20d=C3=A9veloppement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/storage/memory/purge.go | 42 ++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/internal/storage/memory/purge.go b/internal/storage/memory/purge.go index 7796881..7b5f9bc 100644 --- a/internal/storage/memory/purge.go +++ b/internal/storage/memory/purge.go @@ -6,7 +6,49 @@ package memory +import ( + "time" + + "forge.chapril.org/dune/jw" +) + func (ms *memoryStorage) Purge() error { + duration := 7 * 24 * time.Hour + + now := time.Now() + deleted := make(map[string]bool) + + ms.sm.Lock() + defer ms.sm.Unlock() + + workflows := make([]*jw.Workflow, 0, len(ms.workflows)) + + for _, wf := range ms.workflows { + if wf.FinishedAt != nil || now.After(wf.FinishedAt.Add(duration)) { + deleted[wf.ID] = true + continue + } + + workflows = append(workflows, wf) + } + + jobs := make([]*jw.Job, 0, len(ms.jobs)) + + for _, job := range ms.jobs { + if job.Workflow == nil { + if job.FinishedAt != nil && now.After(job.FinishedAt.Add(duration)) { + continue + } + } else if deleted[*(job.Workflow)] { + continue + } + + jobs = append(jobs, job) + } + + ms.jobs = jobs + ms.workflows = workflows + return nil }