commit fac474a58bf0726e019a8937e9686cc7254f4016 Author: David Majdandžić Date: Fri Jan 26 13:38:44 2024 +0100 Implement input arg parsing diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..562491d --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module main + +go 1.21.6 diff --git a/main.go b/main.go new file mode 100644 index 0000000..0f29906 --- /dev/null +++ b/main.go @@ -0,0 +1,83 @@ +package main + +import ( + "log" + "os" + "regexp" + "strconv" + "strings" +) + +var timeUnits = map[string]int64{ + "ms": 1, + "s": 1000, + "m": 1000 * 60, + "h": 1000 * 60 * 60, + "d": 1000 * 60 * 60 * 24, + "M": 1000 * 60 * 60 * 24 * 30, + "y": 1000 * 60 * 60 * 24 * 365, +} + +var valueRegex, _ = regexp.Compile(`\d+`) +var unitRegex, _ = regexp.Compile(`[a-zA-Z]+`) + +func parseDuration(date string) int64 { + var milliseconds int64 = 0 + + date = strings.TrimSpace(date) + var parts = strings.Split(date, "_") + for _, part := range parts { + part = strings.TrimSpace(part) + log.Printf("Parsing date part: %s\n", part) + var value = valueRegex.FindString(part) + var unit = unitRegex.FindString(part) + + if value == "" || unit == "" { + log.Println("Invalid date part: " + part) + continue + } + + if _, ok := timeUnits[unit]; !ok { + log.Println("Invalid date unit: " + unit) + continue + } + log.Printf("Part %s parsed as: Value: %s, Unit: %s\n", part, value, unit) + + var valueMs, _ = strconv.ParseInt(value, 10, 16) + valueMs = valueMs * timeUnits[unit] + milliseconds += valueMs + log.Printf("Adding %dms to duration, now: %d\n", valueMs, milliseconds) + } + + return milliseconds +} + +func getEnv(key, def string) string { + var value, exists = os.LookupEnv(key) + if exists { + return value + } + return def +} + +func main() { + log.SetFlags(0b111) + + var ROOT = strings.TrimSpace(getEnv("ROOT", "/tmp")) + var ROOT_ARCHIVE = strings.TrimSpace(getEnv("ROOT_ARCHIVE", ROOT+"/archive")) + var IGNORED_DIRECTORIES = strings.Split(getEnv("IGNORED_DIRECTORIES", ""), ",") + IGNORED_DIRECTORIES = append(IGNORED_DIRECTORIES, ROOT_ARCHIVE) + for key, dir := range IGNORED_DIRECTORIES { + IGNORED_DIRECTORIES[key] = strings.TrimSpace(dir) + } + var ARCHIVE_THRESHOLD = parseDuration(getEnv("ARCHIVE_THRESHOLD", "1d")) + var DELETE_THRESHOLD = parseDuration(getEnv("DELETE_THRESHOLD", "12h")) + var SCAN_INTERVAL = parseDuration(getEnv("SCAN_INTERVAL", "1m")) + log.Println("Input args parsed as:") + log.Printf("ROOT: %s\n", ROOT) + log.Printf("ROOT_ARCHIVE: %s\n", ROOT_ARCHIVE) + log.Printf("IGNORED_DIRECTORIES: %s\n", IGNORED_DIRECTORIES) + log.Printf("ARCHIVE_THRESHOLD: %d\n", ARCHIVE_THRESHOLD) + log.Printf("DELETE_THRESHOLD: %d\n", DELETE_THRESHOLD) + log.Printf("SCAN_INTERVAL: %d\n", SCAN_INTERVAL) +}