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