Sha256: 31c5b271ec19e3fc071678caf83c0847b90f38cab5d1ae3d7d61c732081692e5

Contents?: true

Size: 934 Bytes

Versions: 7

Compression:

Stored size: 934 Bytes

Contents

# frozen_string_literal: true

module Kiev
  # Abstracts common details about reading tracing context
  # into Kiev's request store. Subclass and override #[] to
  # change field lookup.
  class ContextReader
    REQUEST_ID = "request_id"
    TRACKING_ID = "tracking_id"
    REQUEST_DEPTH = "request_depth"
    TREE_PATH = "tree_path"

    def initialize(subject)
      @subject = subject
    end

    def [](key)
      subject[key]
    end

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

    alias_method :request_id, :tracking_id

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

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

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

    private

    attr_reader :subject
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
kiev-4.8.2 lib/kiev/context_reader.rb
kiev-4.8.1 lib/kiev/context_reader.rb
kiev-4.8.0 lib/kiev/context_reader.rb
kiev-4.7.0 lib/kiev/context_reader.rb
kiev-4.6.0 lib/kiev/context_reader.rb
kiev-4.5.0 lib/kiev/context_reader.rb
kiev-4.4.0 lib/kiev/context_reader.rb