Add some logs
This commit is contained in:
36
main.go
36
main.go
@@ -88,9 +88,7 @@ func loadConfig() Constants {
|
||||
}
|
||||
}
|
||||
}
|
||||
// Always ignore ROOT and ROOT_ARCHIVE themselves
|
||||
ignored = append(ignored, filepath.ToSlash(archive))
|
||||
ignored = append(ignored, filepath.ToSlash(root))
|
||||
|
||||
archiveMs := parseDurationMS(getenv("ARCHIVE_THRESHOLD", "1d"))
|
||||
deleteMs := parseDurationMS(getenv("DELETE_THRESHOLD", "12h"))
|
||||
@@ -118,15 +116,18 @@ func loadConfig() Constants {
|
||||
}
|
||||
|
||||
func shouldIgnore(path string) bool {
|
||||
log := logger.Default.WithPrefix("shouldIgnore").WithPrefix(path)
|
||||
// Match against slash-normalized full path
|
||||
path = filepath.ToSlash(path)
|
||||
for _, pat := range constants.IGNORED_DIRECTORIES {
|
||||
patLog := log.WithPrefix(pat)
|
||||
ok, err := doublestar.Match(pat, path)
|
||||
if err != nil {
|
||||
logger.Warning("Ignore pattern error %q vs %q: %v", pat, path, err)
|
||||
patLog.Warning("Ignore pattern error %q vs %q: %v", pat, path, err)
|
||||
continue
|
||||
}
|
||||
if ok || path == pat {
|
||||
if ok {
|
||||
patLog.Debug("ignore due to doublestar %q", pat)
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -143,50 +144,58 @@ func fileTime(info os.FileInfo) int64 {
|
||||
}
|
||||
|
||||
func archiveCandidate(path string, info os.FileInfo) {
|
||||
log := logger.Default.WithPrefix("archiveCandidate")
|
||||
if info.IsDir() {
|
||||
return
|
||||
}
|
||||
now := time.Now().UnixMilli()
|
||||
ft := fileTime(info)
|
||||
log.Debug("now %s filetime %s", time.UnixMilli(now).Format(time.RFC3339), time.UnixMilli(ft).Format(time.RFC3339))
|
||||
if now-ft <= constants.ARCHIVE_THRESHOLD {
|
||||
log.Debug("skip")
|
||||
return
|
||||
}
|
||||
|
||||
rel, err := filepath.Rel(constants.ROOT, path)
|
||||
if err != nil {
|
||||
logger.Warning("rel ROOT->%s: %v", path, err)
|
||||
log.Warning("rel ROOT->%s: %v", path, err)
|
||||
return
|
||||
}
|
||||
dst := filepath.Join(constants.ROOT_ARCHIVE, rel)
|
||||
log.Debug("dst %s", dst)
|
||||
|
||||
if err := os.MkdirAll(filepath.Dir(dst), os.ModePerm); err != nil {
|
||||
logger.Error("mkdir %s: %v", filepath.Dir(dst), err)
|
||||
log.Error("mkdir %s: %v", filepath.Dir(dst), err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := os.Rename(path, dst); err != nil {
|
||||
logger.Error("archive %s -> %s: %v", path, dst, err)
|
||||
log.Error("archive %s -> %s: %v", path, dst, err)
|
||||
return
|
||||
}
|
||||
numFilesArchived++
|
||||
logger.Info("Archived: %s -> %s", path, dst)
|
||||
log.Info("Archived: %s -> %s", path, dst)
|
||||
}
|
||||
|
||||
func deleteCandidate(path string, info os.FileInfo) {
|
||||
log := logger.Default.WithPrefix("deleteCandidate").WithPrefix(path)
|
||||
if info.IsDir() {
|
||||
return
|
||||
}
|
||||
now := time.Now().UnixMilli()
|
||||
ft := fileTime(info)
|
||||
log.Debug("now %s filetime %s", time.UnixMilli(now).Format(time.RFC3339), time.UnixMilli(ft).Format(time.RFC3339))
|
||||
if now-ft <= constants.DELETE_THRESHOLD {
|
||||
log.Debug("skip")
|
||||
return
|
||||
}
|
||||
log.Debug("delete")
|
||||
if err := os.Remove(path); err != nil {
|
||||
logger.Error("delete %s: %v", path, err)
|
||||
log.Error("delete %s: %v", path, err)
|
||||
return
|
||||
}
|
||||
numFilesDeleted++
|
||||
logger.Info("Deleted: %s", path)
|
||||
log.Info("Deleted: %s", path)
|
||||
}
|
||||
|
||||
func scanRoot() {
|
||||
@@ -194,17 +203,23 @@ func scanRoot() {
|
||||
root := constants.ROOT
|
||||
|
||||
// doublestar.Glob with os.DirFS(root) returns relative paths
|
||||
log.Debug("glob %s", root)
|
||||
paths, err := doublestar.Glob(os.DirFS(root), "**")
|
||||
if err != nil {
|
||||
log.Error("glob %s: %v", root, err)
|
||||
return
|
||||
}
|
||||
log.Info("Found %d files in root", len(paths))
|
||||
for _, rel := range paths {
|
||||
pathLog := log.WithPrefix(rel)
|
||||
full := filepath.Join(root, rel)
|
||||
pathLog.Debug("full %s", full)
|
||||
if shouldIgnore(full) {
|
||||
pathLog.Debug("ignore")
|
||||
continue
|
||||
}
|
||||
info, err := os.Stat(full)
|
||||
pathLog.Trace("stat %+v", info)
|
||||
if err != nil {
|
||||
log.Warning("stat %s: %v", full, err)
|
||||
continue
|
||||
@@ -313,6 +328,7 @@ func main() {
|
||||
|
||||
logger.Info("Starting directory cleaner")
|
||||
constants = loadConfig()
|
||||
constants.USE_MODTIME = true
|
||||
logger.Info("Ready. First scan in %s", constants.SCAN_INTERVAL)
|
||||
|
||||
// Run immediately, then on interval
|
||||
|
Reference in New Issue
Block a user