Skip to content

Commit ca82e16

Browse files
Merge pull request nanoc#1287 from nanoc/upgrade-ddmetrics-and-ddmemoize
Upgrade DDMetrics and DDMemoize
2 parents 12c3ef0 + 1e31212 commit ca82e16

File tree

5 files changed

+90
-87
lines changed

5 files changed

+90
-87
lines changed

nanoc/lib/nanoc.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
require 'ref'
88
require 'slow_enumerator_tools'
99
require 'ddmemoize'
10-
require 'ddtelemetry'
10+
require 'ddmetrics'
1111

12-
DDMemoize.enable_telemetry
12+
DDMemoize.enable_metrics
1313

1414
module Nanoc
1515
# @return [String] A string containing information about this Nanoc version

nanoc/lib/nanoc/base/services/instrumentor.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module Nanoc::Int
44
# @api private
55
class Instrumentor
66
def self.call(key, *args)
7-
stopwatch = DDTelemetry::Stopwatch.new
7+
stopwatch = DDMetrics::Stopwatch.new
88
stopwatch.start
99
yield
1010
ensure

nanoc/lib/nanoc/cli/commands/compile_listeners/timing_recorder.rb

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,40 +16,40 @@ def self.enable_for?(_command_runner, _site)
1616
def initialize(reps:)
1717
@reps = reps
1818

19-
@stages_summary = DDTelemetry::Summary.new
20-
@phases_summary = DDTelemetry::Summary.new
21-
@outdatedness_rules_summary = DDTelemetry::Summary.new
22-
@filters_summary = DDTelemetry::Summary.new
23-
@load_stores_summary = DDTelemetry::Summary.new
19+
@stages_summary = DDMetrics::Summary.new
20+
@phases_summary = DDMetrics::Summary.new
21+
@outdatedness_rules_summary = DDMetrics::Summary.new
22+
@filters_summary = DDMetrics::Summary.new
23+
@load_stores_summary = DDMetrics::Summary.new
2424
end
2525

2626
# @see Listener#start
2727
def start
2828
on(:stage_ran) do |duration, klass|
29-
@stages_summary.observe(duration, klass.to_s.sub(/.*::/, ''))
29+
@stages_summary.observe(duration, name: klass.to_s.sub(/.*::/, ''))
3030
end
3131

3232
on(:outdatedness_rule_ran) do |duration, klass|
33-
@outdatedness_rules_summary.observe(duration, klass.to_s.sub(/.*::/, ''))
33+
@outdatedness_rules_summary.observe(duration, name: klass.to_s.sub(/.*::/, ''))
3434
end
3535

3636
filter_stopwatches = {}
3737

3838
on(:filtering_started) do |rep, _filter_name|
3939
stopwatch_stack = filter_stopwatches.fetch(rep) { filter_stopwatches[rep] = [] }
40-
stopwatch_stack << DDTelemetry::Stopwatch.new
40+
stopwatch_stack << DDMetrics::Stopwatch.new
4141
stopwatch_stack.last.start
4242
end
4343

4444
on(:filtering_ended) do |rep, filter_name|
4545
stopwatch = filter_stopwatches.fetch(rep).pop
4646
stopwatch.stop
4747

48-
@filters_summary.observe(stopwatch.duration, filter_name.to_s)
48+
@filters_summary.observe(stopwatch.duration, name: filter_name.to_s)
4949
end
5050

5151
on(:store_loaded) do |duration, klass|
52-
@load_stores_summary.observe(duration, klass.to_s)
52+
@load_stores_summary.observe(duration, name: klass.to_s)
5353
end
5454

5555
on(:compilation_suspended) do |rep, _exception|
@@ -64,14 +64,14 @@ def start
6464

6565
on(:phase_started) do |phase_name, rep|
6666
stopwatches = phase_stopwatches.fetch(rep) { phase_stopwatches[rep] = {} }
67-
stopwatches[phase_name] = DDTelemetry::Stopwatch.new.tap(&:start)
67+
stopwatches[phase_name] = DDMetrics::Stopwatch.new.tap(&:start)
6868
end
6969

