rails_performance 1.0.4 → 1.0.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 +4 -4
- data/README.md +10 -0
- data/app/views/rails_performance/rails_performance/_trace.html.erb +1 -1
- data/app/views/rails_performance/shared/_header.html.erb +1 -1
- data/config/routes.rb +3 -1
- data/lib/generators/rails_performance/install/templates/initializer.rb +9 -0
- data/lib/rails_performance/models/request_record.rb +25 -16
- data/lib/rails_performance/rails/middleware.rb +8 -1
- data/lib/rails_performance/version.rb +1 -1
- data/lib/rails_performance.rb +5 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 437c85fdb48db55caa5da3b41a7b0344d05e27094637cca6f3e8f28f8a15d284
|
4
|
+
data.tar.gz: c4bf8df35605e2cef8de589be79cde872d1a5d5210883140855eb0cf877562d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e54cd14676bde4b86de76a1cc73b482f51dfa9cd7529a658b70bec638e7f0d7eae1af22d60d00e959fbfbd4f3912cce2f6a5c545e8358c949bd0ba0c844e633e
|
7
|
+
data.tar.gz: 7c459ccf377434021fc0d2a4348e95e49ea9ef4e741cc7d768e8f9185121bf7fe36c0cd0b6475aa03fd208cb518f764467880542eb38d994baa8484810e5074f
|
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
[](https://github.com/igorkasyanchuk/rails_performance/actions/workflows/ruby.yml)
|
4
4
|
[](https://www.railsjazz.com)
|
5
5
|
[](https://www.patreon.com/igorkasyanchuk)
|
6
|
+
[](https://opensource-heroes.com/r/igorkasyanchuk/rails_performance)
|
6
7
|
|
7
8
|
A self-hosted tool to monitor the performance of your Ruby on Rails application.
|
8
9
|
|
@@ -70,6 +71,15 @@ RailsPerformance.setup do |config|
|
|
70
71
|
# for example when you have `current_user`
|
71
72
|
# config.verify_access_proc = proc { |controller| controller.current_user && controller.current_user.admin? }
|
72
73
|
|
74
|
+
# store custom data for the request
|
75
|
+
# config.custom_data_proc = proc do |env|
|
76
|
+
# request = Rack::Request.new(env)
|
77
|
+
# {
|
78
|
+
# email: request.env['warden'].user&.email, # if you are using Devise for example
|
79
|
+
# user_agent: request.env['HTTP_USER_AGENT']
|
80
|
+
# }
|
81
|
+
# end
|
82
|
+
|
73
83
|
# config home button link
|
74
84
|
config.home_link = '/'
|
75
85
|
|
@@ -35,7 +35,7 @@
|
|
35
35
|
<div class="navbar-item">
|
36
36
|
<div class="buttons">
|
37
37
|
<%#= link_to 'Export to CSV', '#', target: '_blank', class: "button is-primary" %>
|
38
|
-
<%= link_to RailsPerformance.home_link,
|
38
|
+
<%= link_to RailsPerformance.home_link, class: "button is-light home_icon" do %>
|
39
39
|
<%= icon('home') %>
|
40
40
|
<% end %>
|
41
41
|
</div>
|
data/config/routes.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
RailsPerformance::Engine.routes.draw do
|
2
|
+
devise_for :users
|
3
|
+
|
2
4
|
get '/' => 'rails_performance#index', as: :rails_performance
|
3
5
|
|
4
6
|
get '/requests' => 'rails_performance#requests', as: :rails_performance_requests
|
@@ -22,4 +24,4 @@ Rails.application.routes.draw do
|
|
22
24
|
# already added
|
23
25
|
# this code exist here because engine not includes routing automatically
|
24
26
|
end
|
25
|
-
end
|
27
|
+
end
|
@@ -21,6 +21,15 @@ RailsPerformance.setup do |config|
|
|
21
21
|
# You can ignore endpoints with Rails standard notation controller#action
|
22
22
|
# config.ignored_endpoints = ['HomeController#contact']
|
23
23
|
|
24
|
+
# store custom data for the request
|
25
|
+
# config.custom_data_proc = proc do |env|
|
26
|
+
# request = Rack::Request.new(env)
|
27
|
+
# {
|
28
|
+
# email: request.env['warden'].user&.email, # if you are using Devise for example
|
29
|
+
# user_agent: request.env['HTTP_USER_AGENT']
|
30
|
+
# }
|
31
|
+
# end
|
32
|
+
|
24
33
|
# config home button link
|
25
34
|
config.home_link = '/'
|
26
35
|
end if defined?(RailsPerformance)
|
@@ -2,7 +2,7 @@ module RailsPerformance
|
|
2
2
|
module Models
|
3
3
|
class RequestRecord < BaseRecord
|
4
4
|
attr_accessor :controller, :action, :format, :status, :datetime, :datetimei, :method, :path, :request_id, :json
|
5
|
-
attr_accessor :view_runtime, :db_runtime, :duration, :http_referer
|
5
|
+
attr_accessor :view_runtime, :db_runtime, :duration, :http_referer, :custom_data
|
6
6
|
attr_accessor :exception, :exception_object
|
7
7
|
|
8
8
|
def RequestRecord.find_by(request_id:)
|
@@ -25,7 +25,7 @@ module RailsPerformance
|
|
25
25
|
# path|/|
|
26
26
|
# request_id|454545454545454545|
|
27
27
|
# END|1.0.0
|
28
|
-
# = {"view_runtime":null,"db_runtime":0,"duration":27.329741000000002,"http_referer":null,"exception":"ZeroDivisionError divided by 0","backtrace":["/root/projects/rails_performance/test/dummy/app/controllers/account/site_controller.rb:17:in `/'","/root/projects/rails_performance/test/dummy/app/controllers/account/site_controller.rb:17:in `crash'","/usr/local/rvm/gems/ruby-2.6.3/gems/actionpack-6.1.3.1/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'"]}
|
28
|
+
# = {"view_runtime":null,"db_runtime":0,"duration":27.329741000000002,"http_referer":null,"custom_data":null,"exception":"ZeroDivisionError divided by 0","backtrace":["/root/projects/rails_performance/test/dummy/app/controllers/account/site_controller.rb:17:in `/'","/root/projects/rails_performance/test/dummy/app/controllers/account/site_controller.rb:17:in `crash'","/usr/local/rvm/gems/ruby-2.6.3/gems/actionpack-6.1.3.1/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'"]}
|
29
29
|
# value = JSON
|
30
30
|
def RequestRecord.from_db(key, value)
|
31
31
|
items = key.split("|")
|
@@ -44,26 +44,27 @@ module RailsPerformance
|
|
44
44
|
)
|
45
45
|
end
|
46
46
|
|
47
|
-
def initialize(controller:, action:, format:, status:, datetime:, datetimei:, method:, path:, request_id:, view_runtime: nil, db_runtime: nil, duration: nil, http_referer: nil, exception: nil, exception_object: nil, json: '{}')
|
48
|
-
@controller
|
49
|
-
@action
|
50
|
-
@format
|
51
|
-
@status
|
52
|
-
@datetime
|
53
|
-
@datetimei
|
54
|
-
@method
|
55
|
-
@path
|
56
|
-
@request_id
|
47
|
+
def initialize(controller:, action:, format:, status:, datetime:, datetimei:, method:, path:, request_id:, view_runtime: nil, db_runtime: nil, duration: nil, http_referer: nil, custom_data: nil, exception: nil, exception_object: nil, json: '{}')
|
48
|
+
@controller = controller
|
49
|
+
@action = action
|
50
|
+
@format = format
|
51
|
+
@status = status
|
52
|
+
@datetime = datetime
|
53
|
+
@datetimei = datetimei.to_i
|
54
|
+
@method = method
|
55
|
+
@path = path
|
56
|
+
@request_id = request_id
|
57
57
|
|
58
58
|
@view_runtime = view_runtime
|
59
59
|
@db_runtime = db_runtime
|
60
60
|
@duration = duration
|
61
61
|
@http_referer = http_referer
|
62
|
+
@custom_data = custom_data
|
62
63
|
|
63
64
|
@exception = Array.wrap(exception).compact.join(" ")
|
64
65
|
@exception_object = exception_object
|
65
66
|
|
66
|
-
@json
|
67
|
+
@json = json
|
67
68
|
end
|
68
69
|
|
69
70
|
def controller_action
|
@@ -74,6 +75,7 @@ module RailsPerformance
|
|
74
75
|
"#{controller}##{action}|#{format}"
|
75
76
|
end
|
76
77
|
|
78
|
+
# show on UI in the right panel
|
77
79
|
def record_hash
|
78
80
|
{
|
79
81
|
controller: self.controller,
|
@@ -89,8 +91,14 @@ module RailsPerformance
|
|
89
91
|
db_runtime: self.value['db_runtime'],
|
90
92
|
view_runtime: self.value['view_runtime'],
|
91
93
|
exception: self.value['exception'],
|
92
|
-
backtrace: self.value['backtrace']
|
93
|
-
|
94
|
+
backtrace: self.value['backtrace'],
|
95
|
+
http_referer: self.value['http_referer']
|
96
|
+
}.tap do |h|
|
97
|
+
custom_data = JSON.parse(self.value['custom_data']) rescue nil
|
98
|
+
if custom_data.is_a?(Hash)
|
99
|
+
h.merge!(custom_data)
|
100
|
+
end
|
101
|
+
end
|
94
102
|
end
|
95
103
|
|
96
104
|
def save
|
@@ -100,6 +108,7 @@ module RailsPerformance
|
|
100
108
|
db_runtime: db_runtime,
|
101
109
|
duration: duration,
|
102
110
|
http_referer: http_referer,
|
111
|
+
custom_data: custom_data.to_json
|
103
112
|
}
|
104
113
|
value[:exception] = exception if exception.present?
|
105
114
|
value[:backtrace] = exception_object.backtrace.take(3) if exception_object
|
@@ -108,4 +117,4 @@ module RailsPerformance
|
|
108
117
|
|
109
118
|
end
|
110
119
|
end
|
111
|
-
end
|
120
|
+
end
|
@@ -53,6 +53,13 @@ module RailsPerformance
|
|
53
53
|
# capture referer from where this page was opened
|
54
54
|
record.http_referer = env["HTTP_REFERER"] if record.status == 404
|
55
55
|
|
56
|
+
# we can add custom data, for example Http User-Agent
|
57
|
+
# or even devise current_user
|
58
|
+
if RailsPerformance.custom_data_proc
|
59
|
+
# just to be sure it won't break format how we store in redis
|
60
|
+
record.custom_data = RailsPerformance.custom_data_proc.call(env)
|
61
|
+
end
|
62
|
+
|
56
63
|
# store for section "recent requests"
|
57
64
|
# store request information (regular rails request)
|
58
65
|
record.save
|
@@ -66,4 +73,4 @@ module RailsPerformance
|
|
66
73
|
|
67
74
|
end
|
68
75
|
end
|
69
|
-
end
|
76
|
+
end
|
data/lib/rails_performance.rb
CHANGED
@@ -77,12 +77,16 @@ module RailsPerformance
|
|
77
77
|
mattr_accessor :skipable_rake_tasks
|
78
78
|
@@skipable_rake_tasks = []
|
79
79
|
|
80
|
+
# add custom payload to the request
|
81
|
+
mattr_accessor :custom_data_proc
|
82
|
+
@@custom_data_proc = []
|
83
|
+
|
80
84
|
def RailsPerformance.setup
|
81
85
|
yield(self)
|
82
86
|
end
|
83
87
|
|
84
88
|
def RailsPerformance.log(message)
|
85
|
-
return
|
89
|
+
return unless RailsPerformance.debug
|
86
90
|
|
87
91
|
if ::Rails.logger
|
88
92
|
# puts(message)
|
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.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Kasyanchuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -192,6 +192,20 @@ dependencies:
|
|
192
192
|
- - ">="
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: sprockets-rails
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
195
209
|
description: 3rd party dependency-free solution how to monitor performance of your
|
196
210
|
Rails applications.
|
197
211
|
email:
|
@@ -301,7 +315,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
301
315
|
- !ruby/object:Gem::Version
|
302
316
|
version: '0'
|
303
317
|
requirements: []
|
304
|
-
rubygems_version: 3.
|
318
|
+
rubygems_version: 3.3.7
|
305
319
|
signing_key:
|
306
320
|
specification_version: 4
|
307
321
|
summary: Simple Rails Performance tracker. Alternative to the NewRelic, Datadog or
|