class Opbeat::DataBuilders::Transactions
Public Instance Methods
build(transactions)
click to toggle source
# File lib/opbeat/data_builders/transactions.rb, line 4 def build transactions reduced = transactions.reduce({ transactions: {}, traces: {} }) do |data, transaction| key = [transaction.endpoint, transaction.result, transaction.timestamp] if data[:transactions][key].nil? data[:transactions][key] = build_transaction(transaction) else data[:transactions][key][:durations] << ms(transaction.duration) end combine_traces transaction.traces, data[:traces] data end.reduce({}) do |data, kv| key, collection = kv data[key] = collection.values data end reduced[:traces].each do |trace| # traces' start time is average across collected trace[:start_time] = trace[:start_time].reduce(0, :+) / trace[:start_time].length end # preserve root root = reduced[:traces].shift # re-add root reduced[:traces].unshift root reduced end
Private Instance Methods
build_trace(trace)
click to toggle source
# File lib/opbeat/data_builders/transactions.rb, line 64 def build_trace trace { transaction: trace.transaction.endpoint, signature: trace.signature, durations: [[ ms(trace.duration), ms(trace.transaction.duration) ]], start_time: [ms(trace.relative_start)], kind: trace.kind, timestamp: trace.timestamp, parents: trace.parents && trace.parents.map(&:signature) || [], extra: trace.extra } end
build_transaction(transaction)
click to toggle source
# File lib/opbeat/data_builders/transactions.rb, line 54 def build_transaction transaction { transaction: transaction.endpoint, result: transaction.result, kind: transaction.kind, timestamp: transaction.timestamp, durations: [ms(transaction.duration)] } end
combine_traces(traces, into)
click to toggle source
# File lib/opbeat/data_builders/transactions.rb, line 38 def combine_traces traces, into traces.each do |trace| key = [trace.transaction.endpoint, trace.signature, trace.timestamp] if into[key].nil? into[key] = build_trace(trace) else into[key][:durations] << [ ms(trace.duration), ms(trace.transaction.duration) ] into[key][:start_time] << ms(trace.relative_start) end end end
ms(nanos)
click to toggle source
# File lib/opbeat/data_builders/transactions.rb, line 80 def ms nanos nanos.to_f / 1_000_000 end