Sha256: 92fea5041531d008878b2af7e87dd6770df45679f1a4f76f346fb017ae517300

Contents?: true

Size: 1.38 KB

Versions: 3

Compression:

Stored size: 1.38 KB

Contents

module Imprint
  class Tracer
    TRACER_HEADER    = 'HTTP_IMPRINTID'
    TRACER_KEY       = 'IMPRINTID'
    RAILS_REQUEST_ID = "action_dispatch.request_id"
    TRACE_ID_DEFAULT = "-1"
    TRACER_TIMESTAMP = "TIMESTAMP"
    TRACE_CHARS      = [('a'..'z'), ('A'..'Z')].map { |i| i.to_a }.flatten

    def self.set_trace_id(id, rack_env = {})
      Thread.current[TRACER_TIMESTAMP] = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%S.%6N")
      Thread.current[TRACER_KEY] = id
      # setting to the rack_env, gives error tracking support in some systems
      rack_env[TRACER_KEY] = id
    end

    def self.get_trace_id
      if Thread.current.key?(TRACER_KEY)
        Thread.current[TRACER_KEY]
      else
        TRACE_ID_DEFAULT
      end
    end

    def self.get_trace_timestamp
      Time.now.utc.strftime("%Y-%m-%dT%H:%M:%S.%6N")
    end

    def self.get_pid
      "#{$$}"
    end

    def self.insert_trace_id_in_message(message, severity = nil)
      if message && message.is_a?(String) && message.length > 1 && !message.include?('trace_id=')
        trace_id = get_trace_id

        if trace_id && trace_id != TRACE_ID_DEFAULT
          message.insert 0, "#{get_trace_timestamp} #{severity} "
          message.gsub!("\n"," process_pid=#{get_pid} trace_id=#{trace_id}\n")
        end
      end
    end

    def self.rand_trace_id
      (0...6).map { TRACE_CHARS[rand(TRACE_CHARS.length)] }.join
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
imprint-1.4.3 lib/imprint/tracer.rb
imprint-1.4.3.pre8 lib/imprint/tracer.rb
imprint-1.4.3.pre7 lib/imprint/tracer.rb