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) }