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