From d85ea881d5a2d5197a8245d7fab9ef6117ffd8ef Mon Sep 17 00:00:00 2001 From: Ian Milligan Date: Tue, 16 Jun 2020 17:00:11 -0700 Subject: [PATCH 1/3] Initialize view start time during view registration --- stats/view/worker.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stats/view/worker.go b/stats/view/worker.go index 51be9e278..e4fb3029c 100644 --- a/stats/view/worker.go +++ b/stats/view/worker.go @@ -324,6 +324,7 @@ func (w *worker) tryRegisterView(v *View) (*viewInternal, error) { return x, nil } w.views[vi.view.Name] = vi + w.startTimes[vi] = time.Now() ref := w.getMeasureRef(vi.view.Measure.Name()) ref.views[vi] = struct{}{} return vi, nil @@ -333,6 +334,7 @@ func (w *worker) unregisterView(v *viewInternal) { w.mu.Lock() defer w.mu.Unlock() delete(w.views, v.view.Name) + delete(w.startTimes, v) if measure := w.measures[v.view.Measure.Name()]; measure != nil { delete(measure.views, v) } From 40a8b4b4ac70fdcbf57eddd22c8e1eb776b9606c Mon Sep 17 00:00:00 2001 From: Ian Milligan Date: Tue, 16 Jun 2020 17:02:28 -0700 Subject: [PATCH 2/3] Remove unnecessary start time initialization from reportUsage --- stats/view/worker.go | 12 ++++-------- stats/view/worker_commands.go | 2 +- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/stats/view/worker.go b/stats/view/worker.go index e4fb3029c..e8d38db7c 100644 --- a/stats/view/worker.go +++ b/stats/view/worker.go @@ -277,7 +277,7 @@ func (w *worker) start() { case cmd := <-w.c: cmd.handleCommand(w) case <-w.timer.C: - w.reportUsage(time.Now()) + w.reportUsage() case <-w.quit: w.timer.Stop() close(w.c) @@ -340,15 +340,11 @@ func (w *worker) unregisterView(v *viewInternal) { } } -func (w *worker) reportView(v *viewInternal, now time.Time) { +func (w *worker) reportView(v *viewInternal) { if !v.isSubscribed() { return } rows := v.collectedRows() - _, ok := w.startTimes[v] - if !ok { - w.startTimes[v] = now - } viewData := &Data{ View: v.view, Start: w.startTimes[v], @@ -362,11 +358,11 @@ func (w *worker) reportView(v *viewInternal, now time.Time) { } } -func (w *worker) reportUsage(now time.Time) { +func (w *worker) reportUsage() { w.mu.Lock() defer w.mu.Unlock() for _, v := range w.views { - w.reportView(v, now) + w.reportView(v) } } diff --git a/stats/view/worker_commands.go b/stats/view/worker_commands.go index e4a2fbdea..9ac4cc059 100644 --- a/stats/view/worker_commands.go +++ b/stats/view/worker_commands.go @@ -95,7 +95,7 @@ func (cmd *unregisterFromViewReq) handleCommand(w *worker) { } // Report pending data for this view before removing it. - w.reportView(vi, time.Now()) + w.reportView(vi) vi.unsubscribe() if !vi.isSubscribed() { From 32abd9612afeac92f23751440ff2df380353f876 Mon Sep 17 00:00:00 2001 From: Ian Milligan Date: Tue, 16 Jun 2020 20:11:53 -0700 Subject: [PATCH 3/3] Remove unnecessary start time check in toMetric --- stats/view/worker.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/stats/view/worker.go b/stats/view/worker.go index e8d38db7c..ab8bfd46d 100644 --- a/stats/view/worker.go +++ b/stats/view/worker.go @@ -371,11 +371,6 @@ func (w *worker) toMetric(v *viewInternal, now time.Time) *metricdata.Metric { return nil } - _, ok := w.startTimes[v] - if !ok { - w.startTimes[v] = now - } - var startTime time.Time if v.metricDescriptor.Type == metricdata.TypeGaugeInt64 || v.metricDescriptor.Type == metricdata.TypeGaugeFloat64 {