diff options
Diffstat (limited to 'metrics')
-rw-r--r-- | metrics/metrics.go | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/metrics/metrics.go b/metrics/metrics.go index f48ee33e0..12f825e19 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -25,11 +25,9 @@ import ( "sync" "time" - "github.com/gohugoio/hugo/helpers" - "github.com/gohugoio/hugo/common/types" - "github.com/gohugoio/hugo/compare" + "github.com/gohugoio/hugo/helpers" ) // The Provider interface defines an interface for measuring metrics. @@ -42,7 +40,7 @@ type Provider interface { WriteMetrics(w io.Writer) // TrackValue tracks the value for diff calculations etc. - TrackValue(key string, value interface{}) + TrackValue(key string, value interface{}, cached bool) // Reset clears the metric store. Reset() @@ -54,8 +52,6 @@ type diff struct { simSum int } -var counter = 0 - func (d *diff) add(v interface{}) *diff { if types.IsNil(d.baseline) { d.baseline = v @@ -77,6 +73,8 @@ type Store struct { mu sync.Mutex diffs map[string]*diff diffmu sync.Mutex + cached map[string]int + cachedmu sync.Mutex } // NewProvider returns a new instance of a metric store. @@ -85,6 +83,7 @@ func NewProvider(calculateHints bool) Provider { calculateHints: calculateHints, metrics: make(map[string][]time.Duration), diffs: make(map[string]*diff), + cached: make(map[string]int), } } @@ -93,24 +92,24 @@ func (s *Store) Reset() { s.mu.Lock() s.metrics = make(map[string][]time.Duration) s.mu.Unlock() + s.diffmu.Lock() s.diffs = make(map[string]*diff) s.diffmu.Unlock() + + s.cachedmu.Lock() + s.cached = make(map[string]int) + s.cachedmu.Unlock() } // TrackValue tracks the value for diff calculations etc. -func (s *Store) TrackValue(key string, value interface{}) { +func (s *Store) TrackValue(key string, value interface{}, cached bool) { if !s.calculateHints { return } s.diffmu.Lock() - var ( - d *diff - found bool - ) - - d, found = s.diffs[key] + d, found := s.diffs[key] if !found { d = &diff{} @@ -118,8 +117,13 @@ func (s *Store) TrackValue(key string, value interface{}) { } d.add(value) - s.diffmu.Unlock() + + if cached { + s.cachedmu.Lock() + s.cached[key] = s.cached[key] + 1 + s.cachedmu.Unlock() + } } // MeasureSince adds a measurement for key to the metric store. @@ -155,17 +159,18 @@ func (s *Store) WriteMetrics(w io.Writer) { } avg := time.Duration(int(sum) / len(v)) + cacheCount := s.cached[k] - results[i] = result{key: k, count: len(v), max: max, sum: sum, avg: avg, cacheFactor: cacheFactor} + results[i] = result{key: k, count: len(v), max: max, sum: sum, avg: avg, cacheCount: cacheCount, cacheFactor: cacheFactor} i++ } s.mu.Unlock() if s.calculateHints { - fmt.Fprintf(w, " %9s %13s %12s %12s %5s %s\n", "cache", "cumulative", "average", "maximum", "", "") - fmt.Fprintf(w, " %9s %13s %12s %12s %5s %s\n", "potential", "duration", "duration", "duration", "count", "template") - fmt.Fprintf(w, " %9s %13s %12s %12s %5s %s\n", "-----", "----------", "--------", "--------", "-----", "--------") + fmt.Fprintf(w, " %13s %12s %12s %9s %7s %6s %5s %s\n", "cumulative", "average", "maximum", "cache", "percent", "cached", "total", "") + fmt.Fprintf(w, " %13s %12s %12s %9s %7s %6s %5s %s\n", "duration", "duration", "duration", "potential", "cached", "count", "count", "template") + fmt.Fprintf(w, " %13s %12s %12s %9s %7s %6s %5s %s\n", "----------", "--------", "--------", "---------", "-------", "------", "-----", "--------") } else { fmt.Fprintf(w, " %13s %12s %12s %5s %s\n", "cumulative", "average", "maximum", "", "") fmt.Fprintf(w, " %13s %12s %12s %5s %s\n", "duration", "duration", "duration", "count", "template") @@ -176,7 +181,7 @@ func (s *Store) WriteMetrics(w io.Writer) { sort.Sort(bySum(results)) for _, v := range results { if s.calculateHints { - fmt.Fprintf(w, " %9d %13s %12s %12s %5d %s\n", v.cacheFactor, v.sum, v.avg, v.max, v.count, v.key) + fmt.Fprintf(w, " %13s %12s %12s %9d %7.f %6d %5d %s\n", v.sum, v.avg, v.max, v.cacheFactor, float64(v.cacheCount)/float64(v.count)*100, v.cacheCount, v.count, v.key) } else { fmt.Fprintf(w, " %13s %12s %12s %5d %s\n", v.sum, v.avg, v.max, v.count, v.key) } @@ -187,6 +192,7 @@ func (s *Store) WriteMetrics(w io.Writer) { type result struct { key string count int + cacheCount int cacheFactor int sum time.Duration max time.Duration |