active-record-query-count 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 61cf944e309b8f269e891b003e767b657f9c89bf78934337199e6189d7f7599b
4
- data.tar.gz: a0b055c5fc44099ad356d366d6ffc259c9c783eaad05ce7585df3034826972a3
3
+ metadata.gz: 3e9f34b85f506639383a20f5abe438e1f52938a77cafd40189c5c60f9d380f3c
4
+ data.tar.gz: 1f70e660ded4a8414ab1f3cc4b921a68837a83c9100f3fc73f257c63834b280b
5
5
  SHA512:
6
- metadata.gz: e1c83e3b6ecde6b6e1a5eed1e17c844be5ad83430c8ba21d21c24961a4ab2d9dd79c6c1b33e7950e357976bd14e5b7040aed1d77606257ae29ad5d254412c19a
7
- data.tar.gz: c5d0981a4a35f9189fe5aa0e722a326ca1ed83df442d118556898daf63290463d37b385b5fdc5d39d5924066429bcb2e53f04eaa76da0c8472d9316bb486b8ba
6
+ metadata.gz: 3eb642147b61276500c618f26fc91b86463f5fbec7f9d03a7dba6ac504c2dc7419aff6943dd539be414b68da1cc16ae60344248e758cf2960ca08f3029e2bba9
7
+ data.tar.gz: cec9bbf99b2ba114ddf172717ca4282a168cb75462588006a7e6d8b20b211bef3cf0868d5e7ce137748db688da700ed4fecf0bea89f28de2b8fa209ec9751cd9
data/assets/style.css CHANGED
@@ -4,10 +4,9 @@
4
4
  width: 100%;
5
5
  border-collapse: collapse;
6
6
  margin-top: 20px;
7
-
8
7
  height: 100%;
9
- overflow:auto;
10
- display: block; /* Ensure the table behaves as a block element */
8
+ overflow: auto;
9
+ display: block;
11
10
  box-sizing: border-box;
12
11
  }
