lib/rorvswild.rb in rorvswild-0.0.5 vs lib/rorvswild.rb in rorvswild-0.0.6
- old
+ new
@@ -59,11 +59,11 @@
file, line, method = extract_file_and_line_from_call_stack(caller)
# I can't figure out the exact location which triggered the query, so at least the SQL is logged.
sql, file, line, method = payload[:sql], "Unknow", 0, "Unknow" if !file
sql = payload[:sql] if runtime >= log_sql_threshold
plan = explain(payload[:sql], payload[:binds]) if runtime >= explain_sql_threshold
- queries << {file: file, line: line, method: method, sql: sql, plan: plan, runtime: runtime}
+ push_query(file: file, line: line, method: method, sql: sql, plan: plan, runtime: runtime, times: 1)
rescue => exception
log_error(exception)
end
def after_view_rendering(name, start, finish, id, payload)
@@ -103,9 +103,22 @@
@queries
end
def views
@views
+ end
+
+ def push_query(query)
+ if query[:sql] || query[:plan]
+ queries << query
+ else
+ if hash = queries.find { |hash| hash[:line] == query[:line] && hash[:file] == query[:file] }
+ hash[:runtime] += query[:runtime]
+ hash[:times] += 1
+ else
+ queries << query
+ end
+ end
end
def slowest_views
views.values.sort { |h1, h2| h2[:runtime] <=> h1[:runtime] }[0, 25]
end