From cf62661399dfc30ede62d6701513ac82446a5f6c Mon Sep 17 00:00:00 2001 From: Kato Twofold Date: Fri, 20 May 2022 01:59:53 +0300 Subject: [PATCH] + Cleanup timer for old files --- .env.example | 4 +- lib/controllers/controllers_taskmanager.go | 34 +++++++++---- lib/objects/objects_post.go | 55 ++++++++++++++++++++++ main.go | 3 +- 4 files changed, 83 insertions(+), 13 deletions(-) diff --git a/.env.example b/.env.example index c8d58d3..36d579a 100644 --- a/.env.example +++ b/.env.example @@ -16,5 +16,5 @@ API_BAN_LIMIT=300 # Wether or not to run it all in dev-mode DEV_MODE=0 -# Maximum file storage age in minutes -CLEANUP_MAX_AGE=1 \ No newline at end of file +# Maximum file storage age in minutes, set to -1 to disable +CLEANUP_MAX_AGE=43200 # Default is a month \ No newline at end of file diff --git a/lib/controllers/controllers_taskmanager.go b/lib/controllers/controllers_taskmanager.go index 3dd74d8..bd2348e 100644 --- a/lib/controllers/controllers_taskmanager.go +++ b/lib/controllers/controllers_taskmanager.go @@ -1,22 +1,36 @@ package controllers import ( + "fmt" + "os" + "strconv" "time" + + "github.com/JustKato/FreePad/lib/objects" ) func TaskManager() { - // Run the migrations function - go handleMigrations() + // Get the cleanup interval + cleanupIntervalString, exists := os.LookupEnv("CLEANUP_MAX_AGE") + if !exists { + cleanupIntervalString = "-1" + } - for range time.Tick(time.Second * 5) { - // fmt.Printf("%s\n", time.Now().Format("02/01/2006 03:04 PM")) + if cleanupIntervalString == "-1" { + // Do not cleanup + return + } + + // Try and parse the string as an int + cleanupInterval, err := strconv.Atoi(cleanupIntervalString) + if err != nil { + cleanupInterval = 1 + } + + fmt.Println("[Task::Cleanup]: Task registered") + for range time.Tick(time.Minute * 5) { + objects.CleanupPosts(cleanupInterval) } } - -func handleMigrations() { - time.AfterFunc(time.Second*30, func() { - // Run Migrations - }) -} diff --git a/lib/objects/objects_post.go b/lib/objects/objects_post.go index 9940a80..e41398d 100644 --- a/lib/objects/objects_post.go +++ b/lib/objects/objects_post.go @@ -3,6 +3,8 @@ package objects import ( "fmt" "os" + "path/filepath" + "time" ) type Post struct { @@ -94,3 +96,56 @@ func WritePost(p Post) error { return nil } + +func CleanupPosts(age int) { + // Initialize the files buffer + var files []string + + // Get the base path + root := getStorageDirectory() + + // Scan the directory + err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + + // Check that the file is not a dir + if !info.IsDir() { + files = append(files, path) + } + + return nil + }) + + // Check if we had any errors + if err != nil { + fmt.Println("[Task::Cleanup]: Error", err) + } + + // The timestamp where the file should be deleted + tooOldTime := time.Now() + + // Go through all files and process them + for _, filePath := range files { + + // Get last modified date + fileData, err := os.Stat(filePath) + if err == nil { + fileAge := fileData.ModTime() + + // Check if the file is too old + if fileAge.Add(time.Duration(age)*time.Minute).Unix() < tooOldTime.Unix() { + fmt.Println("[Task::Cleanup]: Removing File", filePath) + + // Remove the file + err = os.Remove(filePath) + if err != nil { + fmt.Println("[Task::Cleanup]: Failed to remove file", filePath) + } + } + + } else { + fmt.Println("[Task::Cleanup]: Error", err) + } + + } + +} diff --git a/main.go b/main.go index c0104d2..f0f72b9 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package main import ( "os" + "github.com/JustKato/FreePad/lib/controllers" "github.com/JustKato/FreePad/lib/routes" "github.com/gin-gonic/gin" "github.com/joho/godotenv" @@ -19,7 +20,7 @@ func main() { } // Run the TaskManager - // go controllers.TaskManager() + go controllers.TaskManager() // Initialize the router router := gin.Default()