class Opbeat::Transaction

Constants

ROOT_TRACE_NAME

Attributes

duration[RW]
endpoint[RW]
kind[RW]
notifications[R]
result[RW]
root_trace[R]
start_time[R]
timestamp[R]
traces[R]

Public Class Methods

new(client, endpoint, kind = 'code.custom', result = nil) click to toggle source
# File lib/opbeat/transaction.rb, line 8
def initialize client, endpoint, kind = 'code.custom', result = nil
  @client = client
  @endpoint = endpoint
  @kind = kind
  @result = result

  @timestamp = Util.nearest_minute.to_i

  @root_trace = Trace.new(self, ROOT_TRACE_NAME, ROOT_TRACE_NAME)
  @traces = [@root_trace]
  @notifications = []

  @start_time = Util.nanos
  @root_trace.start @start_time
end

Public Instance Methods

current_offset() click to toggle source
# File lib/opbeat/transaction.rb, line 82
def current_offset
  if curr = current_trace
    return curr.start_time
  end

  start_time
end
current_trace() click to toggle source
# File lib/opbeat/transaction.rb, line 78
def current_trace
  traces.reverse.find(&:running?)
end
done(result = nil) click to toggle source
# File lib/opbeat/transaction.rb, line 31
def done result = nil
  @result = result

  @root_trace.done Util.nanos
  @duration = @root_trace.duration

  self
end
done?() click to toggle source
# File lib/opbeat/transaction.rb, line 40
def done?
  @root_trace.done?
end
inspect() click to toggle source
# File lib/opbeat/transaction.rb, line 90
    def inspect
      info = %w{endpoint kind result duration timestamp start_time}
      <<-TEXT
<Transaction #{info.map { |m| "#{m}:#{send(m).inspect}" }.join(' ')}>
  #{traces.map(&:inspect).join("\n  ")}"
      TEXT
    end
release() click to toggle source
# File lib/opbeat/transaction.rb, line 27
def release
  @client.current_transaction = nil
end
running_traces() click to toggle source
# File lib/opbeat/transaction.rb, line 74
def running_traces
  traces.select(&:running?)
end
submit(result = nil) click to toggle source
# File lib/opbeat/transaction.rb, line 44
def submit result = nil
  done result

  release

  @client.submit_transaction self

  self
end
trace(signature, kind = nil, extra = nil) { |trace| ... } click to toggle source
# File lib/opbeat/transaction.rb, line 54
def trace signature, kind = nil, extra = nil, &block
  trace = Trace.new(self, signature, kind, running_traces, extra)

  rel_time = current_offset

  traces << trace

  trace.start rel_time

  return trace unless block_given?

  begin
    result = yield trace
  ensure
    trace.done
  end

  result
end