class Nightwing::Instrumentation::ActiveRecord

This code was influenced by Matt Aimonetti’s awesome blog post: “Practical Guide to StatsD/Graphite Monitoring” Check it out: matt.aimonetti.net/posts/2013/06/26/practical-guide-to-graphite-monitoring

Constants

SQL_INSERT_DELETE_PARSER_REGEXP
SQL_SELECT_REGEXP
SQL_UPDATE_REGEXP

Public Instance Methods

call(_name, started, finished, _unique_id, payload) click to toggle source
# File lib/nightwing/instrumentation/active_record.rb, line 10
def call(_name, started, finished, _unique_id, payload)
  if payload[:name] == "SQL" || payload[:name] =~ /.* Load$/ || payload[:name].nil?
    table, action = query_info(payload[:sql])
  end

  if table
    action.downcase!
    table.downcase!
    query_time = (finished - started) * 1_000

    Nightwing.client.timing "sql.#{action}.time", query_time.round
    Nightwing.client.timing "sql.#{action}.#{table}.time", query_time.round

    Nightwing.client.increment "sql.#{action}.processed"
    Nightwing.client.increment "sql.#{action}.#{table}.processed"
  end
end

Private Instance Methods

query_info(query) click to toggle source
# File lib/nightwing/instrumentation/active_record.rb, line 30
def query_info(query)
  case query
  when SQL_INSERT_DELETE_PARSER_REGEXP
    [$3, $1]
  when SQL_UPDATE_REGEXP
    [$1, "update"]
  when SQL_SELECT_REGEXP
    [$1, "select"]
  end
end