From 0e5ba0c56fe37c70abc72f121df98a2648d628d5 Mon Sep 17 00:00:00 2001 From: Alan Bernstein Date: Fri, 21 Apr 2017 12:05:35 -0500 Subject: [PATCH 1/4] Add stats to snapshot --- fragment.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/fragment.go b/fragment.go index 7c6cff24d..1dbc2c64d 100644 --- a/fragment.go +++ b/fragment.go @@ -995,15 +995,11 @@ func (f *Fragment) Snapshot() error { defer f.mu.Unlock() return f.snapshot() } -func track(start time.Time, name string, logger *log.Logger) { - elapsed := time.Since(start) - logger.Printf("%s took %s", name, elapsed) -} func (f *Fragment) snapshot() error { logger := f.logger() logger.Printf("fragment: snapshotting %s/%s/%s/%d", f.db, f.frame, f.view, f.slice) - defer track(time.Now(), fmt.Sprintf("fragment: snapshot complete %s/%s/%s/%d", f.db, f.frame, f.view, f.slice), logger) + start := time.Now() // Create a temporary file to snapshot to. snapshotPath := f.path + SnapshotExt @@ -1039,6 +1035,19 @@ func (f *Fragment) snapshot() error { // Reset operation count. f.opN = 0 + elapsed := time.Since(start) + message := fmt.Sprintf("fragment: snapshot complete %s/%s/%s/%d", f.db, f.frame, f.view, f.slice) + logger.Printf("%s took %s", message, elapsed) + + statsTags := []string{ + "db:" + f.db, + "frame:" + f.frame, + "view:" + f.view, + fmt.Sprintf("slice:%d", f.slice), + } + stats := f.stats.WithTags(statsTags...) + stats.Count("snapshot.count", 1) + stats.Histogram("snapshot.duration", elapsed.Seconds()) return nil } From 57f9dcf44ad9f02c44b8d7376ad102e2530a20de Mon Sep 17 00:00:00 2001 From: Alan Bernstein Date: Fri, 21 Apr 2017 12:13:45 -0500 Subject: [PATCH 2/4] Move logging and reporting back to defer'd track() --- fragment.go | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/fragment.go b/fragment.go index 1dbc2c64d..f58f2b50f 100644 --- a/fragment.go +++ b/fragment.go @@ -995,11 +995,26 @@ func (f *Fragment) Snapshot() error { defer f.mu.Unlock() return f.snapshot() } +func track(start time.Time, message string, stats StatsClient, logger *log.Logger) { + elapsed := time.Since(start) + logger.Printf("%s took %s", message, elapsed) + stats.Count("snapshot.count", 1) + stats.Histogram("snapshot.duration", elapsed.Seconds()) +} func (f *Fragment) snapshot() error { logger := f.logger() logger.Printf("fragment: snapshotting %s/%s/%s/%d", f.db, f.frame, f.view, f.slice) + completeMessage := fmt.Sprintf("fragment: snapshot complete %s/%s/%s/%d", f.db, f.frame, f.view, f.slice) + statsTags := []string{ + "db:" + f.db, + "frame:" + f.frame, + "view:" + f.view, + fmt.Sprintf("slice:%d", f.slice), + } + stats := f.stats.WithTags(statsTags...) start := time.Now() + defer track(start, completeMessage, stats, logger) // Create a temporary file to snapshot to. snapshotPath := f.path + SnapshotExt @@ -1035,19 +1050,6 @@ func (f *Fragment) snapshot() error { // Reset operation count. f.opN = 0 - elapsed := time.Since(start) - message := fmt.Sprintf("fragment: snapshot complete %s/%s/%s/%d", f.db, f.frame, f.view, f.slice) - logger.Printf("%s took %s", message, elapsed) - - statsTags := []string{ - "db:" + f.db, - "frame:" + f.frame, - "view:" + f.view, - fmt.Sprintf("slice:%d", f.slice), - } - stats := f.stats.WithTags(statsTags...) - stats.Count("snapshot.count", 1) - stats.Histogram("snapshot.duration", elapsed.Seconds()) return nil } From 44aa9fded57c1d14c8b3c89ca6e0665e688c380d Mon Sep 17 00:00:00 2001 From: Alan Bernstein Date: Fri, 21 Apr 2017 13:33:07 -0500 Subject: [PATCH 3/4] Remove duplicate tags --- fragment.go | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/fragment.go b/fragment.go index f58f2b50f..66e3342b4 100644 --- a/fragment.go +++ b/fragment.go @@ -1006,15 +1006,8 @@ func (f *Fragment) snapshot() error { logger := f.logger() logger.Printf("fragment: snapshotting %s/%s/%s/%d", f.db, f.frame, f.view, f.slice) completeMessage := fmt.Sprintf("fragment: snapshot complete %s/%s/%s/%d", f.db, f.frame, f.view, f.slice) - statsTags := []string{ - "db:" + f.db, - "frame:" + f.frame, - "view:" + f.view, - fmt.Sprintf("slice:%d", f.slice), - } - stats := f.stats.WithTags(statsTags...) start := time.Now() - defer track(start, completeMessage, stats, logger) + defer track(start, completeMessage, f.stats, logger) // Create a temporary file to snapshot to. snapshotPath := f.path + SnapshotExt From e0fb322632b88d518481a30e870188b5cd91e1b5 Mon Sep 17 00:00:00 2001 From: Alan Bernstein Date: Fri, 21 Apr 2017 15:11:43 -0500 Subject: [PATCH 4/4] Simplify stats naming --- fragment.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fragment.go b/fragment.go index 66e3342b4..b31769251 100644 --- a/fragment.go +++ b/fragment.go @@ -998,8 +998,7 @@ func (f *Fragment) Snapshot() error { func track(start time.Time, message string, stats StatsClient, logger *log.Logger) { elapsed := time.Since(start) logger.Printf("%s took %s", message, elapsed) - stats.Count("snapshot.count", 1) - stats.Histogram("snapshot.duration", elapsed.Seconds()) + stats.Histogram("snapshot", elapsed.Seconds()) } func (f *Fragment) snapshot() error {