class ActionCost::RequestStats
Attributes
action_name[R]
controller_name[R]
join_stats[R]
operation_stats[R]
table_stats[R]
Public Class Methods
new(env)
click to toggle source
# File lib/action_cost/request_stats.rb, line 7 def initialize(env) begin routes_env = { :method => env['REQUEST_METHOD'] } request = Rails.application.routes.recognize_path(env['REQUEST_URI'], routes_env) @controller_name = request[:controller] @action_name = request[:action] rescue @controller_name = nil @action_name = nil end @operation_stats = { :sql => {}, :rc => {} } ActionCost::SqlParser::VALID_OPERATIONS.each do |op| @operation_stats[:sql][op] = 0 @operation_stats[:rc][op] = 0 end @table_stats = { :sql => {}, :rc => {} } @join_stats = { :sql => {}, :rc => {} } action_cost_logfile = File.open(Rails.root.join("log", 'action_cost.log'), 'a') action_cost_logfile.sync = true @logger = Logger.new(action_cost_logfile) @logger.level = Logger::DEBUG end
Public Instance Methods
close()
click to toggle source
# File lib/action_cost/request_stats.rb, line 52 def close log end
log()
click to toggle source
# File lib/action_cost/request_stats.rb, line 56 def log @logger.debug "" @logger.debug "=== ActionCost: #{@controller_name}##{@action_name}" log_by_query_type(:rc) log_by_query_type(:sql) end
push(parser)
click to toggle source
# File lib/action_cost/request_stats.rb, line 34 def push(parser) return unless parser.parse parser.log return if parser.invalid case parser.class.to_s when 'ActionCost::SqlParser' then query_type = :sql when 'ActionCost::RecordCacheParser' then query_type = :rc end increment_item(@table_stats, query_type, parser.table_name) increment_item(@operation_stats, query_type, parser.operation) parser.join_tables.each do |table| increment_item(@join_stats, query_type, join_string(parser.table_name, table)) end end
Private Instance Methods
increment_item(hash, query_type, key)
click to toggle source
# File lib/action_cost/request_stats.rb, line 65 def increment_item(hash, query_type, key) # Rails.logger.debug "increment_item: hash=#{hash.inspect}" # Rails.logger.debug "increment_item: query_type=#{query_type} key=#{key}" if hash[query_type].has_key?(key) hash[query_type][key] += 1 else hash[query_type][key] = 1 end end
join_string(t1, t2)
click to toggle source
# File lib/action_cost/request_stats.rb, line 75 def join_string(t1, t2) "#{t1}|#{t2}" end
log_by_query_type(query_type)
click to toggle source
# File lib/action_cost/request_stats.rb, line 79 def log_by_query_type(query_type) @logger.debug " #{query_type.to_s.upcase}:" @logger.debug " Operations:" ActionCost::SqlParser::VALID_OPERATIONS.each do |op| log_count(@operation_stats, query_type, op) end @logger.debug " Tables:" @table_stats[query_type].each_key do |table| log_count(@table_stats, query_type, table) end end
log_count(hash, query_type, item)
click to toggle source
# File lib/action_cost/request_stats.rb, line 91 def log_count(hash, query_type, item) val = hash[query_type][item] @logger.debug " #{item}: #{hash[query_type][item]}" if val>0 end