7070
on(:phase_ended) do |phase_name, rep|
7171
stopwatch = phase_stopwatches.fetch(rep).fetch(phase_name)
7272
stopwatch.stop
7373

74-
@phases_summary.observe(stopwatch.duration, phase_name)
74+
@phases_summary.observe(stopwatch.duration, name: phase_name)
7575
end
7676

7777
on(:phase_yielded) do |phase_name, rep|
@@ -88,7 +88,7 @@ def start
8888
stopwatch = phase_stopwatches.fetch(rep).fetch(phase_name)
8989
stopwatch.stop if stopwatch.running?
9090

91-
@phases_summary.observe(stopwatch.duration, phase_name)
91+
@phases_summary.observe(stopwatch.duration, name: phase_name)
9292
end
9393
end
9494

@@ -103,7 +103,9 @@ def stop
103103
def table_for_summary(name, summary)
104104
headers = [name.to_s, 'count', 'min', '.50', '.90', '.95', 'max', 'tot']
105105

106-
rows = summary.map do |filter_name, stats|
106+
rows = summary.map do |label, stats|
107+
name = label.fetch(:name)
108+
107109
count = stats.count
108110
min = stats.min
109111
p50 = stats.quantile(0.50)
@@ -112,7 +114,7 @@ def table_for_summary(name, summary)
112114
tot = stats.sum
113115
max = stats.max
114116

115-
[filter_name, count.to_s] + [min, p50, p90, p95, max, tot].map { |r| "#{format('%4.2f', r)}s" }
117+
[name, count.to_s] + [min, p50, p90, p95, max, tot].map { |r| "#{format('%4.2f', r)}s" }
116118
end
117119

118120
[headers] + rows
@@ -121,8 +123,9 @@ def table_for_summary(name, summary)
121123
def table_for_summary_durations(name, summary)
122124
headers = [name.to_s, 'tot']
123125

124-
rows = summary.map do |stage_name, stats|
125-
[stage_name, "#{format('%4.2f', stats.sum)}s"]
126+
rows = summary.map do |label, stats|
127+
name = label.fetch(:name)
128+
[name, "#{format('%4.2f', stats.sum)}s"]
126129
end
127130

128131
[headers] + rows
@@ -134,7 +137,7 @@ def print_profiling_feedback
134137
print_table_for_summary_duration(:stages, @stages_summary) if Nanoc::CLI.verbosity >= 2
135138
print_table_for_summary(:outdatedness_rules, @outdatedness_rules_summary) if Nanoc::CLI.verbosity >= 2
136139
print_table_for_summary_duration(:load_stores, @load_stores_summary) if Nanoc::CLI.verbosity >= 2
137-
DDMemoize.print_telemetry if Nanoc::CLI.verbosity >= 2
140+
DDMemoize.print_metrics if Nanoc::CLI.verbosity >= 2
138141
end
139142

140143
def print_table_for_summary(name, summary)
@@ -152,7 +155,7 @@ def print_table_for_summary_duration(name, summary)
152155
end
153156

154157
def print_table(rows)
155-
puts DDTelemetry::Table.new(rows).to_s
158+
puts DDMetrics::Table.new(rows).to_s
156159
end
157160
end
158161
end

nanoc/nanoc.gemspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ Gem::Specification.new do |s|
2323

