lib/rorvswild.rb in rorvswild-0.3.0 vs lib/rorvswild.rb in rorvswild-0.3.1
- old
+ new
@@ -98,11 +98,11 @@
Delayed::Worker.lifecycle.around(:invoke_job, &method(:around_delayed_job)) if defined?(Delayed::Worker)
Sidekiq.configure_server { |config| config.server_middleware { |chain| chain.add(SidekiqPlugin) } } if defined?(Sidekiq)
end
def before_http_request(name, start, finish, id, payload)
- request.merge!(controller: payload[:controller], action: payload[:action], path: payload[:path])
+ request.merge!(controller: payload[:controller], action: payload[:action], path: payload[:path], queries: [], views: {})
end
def after_http_request(name, start, finish, id, payload)
request[:db_runtime] = (payload[:db_runtime] || 0).round
request[:view_runtime] = (payload[:view_runtime] || 0).round
@@ -116,11 +116,11 @@
def after_sql_query(name, start, finish, id, payload)
return if !queries || payload[:name] == "EXPLAIN".freeze || payload[:name] == "SCHEMA".freeze
file, line, method = extract_most_relevant_location(caller)
runtime, sql = compute_duration(start, finish), payload[:sql]
plan = runtime >= explain_sql_threshold ? explain(payload[:sql], payload[:binds]) : nil
- push_query(file: file, line: line, method: method, sql: sql, plan: plan, runtime: runtime, times: 1)
+ push_query(file: file, line: line, method: method, sql: sql, plan: plan, runtime: runtime)
rescue => exception
log_error(exception)
end
def after_view_rendering(name, start, finish, id, payload)
@@ -158,14 +158,15 @@
measure_block(code) { eval(code) }
end
def measure_block(name, &block)
job[:name] = name
+ job[:queries] = []
started_at = Time.now
cpu_time_offset = cpu_time
block.call
- rescue => exception
+ rescue Exception => exception
job[:error] = exception_to_hash(exception)
raise
ensure
job[:runtime] = (Time.now - started_at) * 1000
job[:cpu_runtime] = (cpu_time - cpu_time_offset) * 1000
@@ -173,11 +174,11 @@
end
def catch_error(extra_details = nil, &block)
begin
block.call
- rescue => exception
+ rescue Exception => exception
record_error(exception, extra_details)
exception
end
end
@@ -195,15 +196,15 @@
#######################
private
def queries
- data[:queries] ||= []
+ data[:queries]
end
def views
- data[:views] ||= {}
+ data[:views]
end
def job
data
end
@@ -220,13 +221,19 @@
@data.delete(Thread.current.object_id)
end
def push_query(query)
if hash = queries.find { |hash| hash[:line] == query[:line] && hash[:file] == query[:file] }
+ if query[:runtime] > hash[:max_runtime]
+ hash[:max_runtime] = query[:runtime]
+ hash[:plan] = query[:plan]
+ hash[:sql] = query[:sql]
+ end
hash[:runtime] += query[:runtime]
- hash[:plan] = query[:plan]
hash[:times] += 1
else
+ query[:times] = 1
+ query[:max_runtime] = query[:runtime]
queries << query
end
end
def slowest_views