class Stackify::EnvDetails

Attributes

request_details[R]

Public Class Methods

new() click to toggle source
# File lib/stackify/env_details.rb, line 13
def initialize
  set_env_properties
end

Public Instance Methods

auth_info() click to toggle source
# File lib/stackify/env_details.rb, line 42
def auth_info
  with_synchronize{ @details }
end
request_details=(env) click to toggle source
# File lib/stackify/env_details.rb, line 50
def request_details= env
  request = request_instance env
  @request_details = {
    'webrequest_details' => {
      'Headers' => headers(env),
      'Cookies' => cookies(env),
      'QueryString' => request.try(:GET),
      'PostData' => request.try(:POST),
      'PostDataRaw' => request.try(:raw_post),
      'SessionData' => request.try(:session),
      'UserIPAddress' => request.try(:remote_ip) || request.try(:ip),
      'HttpMethod' => request.try(:request_method),
      'ReferralUrl' => request.referer,
      'RequestUrl' => request.try(:fullpath),
      'RequestUrlRoot' => request.try(:base_url),
      'RequestProtocol' => request.try(:scheme)
    },
    'server_variables' => server_variables(env),
    'uuid' => request.uuid
  }
rescue => e
  warning = 'failed to capture request parameters: %p: %s' % [ e.class, e.message ]
  Stackify.logger.warn warning
end
set_env_properties(rails_info = nil) click to toggle source
# File lib/stackify/env_details.rb, line 28
def set_env_properties (rails_info = nil)
  @info =  rails_info || { 'Application root' => Dir.pwd, 'Environment' => 'development'}
  @request_details = {}
  @app_name = app_name
  app_location = Stackify.configuration.app_location || @info['Application root']
  @details = {
    'DeviceName' => Socket.gethostname,
    'AppLocation' => app_location,
    'AppName' => @app_name,
    'ConfiguredAppName' => @app_name,
    'ConfiguredEnvironmentName' => Stackify.configuration.env || @info['Environment']
  }
end
set_rails_info() click to toggle source
# File lib/stackify/env_details.rb, line 17
def set_rails_info
  begin
    if (!Object.const_defined?('Rails::Info'))
      return
    end
  rescue NameError => exception
    return
  end
  set_env_properties (defined?(Rails) ? Rails::Info.properties.to_h : nil)
end
update_auth_info(info) click to toggle source
# File lib/stackify/env_details.rb, line 46
def update_auth_info info
  with_synchronize{ @details.merge! info }
end

Private Instance Methods

app_location() click to toggle source
# File lib/stackify/env_details.rb, line 89
def app_location
  Stackify.configuration.app_location
end
app_name() click to toggle source
# File lib/stackify/env_details.rb, line 85
def app_name
  Stackify.configuration.app_name || Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'') || 'Unknown'
end
cookies(env) click to toggle source
# File lib/stackify/env_details.rb, line 93
def cookies env
  env['action_dispatch.cookies'].try(:to_h)
end
headers(env) click to toggle source
# File lib/stackify/env_details.rb, line 97
def headers env
  headers = env.reject{ |k| !(k.start_with?'HTTP_') }
  headers.each_key { | key | headers[key] = @@masked_value if @@masked_headers.include?(key) }
end
mutex() click to toggle source
# File lib/stackify/env_details.rb, line 77
def mutex
  @mutex ||= Mutex.new
end
request_instance(env) click to toggle source
# File lib/stackify/env_details.rb, line 117
def request_instance env
  if defined? ActionDispatch::Request
    ActionDispatch::Request.new env
  else
    Rack::Request.new env
  end
end
server_name(str) click to toggle source
# File lib/stackify/env_details.rb, line 109
def server_name str
  str[/(^\S*)\//, 1]
end
server_variables(env) click to toggle source
# File lib/stackify/env_details.rb, line 102
def server_variables env
  {
    'server' => server_name(env['SERVER_SOFTWARE']),
    'version' => server_version(env['SERVER_SOFTWARE'])
  }
end
server_version(str) click to toggle source
# File lib/stackify/env_details.rb, line 113
def server_version str
  str[/\/(\S*)\s/, 1]
end
with_synchronize() { || ... } click to toggle source
# File lib/stackify/env_details.rb, line 81
def with_synchronize
  mutex.synchronize{ yield }
end