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

Instance Method Summary collapse

Instance Method Details

#default_endpointObject



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

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

#default_endpoint=(endpoint) ⇒ Object



137
138
139
# File 'lib/finagle-thrift/trace.rb', line 137

def default_endpoint=(endpoint)
  @default_endpoint = endpoint
end

#generate_idObject



129
130
131
# File 'lib/finagle-thrift/trace.rb', line 129

def generate_id
  rand(TRACE_ID_UPPER_BOUND)
end

#idObject



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

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



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

def pop
  stack.pop
end

#push(trace_id) ⇒ Object



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

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

#record(annotation) ⇒ Object



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

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

#sample_rate=(sample_rate) ⇒ Object



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

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



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

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

#should_sample?Boolean

Returns:

  • (Boolean)


133
134
135
# File 'lib/finagle-thrift/trace.rb', line 133

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

#tracer=(tracer) ⇒ Object



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

def tracer=(tracer)
  @tracer = tracer
end

#unwindObject



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

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