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
#clear ⇒ Object
117
118
119
|
# File 'lib/request_tracer/trace.rb', line 117
def clear
stack.clear
end
|
#create ⇒ Object
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_id ⇒ Object
140
141
142
|
# File 'lib/request_tracer/trace.rb', line 140
def generate_id
rand(TRACE_ID_UPPER_BOUND)
end
|
#latest ⇒ Object
88
89
90
|
# File 'lib/request_tracer/trace.rb', line 88
def latest
stack.last
end
|
#latest_or_create ⇒ Object
92
93
94
|
# File 'lib/request_tracer/trace.rb', line 92
def latest_or_create
latest || stack.push(create)
end
|
#pop ⇒ Object
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
|
#unwind ⇒ Object
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
|