class AppDynamics::BusinessTransactions::AutoTransaction
Public Class Methods
new(full: false, segments: nil, dynamic: nil)
click to toggle source
# File lib/app_dynamics/business_transactions.rb, line 88 def initialize(full: false, segments: nil, dynamic: nil) if full && (segments || dynamic) raise ArgumentError, "can't specify other options with full" end @full = full unless full segments ||= { first: 2 } symbolize_keys!(segments) if !segments[:first].is_a?(Integer) && !segments[:last].is_a?(Integer) raise ArgumentError, "segments must include :first or :last" end @segment_opts = segments dynamic ||= {} unless dynamic.empty? if dynamic.is_a?(Symbol) h = {} h[dynamic] = true dynamic = h end symbolize_keys!(dynamic) if dynamic.keys.length > 1 raise ArgumentError, "can only specific one dynamic option" end unless %i(param header method host origin).include?(dynamic.keys.first) raise ArgumentError, "invalid dynamic type: #{dynamic.keys.first}" end end @dynamic_opts = dynamic end end
Public Instance Methods
==(other)
click to toggle source
For testing
# File lib/app_dynamics/business_transactions.rb, line 169 def ==(other) @full == other.instance_variable_get(:@full) && @segment_opts == other.instance_variable_get(:@segment_opts) && @dynamic_opts == other.instance_variable_get(:@dynamic_opts) end
matches?(*)
click to toggle source
# File lib/app_dynamics/business_transactions.rb, line 164 def matches?(*) true end
name_for(env)
click to toggle source
# File lib/app_dynamics/business_transactions.rb, line 124 def name_for(env) return env['PATH_INFO'] if @full segments = env['PATH_INFO'].split('/') segments.shift() if segments[0] && segments[0].empty? if (specific = @dynamic_opts[:segments]) return segments.values_at(*specific.map{|i| i - 1 }).join end segments = if (first = @segment_opts[:first]) segments[0...first] elsif (last = @segment_opts[:last]) last = segments.length if last > segments.length segments[-last..-1] end name = '/' + segments.join('/') extra_val = if (param = @dynamic_opts[:param]) req = Rack::Request.new(env) req.params[param.to_s] elsif (header = @dynamic_opts[:header]) header = header.tr('-', '_').upcase env[header] || env["HTTP_#{header}"] elsif (method = @dynamic_opts[:method]) env['REQUEST_METHOD'] elsif (host = @dynamic_opts[:host]) env['HTTP_HOST'] || env['SERVER_NAME'] elsif (origin = @dynamic_opts[:origin]) env['HTTP_ORIGIN'] end unless extra_val.blank? name << '.' << extra_val end name end
Private Instance Methods
symbolize_keys!(hash)
click to toggle source
# File lib/app_dynamics/business_transactions.rb, line 177 def symbolize_keys!(hash) hash.keys.each do |key| hash[key.to_sym] = hash.delete(key) end end