2424
s.add_runtime_dependency('addressable', '~> 2.5')
2525
s.add_runtime_dependency('cri', '~> 2.8')
26-
s.add_runtime_dependency('ddmemoize', '= 1.0.0a3') # TODO: upgrade
26+
s.add_runtime_dependency('ddmemoize', '= 1.0.0rc1') # TODO: upgrade
27+
s.add_runtime_dependency('ddmetrics', '= 1.0.0rc1') # TODO: upgrade
2728
s.add_runtime_dependency('ddplugin', '~> 1.0')
28-
s.add_runtime_dependency('ddtelemetry', '= 1.0.0a2') # TODO: upgrade
2929
s.add_runtime_dependency('hamster', '~> 3.0')
3030
s.add_runtime_dependency('ref', '~> 2.0')
3131
s.add_runtime_dependency('slow_enumerator_tools', '~> 1.0')

nanoc/spec/nanoc/cli/commands/compile/timing_recorder_spec.rb

Lines changed: 63 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,11 @@
5151
Timecop.freeze(Time.local(2008, 9, 1, 10, 5, 1))
5252
Nanoc::Int::NotificationCenter.post(:filtering_ended, rep, :erb)
5353

54-
expect(listener.filters_summary.get('erb').min).to eq(1.00)
55-
expect(listener.filters_summary.get('erb').avg).to eq(1.00)
56-
expect(listener.filters_summary.get('erb').max).to eq(1.00)
57-
expect(listener.filters_summary.get('erb').sum).to eq(1.00)
58-
expect(listener.filters_summary.get('erb').count).to eq(1.00)
54+
expect(listener.filters_summary.get(name: 'erb').min).to eq(1.00)
55+
expect(listener.filters_summary.get(name: 'erb').avg).to eq(1.00)
56+
expect(listener.filters_summary.get(name: 'erb').max).to eq(1.00)
57+
expect(listener.filters_summary.get(name: 'erb').sum).to eq(1.00)
58+
expect(listener.filters_summary.get(name: 'erb').count).to eq(1.00)
5959
end
6060

6161
it 'records multiple from filtering_started to filtering_ended' do
@@ -68,11 +68,11 @@
6868
Timecop.freeze(Time.local(2008, 9, 1, 10, 14, 3))
6969
Nanoc::Int::NotificationCenter.post(:filtering_ended, rep, :erb)
7070

71-
expect(listener.filters_summary.get('erb').min).to eq(1.00)
72-
expect(listener.filters_summary.get('erb').avg).to eq(1.50)
73-
expect(listener.filters_summary.get('erb').max).to eq(2.00)
74-
expect(listener.filters_summary.get('erb').sum).to eq(3.00)
75-
expect(listener.filters_summary.get('erb').count).to eq(2.00)
71+
expect(listener.filters_summary.get(name: 'erb').min).to eq(1.00)
72+
expect(listener.filters_summary.get(name: 'erb').avg).to eq(1.50)
73+
expect(listener.filters_summary.get(name: 'erb').max).to eq(2.00)
74+
expect(listener.filters_summary.get(name: 'erb').sum).to eq(3.00)
75+
expect(listener.filters_summary.get(name: 'erb').count).to eq(2.00)
7676
end
7777

7878
it 'records filters in nested filtering_started/filtering_ended' do
@@ -85,17 +85,17 @@
8585
Timecop.freeze(Time.local(2008, 9, 1, 10, 5, 6))
8686
Nanoc::Int::NotificationCenter.post(:filtering_ended, rep, :outer)
8787