13
12
  th, td {
@@ -17,11 +16,12 @@
17
16
  th {
18
17
  background-color: #f2f2f2;
19
18
  }
20
- tr:nth-child(even) {
21
- background-color: #f9f9f9;
19
+ tr.main-row.even, tr.sub-row.even {
20
+ background-color: #f2f2f2;
22
21
  }
23
- .sub-row {
24
- background-color: #f9f9f9;
22
+
23
+ tr.main-row.odd, tr.sub-row.odd {
24
+ background-color: #ffffff;
25
25
  }
26
26
 
27
27
  .center-container {
@@ -39,4 +39,4 @@
39
39
  #queryTable {
40
40
  display: table;
41
41
  }
42
- }
42
+ }
@@ -3,9 +3,10 @@
3
3
  </style>
4
4
  <div id='query_counter_report_gem'>
5
5
  <h2>Query Count Report</h2>
6
- <p>Total query count on process: <%= total_query_count %></p>
7
- <p>The table will show only tables with more than <%= ::ActiveRecordQueryCount::Configuration.ignore_table_count %> queries</p>
8
- <p>Only the top <%= ::ActiveRecordQueryCount::Configuration.max_locations_per_table %> locations with the most occurrences will be shown.</p>
6
+ <p>Total number of queries in this process: <%= total_query_count %></p>
7
+ <p>Total time spent on queries in this process (ms): <%= total_duration_time %></p>
8
+ <p>Only tables with <%= ::ActiveRecordQueryCount::Configuration.ignore_table_count %> or more queries will be displayed.</p>
9
+ <p>The top <%= ::ActiveRecordQueryCount::Configuration.max_locations_per_table %> locations with the highest occurrences will be shown for each table.</p>
9
10
  <button id="toggleButton" onclick="toggleView()">Show Chart View</button>
10
11
  <button id="toggleColumnButton" onclick="toggleColumnContent()">Show SQL</button>
11
12
 
@@ -19,14 +20,15 @@
19
20
  <th id="columnHeader">File Path</th>
20
21
  <th>Method</th>
21
22
  <th>Location Count</th>
23
+ <th>Total Duration(ms)</th>
22
24
  </tr>
23
- <% filter_data(data).each do |table, info| %>
24
- <tr>
25
+ <% filter_data(data).each_with_index do |(table, info), index| %>
26
+ <tr class="main-row <%= index.even? ? 'even' : 'odd' %>">
25
27
  <td rowspan="<%= info[:location].size + 1 %>"><%= table %></td>
26
28
  <td rowspan="<%= info[:location].size + 1 %>"><%= info[:count] %></td>
27
29
  </tr>
28
30
  <% info[:location].each do |loc, detail| %>
29
- <tr class="sub-row">
31
+ <tr class="sub-row <%= index.even? ? 'even' : 'odd' %>">
30
32
  <% match = loc&.match(/^(?<file_path>.*):in.*`(?<method>.*)'$/) %>
31
33
  <% file_path = match ? match[:file_path] : loc %>
32
34
  <% method = match ? match[:method] : nil %>
@@ -36,6 +38,7 @@
36
38
  </td>
37
39
  <td class="method-column"><%= method %></td>
38
40
  <td><%= detail[:count] %></td>
41
+ <td><%= detail[:duration] %></td>
39
42
  </tr>
40
43
  <% end %>
41
44
  <% end %>
@@ -11,6 +11,11 @@ module ActiveRecordQueryCount
11
11
  INJECT_TEMPLATE_PATH = File.join(parent_dir, 'assets', 'template_for_inject.html.erb')
12
12
 
13
13
  def filter_data data
14
+ data.each_value do |info|
15
+ info[:location].each_value do |detail|
16
+ detail[:duration] = detail[:duration].truncate(2)
17
+ end
18
+ end
14
19
  data = data.select { |_, v| v[:count] >= Configuration.ignore_table_count }
15
20
  data = data.sort_by { |_, v| -v[:count] }.each do |_category, info|
16
21
  info[:location] = info[:location].sort_by do |_, detail|
@@ -21,6 +21,7 @@ module ActiveRecordQueryCount
21
21
  info[:location].each do |loc, details|
22
22
  puts " - File location: #{loc}"
23
23
  puts " Query count: #{details[:count].to_s.colorize(:blue)}"
24
+ puts " Total Duration(ms): #{details[:duration]}"
24
25
  end
25
26
  puts
26
27
  end
@@ -14,13 +14,21 @@ module ActiveRecordQueryCount
14
14
  end
15
15
 
16
16
  def chart_data
17
- @chart_data ||= generate_chart_data(data)
17
+ @chart_data ||= generate_chart_js_data(data)
18
18
  end
19
19
 
20
20
  def total_query_count
21
21
  @total_query_count ||= data.values.sum { |v| v[:count] }
22
22
  end
23
23
 
24
+ def total_duration_time
25
+ @total_duration_time ||= data.sum do |_, info|
26
+ info[:location].sum do |_, detail|
27
+ detail[:duration]
28
+ end
29
+ end.truncate(2)
30
+ end
31
+
24
32
  def inject_in_html
25
33
  ERB.new(inject_template_content).result(binding)
26
34
  end
@@ -36,13 +44,13 @@ module ActiveRecordQueryCount
36
44
 
37
45
  private
38
46
 
39
- def generate_chart_data(data)
47
+ def generate_chart_js_data(data)
40
48
  chart_data = { labels: [], data: [], locations: {} }
41
49
  data.each do |table, info|
42
50
  chart_data[:labels] << table
43
51
  chart_data[:data] << info[:count]
44
52
  chart_data[:locations][table] = info[:location].map do |loc, detail|
45
- { location: loc, count: detail[:count] }
53
+ { location: loc, count: detail[:count], duration: detail[:duration] }
46
54
  end
47
55
  end
48
56
  chart_data
@@ -25,7 +25,7 @@ module ActiveRecordQueryCount
25
25
  tables = data_1.keys | data_2.keys
26
26
  total_query_count_1 = data_1.values.sum { |v| v[:count] }
27
27
  total_query_count_2 = data_2.values.sum { |v| v[:count] }
28
- chart_data = generate_chart_data_compare(data_1, data_2)
28
+ chart_data = generate_chart_js_data_compare(data_1, data_2)
29
29
  # end
30
30
  html_dest = generate_html(binding)
31
31
  open_file(html_dest)
@@ -33,7 +33,7 @@ module ActiveRecordQueryCount
33
33
 
34
34
  private
35
35
 
36
- def generate_chart_data_compare(data_1, data_2)
36
+ def generate_chart_js_data_compare(data_1, data_2)
37
37
  labels = (data_1.keys | data_2.keys).sort
38
38
  chart_data = { labels: [], data_1: {}, data_2: {}, locations: {} }
39
39
  chart_data[:data_1][:name] = @script_1_name
@@ -19,13 +19,15 @@ module ActiveRecordQueryCount
19
19
  def subscribe
20
20
  return unless subscription.nil?
21
21
 
22
- @subscription = ActiveSupport::Notifications.subscribe('sql.active_record') do |_a, _b, _c, _d, payload|
22
+ @subscription = ActiveSupport::Notifications.subscribe('sql.active_record') do |_a, start, finish, _d, payload|
23
23
  caller_from_sql = caller
24
24
  sql = payload[:sql]
25
25
  match = sql.match(REGEX_TABLE_SQL)
26
26
  if match.present? && match[:table]
27
27
  actual_location = Rails.backtrace_cleaner.clean(caller_from_sql).first
28
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
29
31
  active_record_query_tracker[match[:table]][:location][actual_location][:count] += 1
30
32
  active_record_query_tracker[match[:table]][:location][actual_location][:sql] = sql
31
33
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveRecordQueryCount
4
- VERSION = '0.1.4'
4
+ VERSION = '0.1.5'
5
5
  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
4
+ version: 0.1.5
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-07-16 00:00:00.000000000 Z
11
+ date: 2024-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport