class InfluxReporter::Transaction

Constants

ROOT_TRACE_NAME

Attributes

config[R]
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

@param client [InfluxReporter::Client] @param endpoint [String] @param kind [String] @param result [Integer]

# File lib/influx_reporter/transaction.rb, line 13
def initialize(client, endpoint, kind = 'code.custom', result = nil)
  @client = client
  @config = client.config if client.respond_to?(:config)
  @endpoint = endpoint
  @kind = kind
  @result = result

  @timestamp = Util.nanos

  @running_traces = []
  @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

_trace_started(trace) click to toggle source
# File lib/influx_reporter/transaction.rb, line 81
def _trace_started(trace)
  @running_traces.push trace
end
_trace_stopped(trace) click to toggle source
# File lib/influx_reporter/transaction.rb, line 85
def _trace_stopped(trace)
  if @running_traces.last == trace
    @running_traces.pop
  else
    @running_traces.delete trace
  end
end
current_offset() click to toggle source
# File lib/influx_reporter/transaction.rb, line 111
def current_offset
  if curr = current_trace
    return curr.start_time
  end

  start_time
end
current_trace() click to toggle source
# File lib/influx_reporter/transaction.rb, line 107
def current_trace
  @running_traces.last
end
done(result = nil) click to toggle source
# File lib/influx_reporter/transaction.rb, line 38
def done(result = nil)
  @result = result

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

  self
end
done?() click to toggle source
# File lib/influx_reporter/transaction.rb, line 47
def done?
  @root_trace.done?
end
extra_tags() { |extra| ... } click to toggle source
# File lib/influx_reporter/transaction.rb, line 93
def extra_tags
  @root_trace.extra[:tags] ||= {}
  yield @root_trace.extra[:tags]
end
extra_values() { |extra| ... } click to toggle source
# File lib/influx_reporter/transaction.rb, line 98
def extra_values
  @root_trace.extra[:values] ||= {}
  yield @root_trace.extra[:values]
end
inspect() click to toggle source
# File lib/influx_reporter/transaction.rb, line 119
    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/influx_reporter/transaction.rb, line 34
def release
  @client.current_transaction = nil
end
running_traces() click to toggle source
# File lib/influx_reporter/transaction.rb, line 103
def running_traces
  @running_traces.clone
end
submit(result = nil) click to toggle source
# File lib/influx_reporter/transaction.rb, line 51
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/influx_reporter/transaction.rb, line 61
def trace(signature, kind = nil, extra = nil)
  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