dial 0.2.9 → 0.3.1
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 +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +1 -1
- data/dial.gemspec +3 -3
- data/lib/dial/constants.rb +2 -0
- data/lib/dial/middleware/panel.rb +18 -10
- data/lib/dial/middleware.rb +4 -4
- data/lib/dial/prosopite.rb +19 -0
- data/lib/dial/prosopite_logger.rb +2 -0
- data/lib/dial/railtie.rb +1 -0
- data/lib/dial/version.rb +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c57fbfd8d0f023bcfd0606a5d61cfe84dd7b93d618dd844d50332b576dcce3d5
|
4
|
+
data.tar.gz: 27db795cf357bd7c878ea939c9c66374cc50f54e304466f91b9add37e0535a95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea4ba198fd052cdfed3a35d95a5424f6da32c94da85dec1cad9d78edd6b92e336d35afa76704349c5ef0475ac8a60f9ba90026b753109f4a0cea8caba994d3c4
|
7
|
+
data.tar.gz: 4d1578a97dd8439a4e6060698d24a0605f9747fd471d47844dd5f981f257790a00ecd4a5ed097377ef3af6d61062dd0b76d6023f5fd5dca0990a8f2642421c5a
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.3.1] - 2025-05-03
|
4
|
+
|
5
|
+
- Only show truncated summary + one full query in N+1 logs
|
6
|
+
- Fix parsing of multiline N+1 query logs
|
7
|
+
- Truncate summary N+1 queries to 100 chars
|
8
|
+
|
9
|
+
## [0.3.0] - 2025-05-02
|
10
|
+
|
11
|
+
- Require rails 7.1.0 or later
|
12
|
+
- Add missing logger require
|
13
|
+
- Add missing stringio require
|
14
|
+
|
3
15
|
## [0.2.9] - 2025-04-11
|
4
16
|
|
5
17
|
- No changes
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@ Utilizes [vernier](https://github.com/jhawthorn/vernier) for profiling and
|
|
10
10
|
|
11
11
|
> [!NOTE]
|
12
12
|
> Check out the resources in the vernier project for more information on how to
|
13
|
-
> interpret the viewer, as well as comparisons with other profilers, including
|
13
|
+
> interpret the viewer, as well as comparisons with other profilers, including stackprof.
|
14
14
|
|
15
15
|

|
16
16
|
|
data/dial.gemspec
CHANGED
@@ -19,9 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.files = Dir["{lib}/**/*", "**/*.{gemspec,md,txt}"]
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
|
-
spec.add_dependency "railties", ">= 7"
|
23
|
-
spec.add_dependency "activerecord", ">= 7"
|
24
|
-
spec.add_dependency "actionpack", ">= 7"
|
22
|
+
spec.add_dependency "railties", ">= 7.1"
|
23
|
+
spec.add_dependency "activerecord", ">= 7.1"
|
24
|
+
spec.add_dependency "actionpack", ">= 7.1"
|
25
25
|
spec.add_dependency "vernier"
|
26
26
|
spec.add_dependency "prosopite"
|
27
27
|
spec.add_dependency "pg_query"
|
data/lib/dial/constants.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require "rack"
|
4
4
|
require "action_dispatch"
|
5
|
+
require "stringio"
|
5
6
|
|
6
7
|
require_relative "version"
|
7
8
|
|
@@ -10,6 +11,7 @@ module Dial
|
|
10
11
|
|
11
12
|
HTTP_ACCEPT = "HTTP_ACCEPT"
|
12
13
|
CONTENT_TYPE = ::Rack::CONTENT_TYPE
|
14
|
+
CONTENT_TYPE_HTML = "text/html"
|
13
15
|
CONTENT_LENGTH = ::Rack::CONTENT_LENGTH
|
14
16
|
NONCE = ::ActionDispatch::ContentSecurityPolicy::Request::NONCE
|
15
17
|
REQUEST_TIMING = "dial_request_timing"
|
@@ -4,6 +4,8 @@ require "uri"
|
|
4
4
|
|
5
5
|
module Dial
|
6
6
|
class Panel
|
7
|
+
QUERY_CHARS_TRUNCATION_THRESHOLD = 100
|
8
|
+
|
7
9
|
class << self
|
8
10
|
def html env, headers, profile_out_filename, query_logs, ruby_vm_stat, gc_stat, gc_stat_heap, server_timing
|
9
11
|
<<~HTML
|
@@ -11,20 +13,20 @@ module Dial
|
|
11
13
|
|
12
14
|
<div id="dial">
|
13
15
|
<div id="dial-preview">
|
14
|
-
<span>
|
16
|
+
<span id="dial-preview-header">
|
15
17
|
#{formatted_rails_route_info env} |
|
16
18
|
#{formatted_request_timing env} |
|
17
19
|
#{formatted_profile_output env, profile_out_filename}
|
18
20
|
</span>
|
19
|
-
<span>#{formatted_rails_version}</span>
|
20
|
-
<span>#{formatted_rack_version}</span>
|
21
|
-
<span>#{formatted_ruby_version}</span>
|
21
|
+
<span id="dial-preview-rails-version">#{formatted_rails_version}</span>
|
22
|
+
<span id="dial-preview-rack-version">#{formatted_rack_version}</span>
|
23
|
+
<span id="dial-preview-ruby-version">#{formatted_ruby_version}</span>
|
22
24
|
</div>
|
23
25
|
|
24
26
|
<hr>
|
25
27
|
|
26
28
|
<div id="dial-details">
|
27
|
-
<details>
|
29
|
+
<details id="dial-details-n-plus-ones">
|
28
30
|
<summary>N+1s</summary>
|
29
31
|
<div class="section query-logs">
|
30
32
|
#{formatted_query_logs query_logs}
|
@@ -33,7 +35,7 @@ module Dial
|
|
33
35
|
|
34
36
|
<hr>
|
35
37
|
|
36
|
-
<details>
|
38
|
+
<details id="dial-details-server-timing">
|
37
39
|
<summary>Server timing</summary>
|
38
40
|
<div class="section">
|
39
41
|
#{formatted_server_timing server_timing}
|
@@ -42,7 +44,7 @@ module Dial
|
|
42
44
|
|
43
45
|
<hr>
|
44
46
|
|
45
|
-
<details>
|
47
|
+
<details id="dial-details-ruby-vm-stat">
|
46
48
|
<summary>RubyVM stat</summary>
|
47
49
|
<div class="section">
|
48
50
|
#{formatted_ruby_vm_stat ruby_vm_stat}
|
@@ -51,7 +53,7 @@ module Dial
|
|
51
53
|
|
52
54
|
<hr>
|
53
55
|
|
54
|
-
<details>
|
56
|
+
<details id="dial-details-gc-stat">
|
55
57
|
<summary>GC stat</summary>
|
56
58
|
<div class="section">
|
57
59
|
#{formatted_gc_stat gc_stat}
|
@@ -60,7 +62,7 @@ module Dial
|
|
60
62
|
|
61
63
|
<hr>
|
62
64
|
|
63
|
-
<details>
|
65
|
+
<details id="dial-details-gc-stat-heap">
|
64
66
|
<summary>GC stat heap</summary>
|
65
67
|
<div class="section">
|
66
68
|
#{formatted_gc_stat_heap gc_stat_heap}
|
@@ -223,7 +225,7 @@ module Dial
|
|
223
225
|
query_logs.map do |(queries, stack_lines)|
|
224
226
|
<<~HTML
|
225
227
|
<details>
|
226
|
-
<summary>#{queries.
|
228
|
+
<summary>#{truncated_query queries.first}</summary>
|
227
229
|
<div class="section query-logs">
|
228
230
|
#{queries.map { |query| "<span>#{query}</span>" }.join}
|
229
231
|
#{stack_lines.map { |stack_line| "<span>#{stack_line}</span>" }.join}
|
@@ -236,6 +238,12 @@ module Dial
|
|
236
238
|
end
|
237
239
|
end
|
238
240
|
|
241
|
+
def truncated_query query
|
242
|
+
return query if query.length <= QUERY_CHARS_TRUNCATION_THRESHOLD
|
243
|
+
|
244
|
+
query[0...QUERY_CHARS_TRUNCATION_THRESHOLD] + "..."
|
245
|
+
end
|
246
|
+
|
239
247
|
def formatted_ruby_vm_stat ruby_vm_stat
|
240
248
|
ruby_vm_stat.map { |key, value| "<span><b>#{key}:</b> #{value}</span>" }.join
|
241
249
|
end
|
data/lib/dial/middleware.rb
CHANGED
@@ -17,7 +17,7 @@ module Dial
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def call env
|
20
|
-
unless env[HTTP_ACCEPT]&.include?
|
20
|
+
unless env[HTTP_ACCEPT]&.include? CONTENT_TYPE_HTML
|
21
21
|
return @app.call env
|
22
22
|
end
|
23
23
|
|
@@ -38,7 +38,7 @@ module Dial
|
|
38
38
|
end
|
39
39
|
server_timing = server_timing headers
|
40
40
|
|
41
|
-
unless headers[CONTENT_TYPE]&.include?
|
41
|
+
unless headers[CONTENT_TYPE]&.include? CONTENT_TYPE_HTML
|
42
42
|
return [status, headers, rack_body]
|
43
43
|
end
|
44
44
|
|
@@ -104,13 +104,13 @@ module Dial
|
|
104
104
|
when /N\+1 queries detected/
|
105
105
|
[[[],[]], :queries, 0]
|
106
106
|
when /Call stack/
|
107
|
-
entry.first << "+ #{count -
|
107
|
+
entry.first << "+ #{count - 1} more queries" if count > 1
|
108
108
|
[entry, :call_stack, count]
|
109
109
|
else
|
110
110
|
case section
|
111
111
|
when :queries
|
112
112
|
count += 1
|
113
|
-
entry.first << line.strip if count
|
113
|
+
entry.first << line.strip if count == 1
|
114
114
|
[entry, :queries, count]
|
115
115
|
when :call_stack
|
116
116
|
if line.strip.empty?
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dial
|
4
|
+
module Prosopite
|
5
|
+
def send_notifications
|
6
|
+
tc[:prosopite_notifications] = tc[:prosopite_notifications].to_h do |queries, kaller|
|
7
|
+
[queries.map { |query| query.squish }, kaller]
|
8
|
+
end
|
9
|
+
|
10
|
+
super
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module ::Prosopite
|
16
|
+
class << self
|
17
|
+
prepend Dial::Prosopite
|
18
|
+
end
|
19
|
+
end
|
data/lib/dial/railtie.rb
CHANGED
data/lib/dial/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dial
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joshua Young
|
@@ -15,42 +15,42 @@ dependencies:
|
|
15
15
|
requirements:
|
16
16
|
- - ">="
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: '7'
|
18
|
+
version: '7.1'
|
19
19
|
type: :runtime
|
20
20
|
prerelease: false
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
23
|
- - ">="
|
24
24
|
- !ruby/object:Gem::Version
|
25
|
-
version: '7'
|
25
|
+
version: '7.1'
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: activerecord
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '7'
|
32
|
+
version: '7.1'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '7'
|
39
|
+
version: '7.1'
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: actionpack
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '7'
|
46
|
+
version: '7.1'
|
47
47
|
type: :runtime
|
48
48
|
prerelease: false
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
51
|
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '7'
|
53
|
+
version: '7.1'
|
54
54
|
- !ruby/object:Gem::Dependency
|
55
55
|
name: vernier
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,6 +113,7 @@ files:
|
|
113
113
|
- lib/dial/middleware/panel.rb
|
114
114
|
- lib/dial/middleware/rails_stat.rb
|
115
115
|
- lib/dial/middleware/ruby_stat.rb
|
116
|
+
- lib/dial/prosopite.rb
|
116
117
|
- lib/dial/prosopite_logger.rb
|
117
118
|
- lib/dial/railtie.rb
|
118
119
|
- lib/dial/util.rb
|