rails_performance 1.2.3 → 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 +5 -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 +3 -0
- 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 -42
- 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 -50
- 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 +33 -34
- 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,24 +67,24 @@ 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
86
|
mattr_reader :ignored_paths
|
87
|
-
def
|
87
|
+
def self.ignored_paths=(paths)
|
88
88
|
@@ignored_paths = Set.new(paths)
|
89
89
|
end
|
90
90
|
@@ignored_paths = []
|
@@ -95,7 +95,7 @@ module RailsPerformance
|
|
95
95
|
|
96
96
|
# config home button link
|
97
97
|
mattr_accessor :home_link
|
98
|
-
@@home_link =
|
98
|
+
@@home_link = "/"
|
99
99
|
|
100
100
|
# skip performance tracking for these rake tasks
|
101
101
|
mattr_accessor :skipable_rake_tasks
|
@@ -113,11 +113,11 @@ module RailsPerformance
|
|
113
113
|
mattr_accessor :include_custom_events
|
114
114
|
@@include_custom_events = true
|
115
115
|
|
116
|
-
def
|
116
|
+
def self.setup
|
117
117
|
yield(self)
|
118
118
|
end
|
119
119
|
|
120
|
-
def
|
120
|
+
def self.log(message)
|
121
121
|
return unless RailsPerformance.debug
|
122
122
|
|
123
123
|
if ::Rails.logger
|
@@ -127,10 +127,9 @@ module RailsPerformance
|
|
127
127
|
puts(message)
|
128
128
|
end
|
129
129
|
end
|
130
|
-
|
131
130
|
end
|
132
131
|
|
133
132
|
require "rails_performance/engine"
|
134
133
|
|
135
|
-
require_relative
|
134
|
+
require_relative "rails_performance/gems/custom_ext"
|
136
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
|