module RequestTracer::Trace

Constants

TRACE_ID_UPPER_BOUND
TRACE_STACK

Public Instance Methods

clear() click to toggle source
# File lib/request_tracer/trace.rb, line 117
def clear
  stack.clear
end
create() click to toggle source
# File lib/request_tracer/trace.rb, line 83
def create
  span_id = generate_id
  TraceId.new(span_id, nil, span_id)
end
generate_id() click to toggle source
# File lib/request_tracer/trace.rb, line 140
def generate_id
  rand(TRACE_ID_UPPER_BOUND)
end
latest() click to toggle source
# File lib/request_tracer/trace.rb, line 88
def latest
  stack.last
end
latest_or_create() click to toggle source
# File lib/request_tracer/trace.rb, line 92
def latest_or_create
  latest || stack.push(create)
end
pop() click to toggle source
# File lib/request_tracer/trace.rb, line 113
def pop
  stack.pop
end
push(trace_info) { || ... } click to toggle source
# File lib/request_tracer/trace.rb, line 96
def push(trace_info)
  return yield unless trace_info
  trace = if trace_info.include?("trace_id") && trace_info.include?("span_id")
    TraceId.create(trace_info)
  else
    TraceId.spawn_from_hash(trace_info)
  end
  stack.push(trace)
  if block_given?
    begin
      yield trace
    ensure
      pop
    end
  end
end
record(annotation = nil, &block) click to toggle source
# File lib/request_tracer/trace.rb, line 132
def record(annotation = nil, &block)
  tracer.record((latest && latest.next_id) || create, annotation, &block)
end
tracer=(tracer) click to toggle source
# File lib/request_tracer/trace.rb, line 136
def tracer=(tracer)
  @tracer = tracer
end
unwind() { || ... } click to toggle source
# File lib/request_tracer/trace.rb, line 121
def unwind
  if block_given?
    begin
      saved_stack = stack.dup
      yield
    ensure
      stack = saved_stack
    end
  end
end

Private Instance Methods

stack() click to toggle source
# File lib/request_tracer/trace.rb, line 153
def stack
  Thread.current[TRACE_STACK] ||= []
end
stack=(stack) click to toggle source

“stack” acts as a thread local variable and cannot be shared between threads.

# File lib/request_tracer/trace.rb, line 149
def stack=(stack)
  Thread.current[TRACE_STACK] = stack
end
tracer() click to toggle source
# File lib/request_tracer/trace.rb, line 157
def tracer
  @tracer ||= DefaultTracer.new
end