lib/active_metrics/instrumentable.rb in active_metrics-0.0.2 vs lib/active_metrics/instrumentable.rb in active_metrics-0.1.0
- old
+ new
@@ -22,13 +22,34 @@
# You can submit as many measures as you’d like (typically they are
# submitted per-request) and every minute Librato will calculate/record a
# complete set of summary statistics over the measures submitted in that
# interval.
#
+ # The `measure` method also accepts a block of code which will automatically
+ # measure the amount of time spent running that block:
+ #
+ # measure 'foo.bar.baz' do
+ # Foo.bar #=> 'baz'
+ # end
+ #
+ # For convenience, when `measure` is used with a block it will return the
+ # value returned by the block.
+ #
# @param event [String] The name of the event
# @param value [Integer, String] The value measured.
def measure(event, value = 0)
- ActiveMetrics::Collector.record(event, { metric: 'measure', value: value })
+ if block_given?
+ time = Time.now
+ # Store the value returned by the block for future reference
+ value = yield
+ delta = Time.now - time
+
+ ActiveMetrics::Collector.record(event, { metric: 'measure', value: delta })
+
+ value
+ else
+ ActiveMetrics::Collector.record(event, { metric: 'measure', value: value })
+ end
end
# Sample metrics are used to convey simple key/numerical value pairs when
# you are already calculating some kind of summary statistic in your app and
# merely need a simple transport mechanism to Librato.
\ No newline at end of file