active-record-query-count 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -6
- data/lib/active-record-query-count.rb +22 -13
- data/lib/active_record_query_count/configuration.rb +0 -1
- data/lib/active_record_query_count/printer/base.rb +2 -0
- data/lib/active_record_query_count/printer/console.rb +1 -2
- data/lib/active_record_query_count/printer/html.rb +0 -4
- data/lib/active_record_query_count/printer/html_compare.rb +0 -4
- data/lib/active_record_query_count/recording/tracker.rb +34 -30
- data/lib/active_record_query_count/version.rb +1 -1
- data/scripts_for_testing/script_compare_html.rb +1 -1
- data/scripts_for_testing/script_printer_html.rb +1 -1
- data/scripts_for_testing/scripts_console.rb.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d095bdca093b9cc7bf7f2e765855daa33c256a6eb6a23f7e7efb70001675f881
|
4
|
+
data.tar.gz: 50cf40d3cd40b1ee75096a5518e83289739fcbe381afa484d9db6c4395370a83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c13044996330b7784b78afef3a0243d9199c9f694ce5998d9349db9e2fc930d33f22e5425dc235c653c3d1c2283bf811dd484c7ffa7363c606ac0a191d7cfddb
|
7
|
+
data.tar.gz: c8f60440c96860f2dff53cd739718a1c28815de9113a7a323def118dbcb63b72442368ef1f90a24ed026c9c5d74c223a14e083ed57c0ae2a3f3988abebe20a8c
|
data/README.md
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# ActiveRecordQueryCount
|
2
2
|
|
3
|
-
`ActiveRecordQueryCount` is a Ruby gem designed to help you visualize and track SQL queries executed by your ActiveRecord models
|
3
|
+
`ActiveRecordQueryCount` is a Ruby gem designed to help you visualize and track the SQL queries executed by your ActiveRecord models within a block of code.
|
4
4
|
|
5
|
-
By subscribing to ActiveSupport notifications, it provides detailed insights into the
|
5
|
+
By subscribing to ActiveSupport notifications, it provides detailed insights into the number of queries being run, the time taken by the code at specific locations (by adding the time each query took in that place), the tables involved, and the locations in your code where the queries were generated.
|
6
6
|
|
7
|
-
|
7
|
+
This gem offers three key features:
|
8
8
|
|
9
|
-
1.
|
10
|
-
2. Benchmark two blocks of code to
|
11
|
-
3.
|
9
|
+
1. View an overview of all queries executed by a block of code, including the time taken and their origin locations, presented in a graph, an HTML table, or directly in the console.
|
10
|
+
2. Benchmark two blocks of code to compare SQL query counts at different locations, with results displayed in a graph or table.
|
11
|
+
3. Get an overview of SQL queries for the current request in a controller action, accessible via a button in the top-left corner of the screen.
|
12
12
|
|
13
13
|
## Installation
|
14
14
|
|
@@ -1,17 +1,26 @@
|
|
1
|
-
require 'active_support/notifications'
|
2
|
-
require_relative 'active_record_query_count/version'
|
3
|
-
require_relative 'active_record_query_count/configuration'
|
4
|
-
require_relative 'active_record_query_count/printer/base'
|
5
|
-
require_relative 'active_record_query_count/printer/console'
|
6
|
-
require_relative 'active_record_query_count/printer/html'
|
7
|
-
require_relative 'active_record_query_count/recording/base'
|
8
|
-
require_relative 'active_record_query_count/recording/tracker'
|
9
|
-
require_relative 'active_record_query_count/compare/comparator'
|
10
|
-
require_relative 'active_record_query_count/middleware'
|
11
|
-
require_relative 'active_record_query_count/printer/html_compare'
|
12
|
-
|
13
1
|
module ActiveRecordQueryCount
|
2
|
+
autoload :VERSION, 'active_record_query_count/version'
|
3
|
+
autoload :Configuration, 'active_record_query_count/configuration'
|
4
|
+
autoload :Middleware, 'active_record_query_count/middleware'
|
5
|
+
|
6
|
+
module Printer
|
7
|
+
autoload :Base, 'active_record_query_count/printer/base'
|
8
|
+
autoload :Console, 'active_record_query_count/printer/console'
|
9
|
+
autoload :Html, 'active_record_query_count/printer/html'
|
10
|
+
autoload :HtmlCompare, 'active_record_query_count/printer/html_compare'
|
11
|
+
end
|
12
|
+
|
13
|
+
module Recording
|
14
|
+
autoload :Base, 'active_record_query_count/recording/base'
|
15
|
+
autoload :Tracker, 'active_record_query_count/recording/tracker'
|
16
|
+
end
|
17
|
+
|
18
|
+
module Compare
|
19
|
+
autoload :Comparator, 'active_record_query_count/compare/comparator'
|
20
|
+
end
|
21
|
+
|
14
22
|
extend Recording::Base
|
23
|
+
|
15
24
|
if defined?(Rails::Railtie)
|
16
25
|
class QueryCountRailtie < Rails::Railtie
|
17
26
|
initializer 'active_record_query_count.configure_rails_initialization' do |app|
|
@@ -26,7 +35,7 @@ module ActiveRecordQueryCount
|
|
26
35
|
end
|
27
36
|
|
28
37
|
def tracker
|
29
|
-
Thread.current[:query_counter_data] ||= Tracker.new
|
38
|
+
Thread.current[:query_counter_data] ||= Recording::Tracker.new
|
30
39
|
end
|
31
40
|
|
32
41
|
def compare
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'json'
|
1
2
|
module ActiveRecordQueryCount
|
2
3
|
module Printer
|
3
4
|
class Base
|
@@ -35,6 +36,7 @@ module ActiveRecordQueryCount
|
|
35
36
|
end
|
36
37
|
|
37
38
|
def open_file html_dest
|
39
|
+
require 'launchy'
|
38
40
|
if ENV['WSL_DISTRIBUTION']
|
39
41
|
Launchy.open("file://wsl%24/#{ENV['WSL_DISTRIBUTION']}#{html_dest}")
|
40
42
|
else
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'colorize'
|
2
|
-
|
3
1
|
module ActiveRecordQueryCount
|
4
2
|
module Printer
|
5
3
|
class Console < Base
|
@@ -9,6 +7,7 @@ module ActiveRecordQueryCount
|
|
9
7
|
end
|
10
8
|
|
11
9
|
def print
|
10
|
+
require 'colorize'
|
12
11
|
data = filter_data(@data)
|
13
12
|
puts '[ActiveRecordQueryCount] Query count per table:'.colorize(:blue)
|
14
13
|
puts "Total query count: #{data.values.sum { |v| v[:count] }}\n\n"
|
@@ -1,42 +1,46 @@
|
|
1
|
+
require 'active_support/notifications'
|
2
|
+
|
1
3
|
module ActiveRecordQueryCount
|
2
|
-
|
3
|
-
|
4
|
-
|
4
|
+
module Recording
|
5
|
+
class Tracker
|
6
|
+
REGEX_TABLE_SQL = /FROM\s+"(?<table>[^"]+)"/
|
7
|
+
attr_accessor :active_record_query_tracker, :subscription
|
5
8
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
+
def initialize
|
10
|
+
reset_query_count
|
11
|
+
end
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
# This assums that in the same location of the code it will always be the same sql query
|
14
|
+
def reset_query_count
|
15
|
+
@active_record_query_tracker = Hash.new do |hash, key|
|
16
|
+
hash[key] = { count: 0, location: Hash.new do |loc_hash, loc_key|
|
17
|
+
loc_hash[loc_key] = { count: 0, sql: nil }
|
18
|
+
end }
|
19
|
+
end
|
16
20
|
end
|
17
|
-
end
|
18
21
|
|
19
|
-
|
20
|
-
|
22
|
+
def subscribe
|
23
|
+
return unless subscription.nil?
|
21
24
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
25
|
+
@subscription = ActiveSupport::Notifications.subscribe('sql.active_record') do |_a, start, finish, _d, payload|
|
26
|
+
caller_from_sql = caller
|
27
|
+
sql = payload[:sql]
|
28
|
+
match = sql.match(REGEX_TABLE_SQL)
|
29
|
+
if match.present? && match[:table]
|
30
|
+
actual_location = Rails.backtrace_cleaner.clean(caller_from_sql).first
|
31
|
+
active_record_query_tracker[match[:table]][:count] += 1
|
32
|
+
active_record_query_tracker[match[:table]][:location][actual_location][:duration] ||= 0
|
33
|
+
active_record_query_tracker[match[:table]][:location][actual_location][:duration] += (finish - start) * 1000
|
34
|
+
active_record_query_tracker[match[:table]][:location][actual_location][:count] += 1
|
35
|
+
active_record_query_tracker[match[:table]][:location][actual_location][:sql] = sql
|
36
|
+
end
|
33
37
|
end
|
34
38
|
end
|
35
|
-
end
|
36
39
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
+
def unsubscribe
|
41
|
+
ActiveSupport::Notifications.unsubscribe(@subscription)
|
42
|
+
@subscription = nil
|
43
|
+
end
|
40
44
|
end
|
41
45
|
end
|
42
46
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-record-query-count
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jose Lara
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -265,7 +265,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
265
265
|
requirements:
|
266
266
|
- - ">="
|
267
267
|
- !ruby/object:Gem::Version
|
268
|
-
version: '
|
268
|
+
version: '3.0'
|
269
269
|
- - "<"
|
270
270
|
- !ruby/object:Gem::Version
|
271
271
|
version: '4.0'
|
@@ -275,7 +275,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
275
275
|
- !ruby/object:Gem::Version
|
276
276
|
version: '0'
|
277
277
|
requirements: []
|
278
|
-
rubygems_version: 3.
|
278
|
+
rubygems_version: 3.5.15
|
279
279
|
signing_key:
|
280
280
|
specification_version: 4
|
281
281
|
summary: Display an overview of the quantity of queries being made and their origins
|