class InfluxReporter::DataBuilders::Transactions

Public Instance Methods

build(transactions) click to toggle source
# File lib/influx_reporter/data_builders/transactions.rb, line 7
def build(transactions)
  data_points = []
  transactions.each do |transaction|
    data_points << build_transaction(transaction)
    transaction.traces.each do |trace|
      next if trace.kind == InfluxReporter::Transaction::ROOT_TRACE_NAME
      data_points << build_trace(trace)
    end
  end
  data_points
end

Private Instance Methods

build_trace(trace) click to toggle source

@param trace [InfluxReporter::Trace] @return [Hash]

# File lib/influx_reporter/data_builders/transactions.rb, line 76
def build_trace(trace)
  {
      series: "trace.#{trace.kind.split('.').first}",
      tags: trace_tags(trace),
      values: trace_values(trace),
      timestamp: trace.timestamp
  }
end
build_transaction(transaction) click to toggle source

@param transaction [InfluxReporter::Transaction]

# File lib/influx_reporter/data_builders/transactions.rb, line 22
def build_transaction(transaction)
  {
      series: series(transaction),
      tags: tags(transaction),
      values: values(transaction),
      timestamp: transaction.timestamp
  }
end
clean(hash) click to toggle source

@param hash [Hash] @return [Hash]

# File lib/influx_reporter/data_builders/transactions.rb, line 111
def clean(hash)
  hash.reject { |_, value| value.nil? || value == '' }
end
ms(nanos) click to toggle source
# File lib/influx_reporter/data_builders/transactions.rb, line 115
def ms(nanos)
  nanos.to_f / 1_000_000
end
series(transaction) click to toggle source

@param transaction [InfluxReporter::Transaction, InfluxReporter::Trace] @return [String]

# File lib/influx_reporter/data_builders/transactions.rb, line 33
def series(transaction)
  transaction.kind.split('.').first(2).join('.')
end
tags(transaction) click to toggle source

@param transaction [InfluxReporter::Transaction] @return [Hash]

# File lib/influx_reporter/data_builders/transactions.rb, line 39
def tags(transaction)
  tags = {
      endpoint: transaction.endpoint,
      result: transaction.result.to_i,
      kind: transaction.kind.split('.')[2..-1].join('.')
  }
  tags = (transaction.root_trace.extra[:tags] || {}).merge(tags)
  tags = transaction.config.tags.merge(tags) if transaction.config
  clean tags
end
trace_tags(trace) click to toggle source

@param trace [InfluxReporter::Trace]

# File lib/influx_reporter/data_builders/transactions.rb, line 86
def trace_tags(trace)
  tags = {
      endpoint: trace.transaction.endpoint,
      signature: trace.signature,
      kind: trace.kind.split('.')[1..-1].join('.')
  }
  tags = (trace.transaction.root_trace.extra[:tags] || {}).merge(trace.extra[:tags] || {}).merge(tags)
  tags = trace.transaction.config.tags.merge(tags) if trace.transaction.config
  clean tags
end
trace_values(trace) click to toggle source

@param trace [InfluxReporter::Trace]

# File lib/influx_reporter/data_builders/transactions.rb, line 99
def trace_values(trace)
  values = {
      duration: ms(trace.duration),
      start_time: ms(trace.relative_start)
  }
  values = (trace.extra[:values] || {}).merge(values)
  values[:uuid] ||= trace.transaction.root_trace.extra[:values][:uuid] if trace.transaction.root_trace.extra[:values]
  clean values
end
values(transaction) click to toggle source

@param transaction [InfluxReporter::Transaction] @return [Hash]

# File lib/influx_reporter/data_builders/transactions.rb, line 52
def values(transaction)
  values = {
      duration: ms(transaction.duration)
  }.merge(values_from_traces(transaction))
  values = (transaction.root_trace.extra[:values] || {}).merge(values)
  clean values
end
values_from_traces(transaction) click to toggle source

@param transaction [InfluxReporter::Transaction] @return [Hash]

# File lib/influx_reporter/data_builders/transactions.rb, line 62
def values_from_traces(transaction)
  values = {}
  transaction.traces.each do |trace|
    next if trace.signature == InfluxReporter::Transaction::ROOT_TRACE_NAME || trace.transaction.root_trace == trace
    values["#{trace.kind}.count"] ||= 0
    values["#{trace.kind}.duration"] ||= 0
    values["#{trace.kind}.count"] += 1
    values["#{trace.kind}.duration"] += ms(trace.duration)
  end
  values
end