Module: RequestTracer::Trace

Extended by:
Trace
Included in:
Trace
Defined in:
lib/request_tracer/trace.rb

Defined Under Namespace

Classes: Annotation, SpanId, TraceId

Constant Summary collapse

TRACE_ID_UPPER_BOUND =
2 ** 64
TRACE_STACK =
:trace_stack

Instance Method Summary collapse

Instance Method Details

#clearObject



117
118
119
# File 'lib/request_tracer/trace.rb', line 117

def clear
  stack.clear
end

#createObject



83
84
85
86
# File 'lib/request_tracer/trace.rb', line 83

def create
  span_id = generate_id
  TraceId.new(span_id, nil, span_id)
end

#generate_idObject



140
141
142
# File 'lib/request_tracer/trace.rb', line 140

def generate_id
  rand(TRACE_ID_UPPER_BOUND)
end

#latestObject



88
89
90
# File 'lib/request_tracer/trace.rb', line 88

def latest
  stack.last
end

#latest_or_createObject



92
93
94
# File 'lib/request_tracer/trace.rb', line 92

def latest_or_create
  latest || stack.push(create)
end

#popObject



113
114
115
# File 'lib/request_tracer/trace.rb', line 113

def pop
  stack.pop
end

#push(trace_info) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# 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) ⇒ Object



132
133
134
# 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) ⇒ Object



136
137
138
# File 'lib/request_tracer/trace.rb', line 136

def tracer=(tracer)
  @tracer = tracer
end

#unwindObject



121
122
123
124
125
126
127
128
129
130
# 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