Class: CanvasStatsd::BlockTracking
- Inherits:
-
Object
- Object
- CanvasStatsd::BlockTracking
- Defined in:
- lib/canvas_statsd/block_tracking.rb
Class Attribute Summary collapse
-
.logger ⇒ Object
Returns the value of attribute logger.
Class Method Summary collapse
Class Attribute Details
.logger ⇒ Object
Returns the value of attribute logger.
6 7 8 |
# File 'lib/canvas_statsd/block_tracking.rb', line 6 def logger @logger end |
Class Method Details
.track(key, category: nil, statsd: CanvasStatsd::Statsd, only: nil) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/canvas_statsd/block_tracking.rb', line 8 def track(key, category: nil, statsd: CanvasStatsd::Statsd, only: nil) = if only Array(only).map { |name| [name, Counter.counters[name].start] } else Counter.counters.map { |(name, counter)| [name, counter.start] } end block_stat = CanvasStatsd::BlockStat.new(key, statsd) stack(category).push(block_stat) if category result = nil elapsed = Benchmark.realtime do result = yield end # to be consistent with ActionPack, measure in milliseconds elapsed *= 1000 block_stat.stats = .map { |(name, )| [name, Counter.counters[name].finalize_count()] }.to_h block_stat.stats['total'] = elapsed # we need to make sure to report exclusive timings, even if nobody called us re-entrantly block_stat.subtract_exclusives({}) if category block_stat.report logger.log(block_stat, "STATSD #{key}") if logger # -1 is ourselves; we want to subtract from the block above us stack(category)[-2].subtract_exclusives(block_stat.stats) if category && stack(category)[-2] result ensure stack(category).pop if category && stack(category).last == block_stat end |