active-record-query-count 0.1.4 → 0.1.5

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: 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