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