Module: TraceView::API::Profiling

Defined in:
lib/traceview/api/profiling.rb

Overview

Module that provides profiling of arbitrary blocks of code

Instance Method Summary collapse

Instance Method Details

#profile(profile_name, report_kvs = {}, with_backtrace = false) ⇒ Object

Public: Profile a given block of code. Detect any exceptions thrown by the block and report errors.

profile_name - A name used to identify the block being profiled. report_kvs - A hash containing key/value pairs that will be reported along

with the event of this profile (optional).

with_backtrace - Boolean to indicate whether a backtrace should

be collected with this trace event.

Example

def computation(n)
  TraceView::API.profile('fib', { :n => n }) do
    fib(n)
  end
end

Returns the result of the block.



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/traceview/api/profiling.rb', line 28

def profile(profile_name, report_kvs = {}, with_backtrace = false)
  report_kvs[:Language] ||= :ruby
  report_kvs[:ProfileName] ||= profile_name
  report_kvs[:Backtrace] = TraceView::API.backtrace if with_backtrace

  TraceView::API.log(nil, 'profile_entry', report_kvs)

  begin
    yield
  rescue => e
    log_exception(nil, e)
    raise
  ensure
    exit_kvs = {}
    exit_kvs[:Language] = :ruby
    exit_kvs[:ProfileName] = report_kvs[:ProfileName]

    TraceView::API.log(nil, 'profile_exit', exit_kvs)
  end
end