Class: Kiev::ContextReader

Inherits:
Object
  • Object
show all
Defined in:
lib/kiev/context_reader.rb

Overview

Abstracts common details about reading tracing context into Kiev’s request store. Subclass and override #[] to change field lookup.

Direct Known Subclasses

Shoryuken::ContextReader

Constant Summary collapse

REQUEST_ID =
"request_id"
TRACKING_ID =
"tracking_id"
REQUEST_DEPTH =
"request_depth"
TREE_PATH =
"tree_path"

Instance Method Summary collapse

Constructor Details

#initialize(subject) ⇒ ContextReader

Returns a new instance of ContextReader.



13
14
15
# File 'lib/kiev/context_reader.rb', line 13

def initialize(subject)
  @subject = subject
end

Instance Method Details

#[](key) ⇒ Object



17
18
19
# File 'lib/kiev/context_reader.rb', line 17

def [](key)
  subject[key]
end

#request_depthObject



31
32
33
# File 'lib/kiev/context_reader.rb', line 31

def request_depth
  tree_root? ? 0 : (self[REQUEST_DEPTH].to_i + 1)
end

#tracking_idObject Also known as: request_id



21
22
23
# File 'lib/kiev/context_reader.rb', line 21

def tracking_id
  presence(self[TRACKING_ID]) || presence(self[REQUEST_ID]) || SecureRandom.uuid
end

#tree_pathObject



35
36
37
38
39
40
41
# File 'lib/kiev/context_reader.rb', line 35

def tree_path
  if tree_root?
    SubrequestHelper.root_path(synchronous: false)
  else
    self[TREE_PATH]
  end
end

#tree_root?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/kiev/context_reader.rb', line 27

def tree_root?
  !self[TRACKING_ID] && !self[REQUEST_ID]
end