88-
expect(listener.filters_summary.get('inner').min).to eq(2.00)
89-
expect(listener.filters_summary.get('inner').avg).to eq(2.00)
90-
expect(listener.filters_summary.get('inner').max).to eq(2.00)
91-
expect(listener.filters_summary.get('inner').sum).to eq(2.00)
92-
expect(listener.filters_summary.get('inner').count).to eq(1.00)
93-
94-
expect(listener.filters_summary.get('outer').min).to eq(6.00)
95-
expect(listener.filters_summary.get('outer').avg).to eq(6.00)
96-
expect(listener.filters_summary.get('outer').max).to eq(6.00)
97-
expect(listener.filters_summary.get('outer').sum).to eq(6.00)
98-
expect(listener.filters_summary.get('outer').count).to eq(1.00)
88+
expect(listener.filters_summary.get(name: 'inner').min).to eq(2.00)
89+
expect(listener.filters_summary.get(name: 'inner').avg).to eq(2.00)
90+
expect(listener.filters_summary.get(name: 'inner').max).to eq(2.00)
91+
expect(listener.filters_summary.get(name: 'inner').sum).to eq(2.00)
92+
expect(listener.filters_summary.get(name: 'inner').count).to eq(1.00)
93+
94+
expect(listener.filters_summary.get(name: 'outer').min).to eq(6.00)
95+
expect(listener.filters_summary.get(name: 'outer').avg).to eq(6.00)
96+
expect(listener.filters_summary.get(name: 'outer').max).to eq(6.00)
97+
expect(listener.filters_summary.get(name: 'outer').sum).to eq(6.00)
98+
expect(listener.filters_summary.get(name: 'outer').count).to eq(1.00)
9999
end
100100

101101
it 'pauses outer stopwatch when suspended' do
@@ -112,11 +112,11 @@
112112
Nanoc::Int::NotificationCenter.post(:filtering_ended, rep, :inner)
113113
Nanoc::Int::NotificationCenter.post(:filtering_ended, rep, :outer)
114114

115-
expect(listener.filters_summary.get('outer').min).to eq(7.00)
116-
expect(listener.filters_summary.get('outer').avg).to eq(7.00)
117-
expect(listener.filters_summary.get('outer').max).to eq(7.00)
118-
expect(listener.filters_summary.get('outer').sum).to eq(7.00)
119-
expect(listener.filters_summary.get('outer').count).to eq(1.00)
115+
expect(listener.filters_summary.get(name: 'outer').min).to eq(7.00)
116+
expect(listener.filters_summary.get(name: 'outer').avg).to eq(7.00)
117+
expect(listener.filters_summary.get(name: 'outer').max).to eq(7.00)
118+
expect(listener.filters_summary.get(name: 'outer').sum).to eq(7.00)
119+
expect(listener.filters_summary.get(name: 'outer').count).to eq(1.00)
120120
end
121121

122122
it 'records single from filtering_started over compilation_{suspended,started} to filtering_ended' do
@@ -130,11 +130,11 @@
130130
Timecop.freeze(Time.local(2008, 9, 1, 10, 5, 7))
131131
Nanoc::Int::NotificationCenter.post(:filtering_ended, rep, :erb)
132132

133-
expect(listener.filters_summary.get('erb').min).to eq(5.00)
134-
expect(listener.filters_summary.get('erb').avg).to eq(5.00)
135-
expect(listener.filters_summary.get('erb').max).to eq(5.00)
136-
expect(listener.filters_summary.get('erb').sum).to eq(5.00)
137-
expect(listener.filters_summary.get('erb').count).to eq(1.00)
133+
expect(listener.filters_summary.get(name: 'erb').min).to eq(5.00)
134+
expect(listener.filters_summary.get(name: 'erb').avg).to eq(5.00)
135+
expect(listener.filters_summary.get(name: 'erb').max).to eq(5.00)
136+
expect(listener.filters_summary.get(name: 'erb').sum).to eq(5.00)
137+
expect(listener.filters_summary.get(name: 'erb').count).to eq(1.00)
138138
end
139139

140140
it 'records single phase start+stop' do
@@ -143,11 +143,11 @@
143143
Timecop.freeze(Time.local(2008, 9, 1, 10, 5, 1))
144144
Nanoc::Int::NotificationCenter.post(:phase_ended, 'donkey', rep)
145145

