Module: Trace

Extended by:
Trace
Included in:
Trace
Defined in:
lib/finagle-thrift/trace.rb,
lib/finagle-thrift/tracer.rb

Defined Under Namespace

Classes: Annotation, BinaryAnnotation, Endpoint, FanoutTracer, FileTracer, Flags, NullTracer, Span, SpanId, TraceId, Tracer, ZipkinTracer

Constant Summary collapse

DEFAULT_SAMPLE_RATE =
0.001
TRACE_ID_UPPER_BOUND =
2 ** 64
TRACE_STACK =
:trace_stack

Instance Method Summary collapse

Instance Method Details

#default_endpointObject



143
144
145
146
147
# File 'lib/finagle-thrift/trace.rb', line 143

def default_endpoint
  @default_endpoint ||= begin
    Endpoint.new(Endpoint.host_to_i32(Socket.gethostname), 0, "finagle-ruby")
  end
end

#default_endpoint=(endpoint) ⇒ Object



139
140
141
# File 'lib/finagle-thrift/trace.rb', line 139

def default_endpoint=(endpoint)
  @default_endpoint = endpoint
end

#generate_idObject



131
132
133
# File 'lib/finagle-thrift/trace.rb', line 131

def generate_id
  rand(TRACE_ID_UPPER_BOUND)
end

#idObject



7
8
9
10
11
12
13
14
# File 'lib/finagle-thrift/trace.rb', line 7

def id
  if stack.empty?
    span_id = generate_id
    trace_id = TraceId.new(span_id, nil, span_id, should_sample?, Flags::EMPTY)
    stack.push(trace_id)
  end
  stack.last
end

#popObject



27
28
29
# File 'lib/finagle-thrift/trace.rb', line 27

def pop
  stack.pop
end

#push(trace_id) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# File 'lib/finagle-thrift/trace.rb', line 16

def push(trace_id)
  stack.push(trace_id)
  if block_given?
    begin
      yield
    ensure
      pop
    end
  end
end

#record(annotation) ⇒ Object



42
43
44
# File 'lib/finagle-thrift/trace.rb', line 42

def record(annotation)
  tracer.record(id, annotation) unless stack.empty?
end

#sample_rate=(sample_rate) ⇒ Object



50
51
52
53
54
55
# File 'lib/finagle-thrift/trace.rb', line 50

def sample_rate=(sample_rate)
  if sample_rate > 1 || sample_rate < 0
    raise ArgumentError.new("sample rate must be [0,1]")
  end
  @sample_rate = sample_rate
end

#set_rpc_name(name) ⇒ Object



46
47
48
# File 'lib/finagle-thrift/trace.rb', line 46

def set_rpc_name(name)
  tracer.set_rpc_name(id, name) unless stack.empty?
end

#should_sample?Boolean

Returns:

  • (Boolean)


135
136
137
# File 'lib/finagle-thrift/trace.rb', line 135

def should_sample?
  rand < (@sample_rate || DEFAULT_SAMPLE_RATE)
end

#tracer=(tracer) ⇒ Object



57
58
59
# File 'lib/finagle-thrift/trace.rb', line 57

def tracer=(tracer)
  @tracer = tracer
end

#unwindObject



31
32
33
34
35
36
37
38
39
40
# File 'lib/finagle-thrift/trace.rb', line 31

def unwind
  if block_given?
    begin
      saved_stack = stack.dup
      yield
    ensure
      stack = saved_stack
    end
  end
end