rails_performance 1.2.2 → 1.3.0
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/README.md +11 -13
- data/Rakefile +14 -14
- data/app/assets/images/download.svg +3 -0
- data/app/controllers/rails_performance/base_controller.rb +21 -21
- data/app/controllers/rails_performance/concerns/csv_exportable.rb +29 -0
- data/app/controllers/rails_performance/rails_performance_controller.rb +95 -49
- data/app/helpers/rails_performance/rails_performance_helper.rb +152 -156
- data/app/views/rails_performance/javascripts/app.js +2 -2
- data/app/views/rails_performance/rails_performance/_export.html.erb +3 -0
- data/app/views/rails_performance/rails_performance/crashes.html.erb +8 -1
- data/app/views/rails_performance/rails_performance/recent.html.erb +8 -6
- data/app/views/rails_performance/rails_performance/requests.html.erb +8 -1
- data/app/views/rails_performance/rails_performance/slow.html.erb +4 -1
- data/app/views/rails_performance/shared/_header.html.erb +0 -1
- data/app/views/rails_performance/stylesheets/style.css +6 -0
- data/config/routes.rb +16 -18
- data/lib/generators/rails_performance/install/install_generator.rb +1 -1
- data/lib/generators/rails_performance/install/templates/initializer.rb +56 -38
- data/lib/rails_performance/data_source.rb +120 -121
- data/lib/rails_performance/engine.rb +8 -8
- data/lib/rails_performance/extensions/trace.rb +32 -33
- data/lib/rails_performance/gems/custom_ext.rb +31 -34
- data/lib/rails_performance/gems/delayed_job_ext.rb +50 -54
- data/lib/rails_performance/gems/grape_ext.rb +33 -35
- data/lib/rails_performance/gems/rake_ext.rb +41 -44
- data/lib/rails_performance/gems/sidekiq_ext.rb +34 -37
- data/lib/rails_performance/instrument/metrics_collector.rb +50 -49
- data/lib/rails_performance/models/base_record.rb +33 -36
- data/lib/rails_performance/models/collection.rb +35 -36
- data/lib/rails_performance/models/custom_record.rb +47 -48
- data/lib/rails_performance/models/delayed_job_record.rb +61 -62
- data/lib/rails_performance/models/grape_record.rb +60 -61
- data/lib/rails_performance/models/rake_record.rb +48 -49
- data/lib/rails_performance/models/request_record.rb +123 -120
- data/lib/rails_performance/models/sidekiq_record.rb +65 -66
- data/lib/rails_performance/models/trace_record.rb +18 -19
- data/lib/rails_performance/rails/middleware.rb +75 -76
- data/lib/rails_performance/rails/query_builder.rb +18 -20
- data/lib/rails_performance/reports/base_report.rb +60 -60
- data/lib/rails_performance/reports/breakdown_report.rb +15 -18
- data/lib/rails_performance/reports/crash_report.rb +15 -17
- data/lib/rails_performance/reports/recent_requests_report.rb +24 -24
- data/lib/rails_performance/reports/requests_report.rb +27 -27
- data/lib/rails_performance/reports/response_time_report.rb +17 -17
- data/lib/rails_performance/reports/slow_requests_report.rb +4 -4
- data/lib/rails_performance/reports/throughput_report.rb +15 -17
- data/lib/rails_performance/reports/trace_report.rb +16 -18
- data/lib/rails_performance/thread/current_request.rb +33 -34
- data/lib/rails_performance/utils.rb +53 -54
- data/lib/rails_performance/version.rb +2 -2
- data/lib/rails_performance.rb +38 -33
- metadata +20 -3
@@ -1,34 +1,33 @@
|
|
1
|
-
module RailsPerformance
|
2
|
-
class CurrentRequest
|
3
|
-
attr_reader :request_id, :tracings, :ignore
|
4
|
-
attr_accessor :data
|
5
|
-
attr_accessor :record
|
6
|
-
|
7
|
-
def
|
8
|
-
Thread.current[:rp_current_request] ||= CurrentRequest.new(SecureRandom.hex(16))
|
9
|
-
end
|
10
|
-
|
11
|
-
def
|
12
|
-
CurrentRequest.init
|
13
|
-
end
|
14
|
-
|
15
|
-
def
|
16
|
-
RailsPerformance.log "----------------------------------------------------> CurrentRequest.cleanup !!!!!!!!!!!! -------------------------\n\n"
|
17
|
-
RailsPerformance.skip = false
|
18
|
-
Thread.current[:rp_current_request] = nil
|
19
|
-
end
|
20
|
-
|
21
|
-
def initialize(request_id)
|
22
|
-
@request_id = request_id
|
23
|
-
@tracings
|
24
|
-
@ignore
|
25
|
-
@data
|
26
|
-
@record
|
27
|
-
end
|
28
|
-
|
29
|
-
def trace(options = {})
|
30
|
-
@tracings << options.merge(time: Time.current.to_i)
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
end
|
1
|
+
module RailsPerformance
|
2
|
+
class CurrentRequest
|
3
|
+
attr_reader :request_id, :tracings, :ignore
|
4
|
+
attr_accessor :data
|
5
|
+
attr_accessor :record
|
6
|
+
|
7
|
+
def self.init
|
8
|
+
Thread.current[:rp_current_request] ||= CurrentRequest.new(SecureRandom.hex(16))
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.current
|
12
|
+
CurrentRequest.init
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.cleanup
|
16
|
+
RailsPerformance.log "----------------------------------------------------> CurrentRequest.cleanup !!!!!!!!!!!! -------------------------\n\n"
|
17
|
+
RailsPerformance.skip = false
|
18
|
+
Thread.current[:rp_current_request] = nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(request_id)
|
22
|
+
@request_id = request_id
|
23
|
+
@tracings = []
|
24
|
+
@ignore = Set.new
|
25
|
+
@data = nil
|
26
|
+
@record = nil
|
27
|
+
end
|
28
|
+
|
29
|
+
def trace(options = {})
|
30
|
+
@tracings << options.merge(time: Time.current.to_i)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,54 +1,53 @@
|
|
1
|
-
module RailsPerformance
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
#
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
keys
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
#
|
29
|
-
|
30
|
-
|
31
|
-
RailsPerformance.log " [SAVE]
|
32
|
-
RailsPerformance.
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
end
|
1
|
+
module RailsPerformance
|
2
|
+
class Utils
|
3
|
+
# date key in redis store
|
4
|
+
def self.cache_key(now = Date.today)
|
5
|
+
"date-#{now}"
|
6
|
+
end
|
7
|
+
|
8
|
+
# write to current slot
|
9
|
+
# time - date -minute
|
10
|
+
def self.field_key(now = Time.current)
|
11
|
+
now.strftime("%H:%M")
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.fetch_from_redis(query)
|
15
|
+
RailsPerformance.log "\n\n [REDIS QUERY] --> #{query}\n\n"
|
16
|
+
|
17
|
+
keys = RailsPerformance.redis.keys(query)
|
18
|
+
return [] if keys.blank?
|
19
|
+
values = RailsPerformance.redis.mget(keys)
|
20
|
+
|
21
|
+
RailsPerformance.log "\n\n [FOUND] --> #{values.size}\n\n"
|
22
|
+
|
23
|
+
[keys, values]
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.save_to_redis(key, value, expire = RailsPerformance.duration.to_i)
|
27
|
+
# TODO think here if add return
|
28
|
+
# return if value.empty?
|
29
|
+
|
30
|
+
RailsPerformance.log " [SAVE] key ---> #{key}\n"
|
31
|
+
RailsPerformance.log " [SAVE] value ---> #{value.to_json}\n\n"
|
32
|
+
RailsPerformance.redis.set(key, value.to_json, ex: expire.to_i)
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.days
|
36
|
+
(RailsPerformance.duration / 1.day) + 1
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.median(array)
|
40
|
+
sorted = array.sort
|
41
|
+
size = sorted.size
|
42
|
+
center = size / 2
|
43
|
+
|
44
|
+
if size == 0
|
45
|
+
nil
|
46
|
+
elsif size.even?
|
47
|
+
(sorted[center - 1] + sorted[center]) / 2.0
|
48
|
+
else
|
49
|
+
sorted[center]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/rails_performance.rb
CHANGED
@@ -1,31 +1,31 @@
|
|
1
1
|
require "redis"
|
2
2
|
require "redis-namespace"
|
3
3
|
require "browser"
|
4
|
-
require
|
5
|
-
require_relative "
|
6
|
-
require_relative "rails_performance/rails/query_builder
|
7
|
-
require_relative "rails_performance/rails/middleware
|
8
|
-
require_relative "rails_performance/models/base_record
|
9
|
-
require_relative "rails_performance/models/request_record
|
10
|
-
require_relative "rails_performance/models/sidekiq_record
|
11
|
-
require_relative "rails_performance/models/delayed_job_record
|
12
|
-
require_relative "rails_performance/models/grape_record
|
13
|
-
require_relative "rails_performance/models/trace_record
|
14
|
-
require_relative "rails_performance/models/rake_record
|
15
|
-
require_relative "rails_performance/models/custom_record
|
16
|
-
require_relative "rails_performance/data_source
|
17
|
-
require_relative "rails_performance/utils
|
18
|
-
require_relative "rails_performance/reports/base_report
|
19
|
-
require_relative "rails_performance/reports/requests_report
|
20
|
-
require_relative "rails_performance/reports/crash_report
|
21
|
-
require_relative "rails_performance/reports/response_time_report
|
22
|
-
require_relative "rails_performance/reports/throughput_report
|
23
|
-
require_relative "rails_performance/reports/recent_requests_report
|
24
|
-
require_relative "rails_performance/reports/slow_requests_report
|
25
|
-
require_relative "rails_performance/reports/breakdown_report
|
26
|
-
require_relative "rails_performance/reports/trace_report
|
27
|
-
require_relative "rails_performance/extensions/trace
|
28
|
-
require_relative "rails_performance/thread/current_request
|
4
|
+
require "active_support/core_ext/integer"
|
5
|
+
require_relative "rails_performance/version"
|
6
|
+
require_relative "rails_performance/rails/query_builder"
|
7
|
+
require_relative "rails_performance/rails/middleware"
|
8
|
+
require_relative "rails_performance/models/base_record"
|
9
|
+
require_relative "rails_performance/models/request_record"
|
10
|
+
require_relative "rails_performance/models/sidekiq_record"
|
11
|
+
require_relative "rails_performance/models/delayed_job_record"
|
12
|
+
require_relative "rails_performance/models/grape_record"
|
13
|
+
require_relative "rails_performance/models/trace_record"
|
14
|
+
require_relative "rails_performance/models/rake_record"
|
15
|
+
require_relative "rails_performance/models/custom_record"
|
16
|
+
require_relative "rails_performance/data_source"
|
17
|
+
require_relative "rails_performance/utils"
|
18
|
+
require_relative "rails_performance/reports/base_report"
|
19
|
+
require_relative "rails_performance/reports/requests_report"
|
20
|
+
require_relative "rails_performance/reports/crash_report"
|
21
|
+
require_relative "rails_performance/reports/response_time_report"
|
22
|
+
require_relative "rails_performance/reports/throughput_report"
|
23
|
+
require_relative "rails_performance/reports/recent_requests_report"
|
24
|
+
require_relative "rails_performance/reports/slow_requests_report"
|
25
|
+
require_relative "rails_performance/reports/breakdown_report"
|
26
|
+
require_relative "rails_performance/reports/trace_report"
|
27
|
+
require_relative "rails_performance/extensions/trace"
|
28
|
+
require_relative "rails_performance/thread/current_request"
|
29
29
|
|
30
30
|
module RailsPerformance
|
31
31
|
FORMAT = "%Y%m%dT%H%M"
|
@@ -67,29 +67,35 @@ module RailsPerformance
|
|
67
67
|
|
68
68
|
# Enable http basic authentication
|
69
69
|
mattr_accessor :http_basic_authentication_user_name
|
70
|
-
@@http_basic_authentication_user_name =
|
70
|
+
@@http_basic_authentication_user_name = "rails_performance"
|
71
71
|
|
72
72
|
# Enable http basic authentication
|
73
73
|
mattr_accessor :http_basic_authentication_password
|
74
|
-
@@http_basic_authentication_password =
|
74
|
+
@@http_basic_authentication_password = "password12"
|
75
75
|
|
76
76
|
# If you want to enable access by specific conditions
|
77
77
|
mattr_accessor :verify_access_proc
|
78
78
|
@@verify_access_proc = proc { |controller| true }
|
79
79
|
|
80
80
|
mattr_reader :ignored_endpoints
|
81
|
-
def
|
81
|
+
def self.ignored_endpoints=(endpoints)
|
82
82
|
@@ignored_endpoints = Set.new(endpoints)
|
83
83
|
end
|
84
84
|
@@ignored_endpoints = []
|
85
85
|
|
86
|
+
mattr_reader :ignored_paths
|
87
|
+
def self.ignored_paths=(paths)
|
88
|
+
@@ignored_paths = Set.new(paths)
|
89
|
+
end
|
90
|
+
@@ignored_paths = []
|
91
|
+
|
86
92
|
# skip requests if it's inside Rails Performance view
|
87
93
|
mattr_accessor :skip
|
88
94
|
@@skip = false
|
89
95
|
|
90
96
|
# config home button link
|
91
97
|
mattr_accessor :home_link
|
92
|
-
@@home_link =
|
98
|
+
@@home_link = "/"
|
93
99
|
|
94
100
|
# skip performance tracking for these rake tasks
|
95
101
|
mattr_accessor :skipable_rake_tasks
|
@@ -107,11 +113,11 @@ module RailsPerformance
|
|
107
113
|
mattr_accessor :include_custom_events
|
108
114
|
@@include_custom_events = true
|
109
115
|
|
110
|
-
def
|
116
|
+
def self.setup
|
111
117
|
yield(self)
|
112
118
|
end
|
113
119
|
|
114
|
-
def
|
120
|
+
def self.log(message)
|
115
121
|
return unless RailsPerformance.debug
|
116
122
|
|
117
123
|
if ::Rails.logger
|
@@ -121,10 +127,9 @@ module RailsPerformance
|
|
121
127
|
puts(message)
|
122
128
|
end
|
123
129
|
end
|
124
|
-
|
125
130
|
end
|
126
131
|
|
127
132
|
require "rails_performance/engine"
|
128
133
|
|
129
|
-
require_relative
|
134
|
+
require_relative "rails_performance/gems/custom_ext"
|
130
135
|
RailsPerformance.send :extend, RailsPerformance::Gems::CustomExtension
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_performance
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Kasyanchuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -248,6 +248,20 @@ dependencies:
|
|
248
248
|
- - ">="
|
249
249
|
- !ruby/object:Gem::Version
|
250
250
|
version: '0'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: standardrb
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - ">="
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: '0'
|
258
|
+
type: :development
|
259
|
+
prerelease: false
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - ">="
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0'
|
251
265
|
description: 3rd party dependency-free solution how to monitor performance of your
|
252
266
|
Rails applications.
|
253
267
|
email:
|
@@ -263,6 +277,7 @@ files:
|
|
263
277
|
- app/assets/images/activity.svg
|
264
278
|
- app/assets/images/bot.svg
|
265
279
|
- app/assets/images/close.svg
|
280
|
+
- app/assets/images/download.svg
|
266
281
|
- app/assets/images/export.svg
|
267
282
|
- app/assets/images/git.svg
|
268
283
|
- app/assets/images/github.svg
|
@@ -272,6 +287,7 @@ files:
|
|
272
287
|
- app/assets/images/stat.svg
|
273
288
|
- app/assets/images/user.svg
|
274
289
|
- app/controllers/rails_performance/base_controller.rb
|
290
|
+
- app/controllers/rails_performance/concerns/csv_exportable.rb
|
275
291
|
- app/controllers/rails_performance/rails_performance_controller.rb
|
276
292
|
- app/helpers/rails_performance/rails_performance_helper.rb
|
277
293
|
- app/views/rails_performance/_panel.html.erb
|
@@ -284,6 +300,7 @@ files:
|
|
284
300
|
- app/views/rails_performance/javascripts/stupidtable.min.js
|
285
301
|
- app/views/rails_performance/javascripts/table.js
|
286
302
|
- app/views/rails_performance/layouts/rails_performance.html.erb
|
303
|
+
- app/views/rails_performance/rails_performance/_export.html.erb
|
287
304
|
- app/views/rails_performance/rails_performance/_recent_row.html.erb
|
288
305
|
- app/views/rails_performance/rails_performance/_summary.html.erb
|
289
306
|
- app/views/rails_performance/rails_performance/_trace.html.erb
|
@@ -362,7 +379,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
362
379
|
- !ruby/object:Gem::Version
|
363
380
|
version: '0'
|
364
381
|
requirements: []
|
365
|
-
rubygems_version: 3.5.
|
382
|
+
rubygems_version: 3.5.16
|
366
383
|
signing_key:
|
367
384
|
specification_version: 4
|
368
385
|
summary: Simple Rails Performance tracker. Alternative to the NewRelic, Datadog or
|