146-
expect(listener.phases_summary.get('donkey').min).to eq(1.00)
147-
expect(listener.phases_summary.get('donkey').avg).to eq(1.00)
148-
expect(listener.phases_summary.get('donkey').max).to eq(1.00)
149-
expect(listener.phases_summary.get('donkey').sum).to eq(1.00)
150-
expect(listener.phases_summary.get('donkey').count).to eq(1.00)
146+
expect(listener.phases_summary.get(name: 'donkey').min).to eq(1.00)
147+
expect(listener.phases_summary.get(name: 'donkey').avg).to eq(1.00)
148+
expect(listener.phases_summary.get(name: 'donkey').max).to eq(1.00)
149+
expect(listener.phases_summary.get(name: 'donkey').sum).to eq(1.00)
150+
expect(listener.phases_summary.get(name: 'donkey').count).to eq(1.00)
151151
end
152152

153153
it 'records multiple phase start+stop' do
@@ -160,11 +160,11 @@
160160
Timecop.freeze(Time.local(2008, 9, 1, 11, 6, 2))
161161
Nanoc::Int::NotificationCenter.post(:phase_ended, 'donkey', rep)
162162

163-
expect(listener.phases_summary.get('donkey').min).to eq(1.00)
164-
expect(listener.phases_summary.get('donkey').avg).to eq(1.50)
165-
expect(listener.phases_summary.get('donkey').max).to eq(2.00)
166-
expect(listener.phases_summary.get('donkey').sum).to eq(3.00)
167-
expect(listener.phases_summary.get('donkey').count).to eq(2.00)
163+
expect(listener.phases_summary.get(name: 'donkey').min).to eq(1.00)
164+
expect(listener.phases_summary.get(name: 'donkey').avg).to eq(1.50)
165+
expect(listener.phases_summary.get(name: 'donkey').max).to eq(2.00)
166+
expect(listener.phases_summary.get(name: 'donkey').sum).to eq(3.00)
167+
expect(listener.phases_summary.get(name: 'donkey').count).to eq(2.00)
168168
end
169169

170170
it 'records single phase start+yield+resume+stop' do
@@ -177,11 +177,11 @@
177177
Timecop.freeze(Time.local(2008, 9, 1, 11, 6, 2))
178178
Nanoc::Int::NotificationCenter.post(:phase_ended, 'donkey', rep)
179179

180-
expect(listener.phases_summary.get('donkey').min).to eq(3.00)
181-
expect(listener.phases_summary.get('donkey').avg).to eq(3.00)
182-
expect(listener.phases_summary.get('donkey').max).to eq(3.00)
183-
expect(listener.phases_summary.get('donkey').sum).to eq(3.00)
184-
expect(listener.phases_summary.get('donkey').count).to eq(1.00)
180+
expect(listener.phases_summary.get(name: 'donkey').min).to eq(3.00)
181+
expect(listener.phases_summary.get(name: 'donkey').avg).to eq(3.00)
182+
expect(listener.phases_summary.get(name: 'donkey').max).to eq(3.00)
183+
expect(listener.phases_summary.get(name: 'donkey').sum).to eq(3.00)
184+
expect(listener.phases_summary.get(name: 'donkey').count).to eq(1.00)
185185
end
186186

187187
it 'records single phase start+yield+abort+start+stop' do
@@ -196,18 +196,18 @@
196196
Timecop.freeze(Time.local(2008, 9, 1, 12, 7, 5))
197197
Nanoc::Int::NotificationCenter.post(:phase_ended, 'donkey', rep)
198198

199-
expect(listener.phases_summary.get('donkey').min).to eq(1.00)
200-
expect(listener.phases_summary.get('donkey').avg).to eq(2.00)
201-
expect(listener.phases_summary.get('donkey').max).to eq(3.00)
202-
expect(listener.phases_summary.get('donkey').sum).to eq(4.00)
203-
expect(listener.phases_summary.get('donkey').count).to eq(2.00)
199+
expect(listener.phases_summary.get(name: 'donkey').min).to eq(1.00)
200+
expect(listener.phases_summary.get(name: 'donkey').avg).to eq(2.00)
201+
expect(listener.phases_summary.get(name: 'donkey').max).to eq(3.00)
202+
expect(listener.phases_summary.get(name: 'donkey').sum).to eq(4.00)
203+
expect(listener.phases_summary.get(name: 'donkey').count).to eq(2.00)
204204
end
205205

