rails_performance 1.0.2 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d7ef7cc9ce348212f4857dd78032c84766dec51b7fa78fd0ab3206f08bb0b8c
4
- data.tar.gz: 380ae54a89db6e34827459e768333a39cfe5de6e3cffb8104b70ef8af8fc11cf
3
+ metadata.gz: da39e641dcac93526efb39f08e39cff972b5c09c04956b48bf1a30a6988fc24f
4
+ data.tar.gz: b7b0615aab822ec3742cc43ee74f45b63f1141cb79c246e4bc58c1d1b30b01f0
5
5
  SHA512:
6
- metadata.gz: 3265a68a5f3c9a29d6ff0db5e65094f036b9f58fb082a03d177ac4d105bdd532824fb7e757919f512edf103dfc75156f920c70b65ef134005bc3f0447e2c46a6
7
- data.tar.gz: 544fec0f5be1aa315e8185dd3abac2e2055f069c6290a0b68ed95e09b387d59bd3f82a5965c6175bc9e0c611e80890ae0d88e4acedffeae09324d34a6262935e
6
+ metadata.gz: 9ed2ae6cbd21422811df03088d04c036129ccf1bd527cf18964d6c1ff7c3781f7d5ab251041900a264ee89d7f0598b154f8426921f4cd3a5628a18b477580e6c
7
+ data.tar.gz: 55c864e62678514bf2b9c03cd648dfb8faa454d42061e8f454572c2d0083f367105540e0533c5b9efcd587e08dadabedc583fce842269aaa6b3659f26eb72d56
data/README.md CHANGED
@@ -6,12 +6,13 @@
6
6
 
7
7
  A self-hosted tool to monitor the performance of your Ruby on Rails application.
8
8
 
9
- This is **simple and free alternative** to the New Relic APM, Datadog or other similar services.
9
+ This is a **simple and free alternative** to the New Relic APM, Datadog or other similar services.
10
10
 
11
11
  ![Demo](docs/rails_performance.gif)
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
@@ -71,6 +72,8 @@ RailsPerformance.setup do |config|
71
72
 
72
73
  # config home button link
73
74
  config.home_link = '/'
75
+
76
+ config.skipable_rake_tasks = ['webpacker:compile']
74
77
  end if defined?(RailsPerformance)
75
78
  ```
76
79
 
@@ -208,10 +211,11 @@ If "schema" how records are stored i Redis is changed, and this is a breacking c
208
211
  - https://github.com/PedroAugustoRamalhoDuarte
209
212
  - https://github.com/haffla
210
213
  - https://github.com/D1ceWard
214
+ - https://github.com/carl-printreleaf
211
215
 
212
216
  ## License
213
217
 
214
218
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
215
219
 
216
220
  [<img src="https://github.com/igorkasyanchuk/rails_time_travel/blob/main/docs/more_gems.png?raw=true"
217
- />](https://www.railsjazz.com/)
221
+ />](https://www.railsjazz.com/?utm_source=github&utm_medium=bottom&utm_campaign=rails_performance)
@@ -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(`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,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
- <h2 class="subtitle">Recent Requests (last <%= RailsPerformance::Reports::RecentRequestsReport::TIME_WINDOW / 60 %> minutes)<h2>
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
- <tr>
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
+
@@ -0,0 +1,3 @@
1
+ <% @data.each do |e| %>
2
+ <%= render 'recent_row', e: e %>
3
+ <% end %>
@@ -81,6 +81,9 @@
81
81
  border-bottom: 1px solid red;
82
82
  }
83
83
 
84
+ .card-content {
85
+ overflow-x: scroll;
86
+ }
84
87
 
85
88
  table th[data-sort] {
86
89
  cursor: pointer;
@@ -88,4 +91,8 @@ table th[data-sort] {
88
91
 
89
92
  .very-small-text {
90
93
  font-size: 8px;
91
- }
94
+ }
95
+
96
+ #autoupdate_label {
97
+ cursor: pointer;
98
+ }
@@ -13,13 +13,15 @@ module RailsPerformance
13
13
  status = 'error'
14
14
  raise(ex)
15
15
  ensure
16
- RailsPerformance::Models::RakeRecord.new(
17
- task: RailsPerformance::Gems::RakeExt.find_task_name(*args),
18
- datetime: now.strftime(RailsPerformance::FORMAT),
19
- datetimei: now.to_i,
20
- duration: (Time.now - now) * 1000,
21
- status: status,
22
- ).save
16
+ if !RailsPerformance.skipable_rake_tasks.include?(self.name)
17
+ RailsPerformance::Models::RakeRecord.new(
18
+ task: RailsPerformance::Gems::RakeExt.find_task_name(*args),
19
+ datetime: now.strftime(RailsPerformance::FORMAT),
20
+ datetimei: now.to_i,
21
+ duration: (Time.now - now) * 1000,
22
+ status: status,
23
+ ).save
24
+ end
23
25
  end
24
26
  end
25
27
 
@@ -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] >= time_agoi}
14
+ .select{|e| e if e[sort] > time_agoi}
15
15
  .sort{|a, b| b[sort] <=> a[sort]}
16
16
  end
17
17
  end
@@ -1,4 +1,4 @@
1
1
  module RailsPerformance
2
- VERSION = '1.0.2'
2
+ VERSION = '1.0.4'
3
3
  SCHEMA = '1.0.1'
4
- end
4
+ end
@@ -73,6 +73,10 @@ module RailsPerformance
73
73
  mattr_accessor :home_link
74
74
  @@home_link = '/'
75
75
 
76
+ # skip performance tracking for these rake tasks
77
+ mattr_accessor :skipable_rake_tasks
78
+ @@skipable_rake_tasks = []
79
+
76
80
  def RailsPerformance.setup
77
81
  yield(self)
78
82
  end
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.2
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Kasyanchuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-02 00:00:00.000000000 Z
11
+ date: 2022-10-23 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:
@@ -198,6 +226,7 @@ files:
198
226
  - app/views/rails_performance/javascripts/stupidtable.min.js
199
227
  - app/views/rails_performance/javascripts/table.js
200
228
  - app/views/rails_performance/layouts/rails_performance.html.erb
229
+ - app/views/rails_performance/rails_performance/_recent_row.html.erb
201
230
  - app/views/rails_performance/rails_performance/_summary.html.erb
202
231
  - app/views/rails_performance/rails_performance/_trace.html.erb
203
232
  - app/views/rails_performance/rails_performance/crashes.html.erb
@@ -207,6 +236,7 @@ files:
207
236
  - app/views/rails_performance/rails_performance/index.html.erb
208
237
  - app/views/rails_performance/rails_performance/rake.html.erb
209
238
  - app/views/rails_performance/rails_performance/recent.html.erb
239
+ - app/views/rails_performance/rails_performance/recent.js.erb
210
240
  - app/views/rails_performance/rails_performance/requests.html.erb
211
241
  - app/views/rails_performance/rails_performance/sidekiq.html.erb
212
242
  - app/views/rails_performance/rails_performance/summary.js.erb