module Praxis::Plugins::PraxisMapperPlugin::Statistics

Public Class Methods

detailed(identity_map) click to toggle source
# File lib/praxis/plugins/praxis_mapper_plugin.rb, line 192
def self.detailed(identity_map)
  stats_by_model = identity_map.query_statistics.sum_totals_by_model
  stats_total = identity_map.query_statistics.sum_totals
  fields = [ :query_count, :records_loaded, :datastore_interactions, :datastore_interaction_time]
  rows = []

  total_models_loaded = 0
  # stats per model
  stats_by_model.each do |model, totals|
    total_values = totals.values_at(*fields)
    self.round_fields_at( total_values , [fields.index(:datastore_interaction_time)])
    row = [ model ] + total_values
    models_loaded = identity_map.all(model).size
    total_models_loaded += models_loaded
    row << models_loaded
    rows << row
  end

  rows << :separator

  # totals for all models
  stats_total_values = stats_total.values_at(*fields)
  self.round_fields_at(stats_total_values , [fields.index(:datastore_interaction_time)])
  rows << [ "All Models" ] + stats_total_values + [total_models_loaded]

  table = Terminal::Table.new \
    :rows => rows,
    :title => "Praxis::Mapper Statistics",
    :headings => [ "Model", "# Queries", "Records Loaded", "Interactions", "Time(sec)", "Models Loaded" ]

  table.align_column(1, :right)
  table.align_column(2, :right)
  table.align_column(3, :right)
  table.align_column(4, :right)
  table.align_column(5, :right)
  self.to_logger "\n#{table.to_s}"
end
log(request, identity_map, log_stats) click to toggle source
# File lib/praxis/plugins/praxis_mapper_plugin.rb, line 173
def self.log(request, identity_map, log_stats)
  return if identity_map.nil?
  return if request.silence_mapper_stats == true
  if identity_map.queries.empty?
    self.to_logger "No database interactions observed."
    return
  end


  case log_stats
  when 'detailed'
    self.detailed(identity_map)
  when 'short'
    self.short(identity_map)
  when 'skip'
    # Shouldn't receive this. But anyway...no-op.
  end
end
round_fields_at(values, indices) click to toggle source
# File lib/praxis/plugins/praxis_mapper_plugin.rb, line 230
def self.round_fields_at(values, indices)
  indices.each do |idx|
    values[idx] = "%.3f" % values[idx]
  end
end
short(identity_map) click to toggle source
# File lib/praxis/plugins/praxis_mapper_plugin.rb, line 236
def self.short(identity_map)
  self.to_logger identity_map.query_statistics.sum_totals.to_s
end
to_logger(message) click to toggle source
# File lib/praxis/plugins/praxis_mapper_plugin.rb, line 240
def self.to_logger(message)
    Praxis::Application.instance.logger.__send__(Plugin.instance.config.stats_log_level, "Praxis::Mapper Statistics: #{message}")
end