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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e9f34b85f506639383a20f5abe438e1f52938a77cafd40189c5c60f9d380f3c
4
- data.tar.gz: 1f70e660ded4a8414ab1f3cc4b921a68837a83c9100f3fc73f257c63834b280b
3
+ metadata.gz: d095bdca093b9cc7bf7f2e765855daa33c256a6eb6a23f7e7efb70001675f881
4
+ data.tar.gz: 50cf40d3cd40b1ee75096a5518e83289739fcbe381afa484d9db6c4395370a83
5
5
  SHA512:
6
- metadata.gz: 3eb642147b61276500c618f26fc91b86463f5fbec7f9d03a7dba6ac504c2dc7419aff6943dd539be414b68da1cc16ae60344248e758cf2960ca08f3029e2bba9
7
- data.tar.gz: cec9bbf99b2ba114ddf172717ca4282a168cb75462588006a7e6d8b20b211bef3cf0868d5e7ce137748db688da700ed4fecf0bea89f28de2b8fa209ec9751cd9
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 on a block of code.
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 quantity of queries being run, including the tables involved and the locations in your code where the queries are generated.
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
- There are three things this gem allows you to do:
7
+ This gem offers three key features:
8
8
 
9
- 1. See an overview of all the queries that a code block executes and their origin locations in a graph, a table, or in the console.
10
- 2. Benchmark two blocks of code to view the difference in SQL counts at different locations, with a graph or a table.
11
- 3. See an overview of the current request on a controller action with a button on the top left corner of the screen.
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,4 +1,3 @@
1
- require 'active_support'
2
1
  require 'active_support/core_ext/module/attribute_accessors'
3
2
 
4
3
  module ActiveRecordQueryCount
@@ -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,8 +1,4 @@
1
1
  require 'erb'
2
- require 'tempfile'
3
- require 'launchy'
4
- require 'pry-byebug'
5
- require 'json'
6
2
 
7
3
  module ActiveRecordQueryCount
8
4
  module Printer
@@ -1,8 +1,4 @@
1
1
  require 'erb'
2
- require 'tempfile'
3
- require 'launchy'
4
- require 'pry-byebug'
5
- require 'json'
6
2
 
7
3
  module ActiveRecordQueryCount
8
4
  module Printer
@@ -1,42 +1,46 @@
1
+ require 'active_support/notifications'
2
+
1
3
  module ActiveRecordQueryCount
2
- class Tracker
3
- REGEX_TABLE_SQL = /FROM\s+"(?<table>[^"]+)"/
4
- attr_accessor :active_record_query_tracker, :subscription
4
+ module Recording
5
+ class Tracker
6
+ REGEX_TABLE_SQL = /FROM\s+"(?<table>[^"]+)"/
7
+ attr_accessor :active_record_query_tracker, :subscription
5
8
 
6
- def initialize
7
- reset_query_count
8
- end
9
+ def initialize
10
+ reset_query_count
11
+ end
9
12
 
10
- # This assums that in the same location of the code it will always be the same sql query
11
- def reset_query_count
12
- @active_record_query_tracker = Hash.new do |hash, key|
13
- hash[key] = { count: 0, location: Hash.new do |loc_hash, loc_key|
14
- loc_hash[loc_key] = { count: 0, sql: nil }
15
- end }
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
- def subscribe
20
- return unless subscription.nil?
22
+ def subscribe
23
+ return unless subscription.nil?
21
24
 
22
- @subscription = ActiveSupport::Notifications.subscribe('sql.active_record') do |_a, start, finish, _d, payload|
23
- caller_from_sql = caller
24
- sql = payload[:sql]
25
- match = sql.match(REGEX_TABLE_SQL)
26
- if match.present? && match[:table]
27
- actual_location = Rails.backtrace_cleaner.clean(caller_from_sql).first
28
- active_record_query_tracker[match[:table]][:count] += 1
29
- active_record_query_tracker[match[:table]][:location][actual_location][:duration] ||= 0
30
- active_record_query_tracker[match[:table]][:location][actual_location][:duration] += (finish - start) * 1000
31
- active_record_query_tracker[match[:table]][:location][actual_location][:count] += 1
32
- active_record_query_tracker[match[:table]][:location][actual_location][:sql] = sql
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
- def unsubscribe
38
- ActiveSupport::Notifications.unsubscribe(@subscription)
39
- @subscription = nil
40
+ def unsubscribe
41
+ ActiveSupport::Notifications.unsubscribe(@subscription)
42
+ @subscription = nil
43
+ end
40
44
  end
41
45
  end
42
46
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveRecordQueryCount
4
- VERSION = '0.1.5'
4
+ VERSION = '0.1.6'
5
5
  end
@@ -1,4 +1,4 @@
1
- require_relative '../lib/active-record-query-count'
1
+ require 'active-record-query-count'
2
2
  require 'pry-byebug'
3
3
 
4
4
  data_1 = File.read('scripts_for_testing/example_script_unoptimize.yaml')
@@ -1,5 +1,5 @@
1
- require_relative '../lib/active-record-query-count'
2
1
  require 'pry-byebug'
2
+ require 'active-record-query-count'
3
3
 
4
4
  data = File.read('scripts_for_testing/example_script_unoptimize.yaml')
5
5
  data = YAML.safe_load(data, permitted_classes: [Proc, Symbol])
@@ -1,5 +1,5 @@
1
- require_relative '../lib/active-record-query-count'
2
1
  require 'pry-byebug'
2
+ require 'active-record-query-count'
3
3
 
4
4
  data = File.read('scripts_for_testing/example_script_unoptimize.yaml')
5
5
  data = YAML.safe_load(data, permitted_classes: [Proc, Symbol])
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.5
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: 2024-10-17 00:00:00.000000000 Z
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: '2.7'
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.4.10
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