From 064da8e034aca7f2ac079eccb67aa75312dd31ec Mon Sep 17 00:00:00 2001 From: Deluan Date: Sun, 12 Jul 2020 13:30:03 -0400 Subject: [PATCH] Add more trace logging to scanner --- scanner/change_detector.go | 18 +++++++++++------- scanner/change_detector_test.go | 18 +++++++++--------- scanner/tag_scanner.go | 4 +++- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/scanner/change_detector.go b/scanner/change_detector.go index 342eb632a..32d585385 100644 --- a/scanner/change_detector.go +++ b/scanner/change_detector.go @@ -1,6 +1,7 @@ package scanner import ( + "context" "io/ioutil" "os" "path/filepath" @@ -29,11 +30,12 @@ func NewChangeDetector(rootFolder string) *ChangeDetector { } } -func (s *ChangeDetector) Scan(lastModifiedSince time.Time) (changed []string, deleted []string, err error) { +func (s *ChangeDetector) Scan(ctx context.Context, lastModifiedSince time.Time) (changed []string, deleted []string, err error) { start := time.Now() newMap := make(dirInfoMap) - err = s.loadMap(newMap, s.rootFolder, lastModifiedSince, false) + err = s.loadMap(ctx, newMap, s.rootFolder, lastModifiedSince, false) if err != nil { + log.Error("Error reading folder tree", "folder", s.rootFolder, err) return } changed, deleted, err = s.checkForUpdates(lastModifiedSince, newMap) @@ -42,20 +44,22 @@ func (s *ChangeDetector) Scan(lastModifiedSince time.Time) (changed []string, de } elapsed := time.Since(start) - log.Trace("Folder analysis complete\n", "total", len(newMap), "changed", len(changed), "deleted", len(deleted), "elapsed", elapsed) + log.Trace(ctx, "Folder analysis complete\n", "total", len(newMap), "changed", len(changed), "deleted", len(deleted), "elapsed", elapsed) s.dirMap = newMap return } -func (s *ChangeDetector) loadDir(dirPath string) (children []string, lastUpdated time.Time, err error) { +func (s *ChangeDetector) loadDir(ctx context.Context, dirPath string) (children []string, lastUpdated time.Time, err error) { dirInfo, err := os.Stat(dirPath) if err != nil { + log.Error(ctx, "Error stating dir", "path", dirPath) return } lastUpdated = dirInfo.ModTime() files, err := ioutil.ReadDir(dirPath) if err != nil { + log.Error(ctx, "Error reading dir", "path", dirPath) return } for _, f := range files { @@ -112,14 +116,14 @@ func isDirReadable(baseDir string, dirInfo os.FileInfo) bool { return res } -func (s *ChangeDetector) loadMap(dirMap dirInfoMap, path string, since time.Time, maybe bool) error { - children, lastUpdated, err := s.loadDir(path) +func (s *ChangeDetector) loadMap(ctx context.Context, dirMap dirInfoMap, path string, since time.Time, maybe bool) error { + children, lastUpdated, err := s.loadDir(ctx, path) if err != nil { return err } maybe = maybe || lastUpdated.After(since) for _, c := range children { - err := s.loadMap(dirMap, c, since, maybe) + err := s.loadMap(ctx, dirMap, c, since, maybe) if err != nil { return err } diff --git a/scanner/change_detector_test.go b/scanner/change_detector_test.go index f6aff65a8..879d44501 100644 --- a/scanner/change_detector_test.go +++ b/scanner/change_detector_test.go @@ -27,7 +27,7 @@ var _ = Describe("ChangeDetector", func() { It("detects changes recursively", func() { // Scan empty folder - changed, deleted, err := scanner.Scan(lastModifiedSince) + changed, deleted, err := scanner.Scan(nil, lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(BeEmpty()) Expect(changed).To(ConsistOf(".")) @@ -38,7 +38,7 @@ var _ = Describe("ChangeDetector", func() { if err != nil { panic(err) } - changed, deleted, err = scanner.Scan(lastModifiedSince) + changed, deleted, err = scanner.Scan(nil, lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(BeEmpty()) Expect(changed).To(ConsistOf(".", P("a"))) @@ -49,14 +49,14 @@ var _ = Describe("ChangeDetector", func() { if err != nil { panic(err) } - changed, deleted, err = scanner.Scan(lastModifiedSince) + changed, deleted, err = scanner.Scan(nil, lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(BeEmpty()) Expect(changed).To(ConsistOf(P("a"), P("a/b"), P("a/b/c"))) // Scan with no changes lastModifiedSince = nowWithDelay() - changed, deleted, err = scanner.Scan(lastModifiedSince) + changed, deleted, err = scanner.Scan(nil, lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(BeEmpty()) Expect(changed).To(BeEmpty()) @@ -67,7 +67,7 @@ var _ = Describe("ChangeDetector", func() { if err != nil { panic(err) } - changed, deleted, err = scanner.Scan(lastModifiedSince) + changed, deleted, err = scanner.Scan(nil, lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(BeEmpty()) Expect(changed).To(ConsistOf(P("a/b"))) @@ -78,7 +78,7 @@ var _ = Describe("ChangeDetector", func() { if err != nil { panic(err) } - changed, deleted, err = scanner.Scan(lastModifiedSince) + changed, deleted, err = scanner.Scan(nil, lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(BeEmpty()) Expect(changed).To(ConsistOf(P("a/b"))) @@ -89,7 +89,7 @@ var _ = Describe("ChangeDetector", func() { if err != nil { panic(err) } - changed, deleted, err = scanner.Scan(lastModifiedSince) + changed, deleted, err = scanner.Scan(nil, lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(ConsistOf(P("a/b/c"))) Expect(changed).To(ConsistOf(P("a/b"))) @@ -97,7 +97,7 @@ var _ = Describe("ChangeDetector", func() { // Only returns changes after lastModifiedSince lastModifiedSince = nowWithDelay() newScanner := NewChangeDetector(testFolder) - changed, deleted, err = newScanner.Scan(lastModifiedSince) + changed, deleted, err = newScanner.Scan(nil, lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(BeEmpty()) Expect(changed).To(BeEmpty()) @@ -105,7 +105,7 @@ var _ = Describe("ChangeDetector", func() { f, _ := os.Create(filepath.Join(testFolder, "a", "b", "new.txt")) _ = f.Close() - changed, deleted, err = newScanner.Scan(lastModifiedSince) + changed, deleted, err = newScanner.Scan(nil, lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(BeEmpty()) Expect(changed).To(ConsistOf(P("a/b"))) diff --git a/scanner/tag_scanner.go b/scanner/tag_scanner.go index feede699e..033956492 100644 --- a/scanner/tag_scanner.go +++ b/scanner/tag_scanner.go @@ -67,7 +67,9 @@ const ( // Delete all empty albums, delete all empty Artists func (s *TagScanner) Scan(ctx context.Context, lastModifiedSince time.Time) error { start := time.Now() - changed, deleted, err := s.detector.Scan(lastModifiedSince) + log.Trace(ctx, "Looking for changes in music folder", "folder", s.rootFolder) + + changed, deleted, err := s.detector.Scan(ctx, lastModifiedSince) if err != nil { return err }