fixup! Test workqueue metrics

change units to seconds
pull/58/head
Daniel Smith 2018-11-10 18:46:43 -08:00
parent 44a87baf09
commit 578962d934
3 changed files with 22 additions and 17 deletions

View File

@ -71,11 +71,14 @@ func (prometheusMetricsProvider) NewWorkDurationMetric(name string) workqueue.Su
return workDuration return workDuration
} }
func (prometheusMetricsProvider) NewUnfinishedWorkMicrosecondsMetric(name string) workqueue.SettableGaugeMetric { func (prometheusMetricsProvider) NewUnfinishedWorkSecondsMetric(name string) workqueue.SettableGaugeMetric {
unfinished := prometheus.NewGauge(prometheus.GaugeOpts{ unfinished := prometheus.NewGauge(prometheus.GaugeOpts{
Subsystem: name, Subsystem: name,
Name: "unfinished_work_microseconds", Name: "unfinished_work_seconds",
Help: "How many microseconds of work has " + name + " done that is still in progress and hasn't yet been observed by work_duration.", Help: "How many seconds of work " + name + " has done that " +
"is in progress and hasn't been observed by work_duration. Large " +
"values indicate stuck threads. One can deduce the number of stuck " +
"threads by observing the rate at which this increases.",
}) })
prometheus.Register(unfinished) prometheus.Register(unfinished)
return unfinished return unfinished

View File

@ -80,7 +80,7 @@ type defaultQueueMetrics struct {
processingStartTimes map[t]time.Time processingStartTimes map[t]time.Time
// how long have current threads been working? // how long have current threads been working?
unfinishedWorkMicroseconds SettableGaugeMetric unfinishedWorkSeconds SettableGaugeMetric
} }
func (m *defaultQueueMetrics) add(item t) { func (m *defaultQueueMetrics) add(item t) {
@ -124,7 +124,9 @@ func (m *defaultQueueMetrics) updateUnfinishedWork() {
for _, t := range m.processingStartTimes { for _, t := range m.processingStartTimes {
total += m.sinceInMicroseconds(t) total += m.sinceInMicroseconds(t)
} }
m.unfinishedWorkMicroseconds.Set(total) // Convert to seconds; microseconds is unhelpfully granular for this.
total /= 1000000
m.unfinishedWorkSeconds.Set(total)
} }
type noMetrics struct{} type noMetrics struct{}
@ -161,7 +163,7 @@ type MetricsProvider interface {
NewAddsMetric(name string) CounterMetric NewAddsMetric(name string) CounterMetric
NewLatencyMetric(name string) SummaryMetric NewLatencyMetric(name string) SummaryMetric
NewWorkDurationMetric(name string) SummaryMetric NewWorkDurationMetric(name string) SummaryMetric
NewUnfinishedWorkMicrosecondsMetric(name string) SettableGaugeMetric NewUnfinishedWorkSecondsMetric(name string) SettableGaugeMetric
NewRetriesMetric(name string) CounterMetric NewRetriesMetric(name string) CounterMetric
} }
@ -183,7 +185,7 @@ func (_ noopMetricsProvider) NewWorkDurationMetric(name string) SummaryMetric {
return noopMetric{} return noopMetric{}
} }
func (_ noopMetricsProvider) NewUnfinishedWorkMicrosecondsMetric(name string) SettableGaugeMetric { func (_ noopMetricsProvider) NewUnfinishedWorkSecondsMetric(name string) SettableGaugeMetric {
return noopMetric{} return noopMetric{}
} }
@ -213,14 +215,14 @@ func (f *queueMetricsFactory) newQueueMetrics(name string, clock clock.Clock) qu
return noMetrics{} return noMetrics{}
} }
return &defaultQueueMetrics{ return &defaultQueueMetrics{
clock: clock, clock: clock,
depth: mp.NewDepthMetric(name), depth: mp.NewDepthMetric(name),
adds: mp.NewAddsMetric(name), adds: mp.NewAddsMetric(name),
latency: mp.NewLatencyMetric(name), latency: mp.NewLatencyMetric(name),
workDuration: mp.NewWorkDurationMetric(name), workDuration: mp.NewWorkDurationMetric(name),
unfinishedWorkMicroseconds: mp.NewUnfinishedWorkMicrosecondsMetric(name), unfinishedWorkSeconds: mp.NewUnfinishedWorkSecondsMetric(name),
addTimes: map[t]time.Time{}, addTimes: map[t]time.Time{},
processingStartTimes: map[t]time.Time{}, processingStartTimes: map[t]time.Time{},
} }
} }

View File

@ -113,7 +113,7 @@ func (m *testMetricsProvider) NewWorkDurationMetric(name string) SummaryMetric {
return &m.duration return &m.duration
} }
func (m *testMetricsProvider) NewUnfinishedWorkMicrosecondsMetric(name string) SettableGaugeMetric { func (m *testMetricsProvider) NewUnfinishedWorkSecondsMetric(name string) SettableGaugeMetric {
return &m.unfinished return &m.unfinished
} }
@ -229,7 +229,7 @@ func TestMetrics(t *testing.T) {
c.Step(time.Millisecond) c.Step(time.Millisecond)
<-ch <-ch
mp.unfinished.notifyCh = nil mp.unfinished.notifyCh = nil
if e, a := 1000.0, mp.unfinished.gaugeValue(); e != a { if e, a := .001, mp.unfinished.gaugeValue(); e != a {
t.Errorf("expected %v, got %v", e, a) t.Errorf("expected %v, got %v", e, a)
} }