206206
it 'records stage duration' do
207207
Nanoc::Int::NotificationCenter.post(:stage_ran, 1.23, 'donkey_stage')
208208

209-
expect(listener.stages_summary.get('donkey_stage').sum).to eq(1.23)
210-
expect(listener.stages_summary.get('donkey_stage').count).to eq(1)
209+
expect(listener.stages_summary.get(name: 'donkey_stage').sum).to eq(1.23)
210+
expect(listener.stages_summary.get(name: 'donkey_stage').count).to eq(1)
211211
end
212212

213213
it 'prints stage durations' do
@@ -227,22 +227,22 @@
227227
it 'records single outdatedness rule duration' do
228228
Nanoc::Int::NotificationCenter.post(:outdatedness_rule_ran, 1.0, Nanoc::Int::OutdatednessRules::CodeSnippetsModified)
229229

230-
expect(listener.outdatedness_rules_summary.get('CodeSnippetsModified').min).to eq(1.00)
231-
expect(listener.outdatedness_rules_summary.get('CodeSnippetsModified').avg).to eq(1.00)
232-
expect(listener.outdatedness_rules_summary.get('CodeSnippetsModified').max).to eq(1.00)
233-
expect(listener.outdatedness_rules_summary.get('CodeSnippetsModified').sum).to eq(1.00)
234-
expect(listener.outdatedness_rules_summary.get('CodeSnippetsModified').count).to eq(1.00)
230+
expect(listener.outdatedness_rules_summary.get(name: 'CodeSnippetsModified').min).to eq(1.00)
231+
expect(listener.outdatedness_rules_summary.get(name: 'CodeSnippetsModified').avg).to eq(1.00)
232+
expect(listener.outdatedness_rules_summary.get(name: 'CodeSnippetsModified').max).to eq(1.00)
233+
expect(listener.outdatedness_rules_summary.get(name: 'CodeSnippetsModified').sum).to eq(1.00)
234+
expect(listener.outdatedness_rules_summary.get(name: 'CodeSnippetsModified').count).to eq(1.00)
235235
end
236236

237237
it 'records multiple outdatedness rule duration' do
238238
Nanoc::Int::NotificationCenter.post(:outdatedness_rule_ran, 1.0, Nanoc::Int::OutdatednessRules::CodeSnippetsModified)
239239
Nanoc::Int::NotificationCenter.post(:outdatedness_rule_ran, 3.0, Nanoc::Int::OutdatednessRules::CodeSnippetsModified)
240240

241-
expect(listener.outdatedness_rules_summary.get('CodeSnippetsModified').min).to eq(1.00)
242-
expect(listener.outdatedness_rules_summary.get('CodeSnippetsModified').avg).to eq(2.00)
243-
expect(listener.outdatedness_rules_summary.get('CodeSnippetsModified').max).to eq(3.00)
244-
expect(listener.outdatedness_rules_summary.get('CodeSnippetsModified').sum).to eq(4.00)
245-
expect(listener.outdatedness_rules_summary.get('CodeSnippetsModified').count).to eq(2.00)
241+
expect(listener.outdatedness_rules_summary.get(name: 'CodeSnippetsModified').min).to eq(1.00)
242+
expect(listener.outdatedness_rules_summary.get(name: 'CodeSnippetsModified').avg).to eq(2.00)
243+
expect(listener.outdatedness_rules_summary.get(name: 'CodeSnippetsModified').max).to eq(3.00)
244+
expect(listener.outdatedness_rules_summary.get(name: 'CodeSnippetsModified').sum).to eq(4.00)
245+
expect(listener.outdatedness_rules_summary.get(name: 'CodeSnippetsModified').count).to eq(2.00)
246246
end
247247

248248
it 'prints load store durations' do

0 commit comments

Comments
 (0)