rails_performance 1.0.0 → 1.0.3
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 -0
- data/app/controllers/rails_performance/rails_performance_controller.rb +8 -1
- data/app/views/rails_performance/javascripts/_javascripts.html.erb +1 -0
- data/app/views/rails_performance/javascripts/app.js +27 -1
- data/app/views/rails_performance/javascripts/navbar.js +8 -0
- data/app/views/rails_performance/rails_performance/_recent_row.html.erb +25 -0
- data/app/views/rails_performance/rails_performance/recent.html.erb +14 -27
- data/app/views/rails_performance/rails_performance/recent.js.erb +3 -0
- data/app/views/rails_performance/shared/_header.html.erb +2 -2
- data/app/views/rails_performance/stylesheets/style.css +4 -0
- data/lib/generators/rails_performance/install/templates/initializer.rb +4 -1
- data/lib/rails_performance/engine.rb +4 -4
- data/lib/rails_performance/reports/recent_requests_report.rb +3 -3
- data/lib/rails_performance/version.rb +1 -1
- data/lib/rails_performance.rb +4 -0
- metadata +37 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b27b8bf73e30b04e7ae40afca4598b348457dcd09bbf30a2ca124e16caa2cf17
|
4
|
+
data.tar.gz: 36afe9bec764881de9cb6a29510903d7036ae80c8af072ea31018f8a85abbab9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f974e6a2ee2ed369a9e73bccd64ae62c150ec2e6dd9324a41f880eaefc7063d309cc597a3a78db9f10d51214cf3949d6a7e784cc5b77b74082dc583913ab6cfd
|
7
|
+
data.tar.gz: 495d009f627564c2474dfecbd8b50d5b80f4b327fb5e18868443147a7327e1ca2d0ff078b5b8973583ab4aff52989a75213c6aa59d10e99a13b6562f2fd6f09a
|
data/README.md
CHANGED
@@ -12,6 +12,7 @@ This is **simple and free alternative** to the New Relic APM, Datadog or other s
|
|
12
12
|
|
13
13
|
It allows you to track:
|
14
14
|
|
15
|
+
- real-time monitoring on the Recent tab
|
15
16
|
- throughput report (see amount of RPM (requests per minute))
|
16
17
|
- an average response time
|
17
18
|
- the slowest controllers & actions
|
@@ -68,6 +69,9 @@ RailsPerformance.setup do |config|
|
|
68
69
|
config.verify_access_proc = proc { |controller| true }
|
69
70
|
# for example when you have `current_user`
|
70
71
|
# config.verify_access_proc = proc { |controller| controller.current_user && controller.current_user.admin? }
|
72
|
+
|
73
|
+
# config home button link
|
74
|
+
config.home_link = '/'
|
71
75
|
end if defined?(RailsPerformance)
|
72
76
|
```
|
73
77
|
|
@@ -119,7 +123,13 @@ Rails.application.routes.draw do
|
|
119
123
|
end
|
120
124
|
```
|
121
125
|
|
126
|
+
### Custom events
|
122
127
|
|
128
|
+
```ruby
|
129
|
+
RailsPerformance.measure("some label", "some namespace") do
|
130
|
+
# your code
|
131
|
+
end
|
132
|
+
```
|
123
133
|
|
124
134
|
## How it works
|
125
135
|
|
@@ -198,6 +208,7 @@ If "schema" how records are stored i Redis is changed, and this is a breacking c
|
|
198
208
|
- https://github.com/jules2689
|
199
209
|
- https://github.com/PedroAugustoRamalhoDuarte
|
200
210
|
- https://github.com/haffla
|
211
|
+
- https://github.com/D1ceWard
|
201
212
|
|
202
213
|
## License
|
203
214
|
|
@@ -4,6 +4,8 @@ module RailsPerformance
|
|
4
4
|
class RailsPerformanceController < RailsPerformance::BaseController
|
5
5
|
include RailsPerformance::ApplicationHelper
|
6
6
|
|
7
|
+
protect_from_forgery except: :recent
|
8
|
+
|
7
9
|
if RailsPerformance.enabled
|
8
10
|
def index
|
9
11
|
@datasource = RailsPerformance::DataSource.new(**prepare_query, type: :requests)
|
@@ -51,7 +53,12 @@ module RailsPerformance
|
|
51
53
|
def recent
|
52
54
|
@datasource = RailsPerformance::DataSource.new(**prepare_query, type: :requests)
|
53
55
|
db = @datasource.db
|
54
|
-
@data = RailsPerformance::Reports::RecentRequestsReport.new(db).data
|
56
|
+
@data = RailsPerformance::Reports::RecentRequestsReport.new(db).data(params[:from_timei])
|
57
|
+
|
58
|
+
respond_to do |page|
|
59
|
+
page.html
|
60
|
+
page.js
|
61
|
+
end
|
55
62
|
end
|
56
63
|
|
57
64
|
def sidekiq
|
@@ -165,4 +165,30 @@ function showRTChart(div, data) {
|
|
165
165
|
}
|
166
166
|
}]
|
167
167
|
});
|
168
|
-
};
|
168
|
+
};
|
169
|
+
|
170
|
+
const recent = document.getElementById("recent")
|
171
|
+
const autoupdate = document.getElementById("autoupdate")
|
172
|
+
|
173
|
+
if(recent) {
|
174
|
+
const tbody = recent.querySelector("tbody")
|
175
|
+
|
176
|
+
setInterval(() => {
|
177
|
+
tr = tbody.children[0];
|
178
|
+
from_timei = tr.getAttribute("from_timei") || ''
|
179
|
+
|
180
|
+
if (!autoupdate.checked) {
|
181
|
+
return;
|
182
|
+
}
|
183
|
+
|
184
|
+
fetch(`/rails/performance/recent.js?from_timei=${from_timei}`, {
|
185
|
+
headers: {
|
186
|
+
"X-CSRF-Token": document.querySelector("[name='csrf-token']").content,
|
187
|
+
},
|
188
|
+
})
|
189
|
+
.then(res => res.text())
|
190
|
+
.then(html => {
|
191
|
+
tbody.innerHTML = html + tbody.innerHTML;
|
192
|
+
})
|
193
|
+
}, 3000);
|
194
|
+
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
$(document).ready(function() {
|
2
|
+
// Check for click events on the navbar burger icon
|
3
|
+
$(".navbar-burger").click(function() {
|
4
|
+
// Toggle the "is-active" class on both the "navbar-burger" and the "navbar-menu"
|
5
|
+
$(".navbar-burger").toggleClass("is-active");
|
6
|
+
$(".navbar-menu").toggleClass("is-active");
|
7
|
+
});
|
8
|
+
});
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<tr from_timei="<%= e[:datetimei] %>">
|
2
|
+
<td>
|
3
|
+
<% if e[:request_id].present? %>
|
4
|
+
<%= link_to rails_performance.rails_performance_trace_path(id: e[:request_id]), remote: true do %>
|
5
|
+
<span class="stats_icon_max"><%= icon 'activity' %></span>
|
6
|
+
<% end %>
|
7
|
+
<% end %>
|
8
|
+
</td>
|
9
|
+
<td><%= format_datetime e[:datetime] %></td>
|
10
|
+
<td><%= link_to e[:controller] + '#' + e[:action], rails_performance.rails_performance_summary_path({controller_eq: e[:controller], action_eq: e[:action]}), remote: true %></td>
|
11
|
+
<td><%= e[:method] %></td>
|
12
|
+
<td><%= e[:format] %></td>
|
13
|
+
<td><%= link_to_path(e) %></td>
|
14
|
+
<td><%= status_tag e[:status] %></td>
|
15
|
+
<td class="nowrap"><%= ms e[:duration] %></td>
|
16
|
+
<td class="nowrap"><%= ms e[:view_runtime] %></td>
|
17
|
+
<td class="nowrap"><%= ms e[:db_runtime] %></td>
|
18
|
+
<td>
|
19
|
+
<% if e[:request_id].present? %>
|
20
|
+
<%= link_to rails_performance.rails_performance_trace_path(id: e[:request_id]), remote: true do %>
|
21
|
+
<span class="stats_icon_max"><%= icon 'activity' %></span>
|
22
|
+
<% end %>
|
23
|
+
<% end %>
|
24
|
+
</td>
|
25
|
+
</tr>
|
@@ -2,9 +2,19 @@
|
|
2
2
|
|
3
3
|
<div class="card">
|
4
4
|
<div class="card-content">
|
5
|
-
<
|
5
|
+
<div class="columns">
|
6
|
+
<div class="column">
|
7
|
+
<h2 class="subtitle">Recent Requests (last <%= RailsPerformance::Reports::RecentRequestsReport::TIME_WINDOW / 60 %> minutes)<h2>
|
8
|
+
</div>
|
9
|
+
<div class="column right-text is-size-5 has-text-right">
|
10
|
+
<label id="autoupdate_label">
|
11
|
+
<input id="autoupdate" type="checkbox" checked/>
|
12
|
+
Auto-update
|
13
|
+
</label>
|
14
|
+
</div>
|
15
|
+
</div>
|
6
16
|
|
7
|
-
<table class="table is-fullwidth is-hoverable is-narrow">
|
17
|
+
<table id="recent" class="table is-fullwidth is-hoverable is-narrow">
|
8
18
|
<thead>
|
9
19
|
<tr>
|
10
20
|
<th data-sort="string"></th>
|
@@ -27,33 +37,10 @@
|
|
27
37
|
</tr>
|
28
38
|
<% end %>
|
29
39
|
<% @data.each do |e| %>
|
30
|
-
|
31
|
-
<td>
|
32
|
-
<% if e[:request_id].present? %>
|
33
|
-
<%= link_to rails_performance.rails_performance_trace_path(id: e[:request_id]), remote: true do %>
|
34
|
-
<span class="stats_icon_max"><%= icon 'activity' %></span>
|
35
|
-
<% end %>
|
36
|
-
<% end %>
|
37
|
-
</td>
|
38
|
-
<td><%= format_datetime e[:datetime] %></td>
|
39
|
-
<td><%= link_to e[:controller] + '#' + e[:action], rails_performance.rails_performance_summary_path({controller_eq: e[:controller], action_eq: e[:action]}), remote: true %></td>
|
40
|
-
<td><%= e[:method] %></td>
|
41
|
-
<td><%= e[:format] %></td>
|
42
|
-
<td><%= link_to_path(e) %></td>
|
43
|
-
<td><%= status_tag e[:status] %></td>
|
44
|
-
<td class="nowrap"><%= ms e[:duration] %></td>
|
45
|
-
<td class="nowrap"><%= ms e[:view_runtime] %></td>
|
46
|
-
<td class="nowrap"><%= ms e[:db_runtime] %></td>
|
47
|
-
<td>
|
48
|
-
<% if e[:request_id].present? %>
|
49
|
-
<%= link_to rails_performance.rails_performance_trace_path(id: e[:request_id]), remote: true do %>
|
50
|
-
<span class="stats_icon_max"><%= icon 'activity' %></span>
|
51
|
-
<% end %>
|
52
|
-
<% end %>
|
53
|
-
</td>
|
54
|
-
</tr>
|
40
|
+
<%= render 'recent_row', e: e %>
|
55
41
|
<% end %>
|
56
42
|
</tbody>
|
57
43
|
</table>
|
58
44
|
</div>
|
59
45
|
</div>
|
46
|
+
|
@@ -35,11 +35,11 @@
|
|
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
|
38
|
+
<%= link_to RailsPerformance.home_link, target: '_blank', class: "button is-light home_icon" do %>
|
39
39
|
<%= icon('home') %>
|
40
40
|
<% end %>
|
41
41
|
</div>
|
42
42
|
</div>
|
43
43
|
</div>
|
44
44
|
</div>
|
45
|
-
</nav>
|
45
|
+
</nav>
|
@@ -17,7 +17,10 @@ RailsPerformance.setup do |config|
|
|
17
17
|
config.verify_access_proc = proc { |controller| true }
|
18
18
|
# for example when you have `current_user`
|
19
19
|
# config.verify_access_proc = proc { |controller| controller.current_user && controller.current_user.admin? }
|
20
|
-
|
20
|
+
|
21
21
|
# You can ignore endpoints with Rails standard notation controller#action
|
22
22
|
# config.ignored_endpoints = ['HomeController#contact']
|
23
|
+
|
24
|
+
# config home button link
|
25
|
+
config.home_link = '/'
|
23
26
|
end if defined?(RailsPerformance)
|
@@ -56,11 +56,11 @@ module RailsPerformance
|
|
56
56
|
|
57
57
|
ActionView::LogSubscriber.send :prepend, RailsPerformance::Extensions::View
|
58
58
|
ActiveRecord::LogSubscriber.send :prepend, RailsPerformance::Extensions::Db
|
59
|
-
end
|
60
59
|
|
61
|
-
|
62
|
-
|
63
|
-
|
60
|
+
if defined?(::Rake::Task)
|
61
|
+
require_relative './gems/rake_ext.rb'
|
62
|
+
RailsPerformance::Gems::RakeExt.init
|
63
|
+
end
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
@@ -7,11 +7,11 @@ module RailsPerformance
|
|
7
7
|
@sort ||= :datetimei
|
8
8
|
end
|
9
9
|
|
10
|
-
def data
|
11
|
-
time_agoi = TIME_WINDOW.ago.to_i
|
10
|
+
def data(from_timei = nil)
|
11
|
+
time_agoi = [TIME_WINDOW.ago.to_i, from_timei.to_i].reject(&:blank?).max
|
12
12
|
db.data
|
13
13
|
.collect{|e| e.record_hash}
|
14
|
-
.select{|e| e if e[sort]
|
14
|
+
.select{|e| e if e[sort] > time_agoi}
|
15
15
|
.sort{|a, b| b[sort] <=> a[sort]}
|
16
16
|
end
|
17
17
|
end
|
data/lib/rails_performance.rb
CHANGED
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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Kasyanchuk
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -164,6 +164,34 @@ dependencies:
|
|
164
164
|
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: wrapped_print
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: puma
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
167
195
|
description: 3rd party dependency-free solution how to monitor performance of your
|
168
196
|
Rails applications.
|
169
197
|
email:
|
@@ -192,11 +220,13 @@ files:
|
|
192
220
|
- app/views/rails_performance/javascripts/_javascripts.html.erb
|
193
221
|
- app/views/rails_performance/javascripts/app.js
|
194
222
|
- app/views/rails_performance/javascripts/jquery-3.4.1.min.js
|
223
|
+
- app/views/rails_performance/javascripts/navbar.js
|
195
224
|
- app/views/rails_performance/javascripts/panel.js
|
196
225
|
- app/views/rails_performance/javascripts/rails.js
|
197
226
|
- app/views/rails_performance/javascripts/stupidtable.min.js
|
198
227
|
- app/views/rails_performance/javascripts/table.js
|
199
228
|
- app/views/rails_performance/layouts/rails_performance.html.erb
|
229
|
+
- app/views/rails_performance/rails_performance/_recent_row.html.erb
|
200
230
|
- app/views/rails_performance/rails_performance/_summary.html.erb
|
201
231
|
- app/views/rails_performance/rails_performance/_trace.html.erb
|
202
232
|
- app/views/rails_performance/rails_performance/crashes.html.erb
|
@@ -206,6 +236,7 @@ files:
|
|
206
236
|
- app/views/rails_performance/rails_performance/index.html.erb
|
207
237
|
- app/views/rails_performance/rails_performance/rake.html.erb
|
208
238
|
- app/views/rails_performance/rails_performance/recent.html.erb
|
239
|
+
- app/views/rails_performance/rails_performance/recent.js.erb
|
209
240
|
- app/views/rails_performance/rails_performance/requests.html.erb
|
210
241
|
- app/views/rails_performance/rails_performance/sidekiq.html.erb
|
211
242
|
- app/views/rails_performance/rails_performance/summary.js.erb
|
@@ -255,7 +286,7 @@ homepage: https://github.com/igorkasyanchuk/rails_performance
|
|
255
286
|
licenses:
|
256
287
|
- MIT
|
257
288
|
metadata: {}
|
258
|
-
post_install_message:
|
289
|
+
post_install_message:
|
259
290
|
rdoc_options: []
|
260
291
|
require_paths:
|
261
292
|
- lib
|
@@ -270,8 +301,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
270
301
|
- !ruby/object:Gem::Version
|
271
302
|
version: '0'
|
272
303
|
requirements: []
|
273
|
-
rubygems_version: 3.
|
274
|
-
signing_key:
|
304
|
+
rubygems_version: 3.2.3
|
305
|
+
signing_key:
|
275
306
|
specification_version: 4
|
276
307
|
summary: Simple Rails Performance tracker. Alternative to the NewRelic, Datadog or
|
277
308
|
other services.
|