class Aws::Xray::Context

Constants

VAR_NAME

Attributes

name[R]

Public Class Methods

current() click to toggle source

@return [Aws::Xray::Context]

# File lib/aws/xray/context.rb, line 11
def current
  Thread.current.thread_variable_get(VAR_NAME) || raise(NotSetError)
end
new(name, trace, base_segment_id = nil) click to toggle source
# File lib/aws/xray/context.rb, line 52
def initialize(name, trace, base_segment_id = nil)
  raise 'name is required' unless name
  @name = name
  @trace = trace
  @base_segment_id = base_segment_id
  @disabled_ids = []
  @subsegment_name = nil
end
started?() click to toggle source

@return [Boolean]

# File lib/aws/xray/context.rb, line 24
def started?
  !!Thread.current.thread_variable_get(VAR_NAME)
end
with_given_context(context) { || ... } click to toggle source

@param [Aws::Xray::Context] context

# File lib/aws/xray/context.rb, line 16
def with_given_context(context)
  Thread.current.thread_variable_set(VAR_NAME, context)
  yield
ensure
  remove_current
end
with_new_context(name, trace) { || ... } click to toggle source

@param [String] name logical name of this tracing context. @param [Aws::Xray::Trace] trace newly generated trace or created with

HTTP request header.

@yield [Aws::Xray::Context] newly created context.

# File lib/aws/xray/context.rb, line 32
def with_new_context(name, trace)
  build_current(name, trace)
  yield
ensure
  remove_current
end

Private Class Methods

build_current(name, trace) click to toggle source
# File lib/aws/xray/context.rb, line 41
def build_current(name, trace)
  Thread.current.thread_variable_set(VAR_NAME, Context.new(name, trace))
end
remove_current() click to toggle source
# File lib/aws/xray/context.rb, line 45
def remove_current
  Thread.current.thread_variable_set(VAR_NAME, nil)
end

Public Instance Methods

base_trace()
Alias for: start_segment
child_trace(remote:, name:)
Alias for: start_subsegment
copy() click to toggle source

Curretly context object is thread safe, so copying is not necessary, but in case we need this, offer copy interface for multi threaded environment.

Trace should be imutable and thread-safe.

See README for example.

# File lib/aws/xray/context.rb, line 68
def copy
  self.class.new(@name.dup, @trace.copy, @base_segment_id ? @base_segment_id.dup : nil)
end
disable_trace(id) { || ... } click to toggle source

Use `Aws::Xray.disable_trace` instead of this. @param [Symbol] id must be unique between tracing methods.

# File lib/aws/xray/context.rb, line 114
def disable_trace(id)
  @disabled_ids << id

  begin
    yield
  ensure
    @disabled_ids.delete(id)
  end
end
disabled?(id) click to toggle source

Use `Aws::Xray.disabled?` instead of this. @param [Symbol] id @return [Boolean]

# File lib/aws/xray/context.rb, line 127
def disabled?(id)
  @disabled_ids.include?(id)
end
overwrite(name:) { || ... } click to toggle source

@param [String] name

# File lib/aws/xray/context.rb, line 132
def overwrite(name:)
  return yield if @subsegment_name

  @subsegment_name = name.to_s

  begin
    yield
  ensure
    @subsegment_name = nil
  end
end
start_segment() { |base_segment| ... } click to toggle source

Use `Aws::Xray.trace` instead of this. @yield [Aws::Xray::Segment] @return [Object] A value which given block returns.

# File lib/aws/xray/context.rb, line 75
def start_segment
  base_segment = Segment.build(@name, @trace)
  @base_segment_id = base_segment.id

  begin
    yield base_segment
  rescue Exception => e
    base_segment.set_error(fault: true, e: e)
    raise e
  ensure
    base_segment.finish unless base_segment.finished?
    Client.send_segment(base_segment) if @trace.sampled?
  end
end
Also aliased as: base_trace
start_subsegment(remote:, name:) { |sub| ... } click to toggle source

Use `Aws::Xray.start_subsegment` instead of this. @param [Boolean] remote @param [String] name Arbitrary name of the sub segment. e.g. “funccall_f”. @yield [Aws::Xray::Subsegment] @return [Object] A value which given block returns.

# File lib/aws/xray/context.rb, line 96
def start_subsegment(remote:, name:)
  raise SegmentDidNotStartError unless @base_segment_id
  sub = Subsegment.build(@trace, @base_segment_id, remote: remote, name: overwrite_name(name))

  begin
    yield sub
  rescue Exception => e
    sub.set_error(fault: true, e: e)
    raise e
  ensure
    sub.finish unless sub.finished?
    Client.send_segment(sub) if @trace.sampled?
  end
end
Also aliased as: child_trace

Private Instance Methods

overwrite_name(name) click to toggle source
# File lib/aws/xray/context.rb, line 146
def overwrite_name(name)
  return name unless @subsegment_name

  name = @subsegment_name
  @subsegment_name = nil
  name
end