rails_performance 1.4.0 → 1.4.1.alpha1

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.
@@ -1,349 +1,125 @@
1
- Highcharts.setOptions({
2
- time: {
3
- timezone: window.APP_TIME_ZONE
4
- }
5
- });
6
-
7
- function showTIRChart(div, data, addon, name) {
8
- Highcharts.chart(div, {
1
+ function showChart(element_id, type, title, options) {
2
+ const chart = new ApexCharts(
3
+ document.getElementById(element_id),
4
+ {
5
+ ...options,
9
6
  chart: {
10
- type: 'area',
11
- zoomType: 'x',
7
+ type: type,
8
+ height: 300,
9
+ zoom: {
10
+ type: 'x',
11
+ },
12
12
  },
13
- title: {
14
- text: ''
13
+ colors: ['#ff5b5b'],
14
+ stroke: {
15
+ width: 1,
15
16
  },
16
- tooltip: {
17
- borderWidth: 0,
18
- backgroundColor: 'yellow',
19
- pointFormat: '{point.y}',
20
- //headerFormat: '',
21
- shadow: false,
22
- style: {
23
- fontSize: '16px',
24
- color: '#000',
25
- },
26
- formatter: function() {
27
- if (this.y == 0) {
28
- return false;
29
- }
30
- return this.y + addon;
31
- }
32
- },
33
- xAxis: {
34
- crosshair: true,
35
- type: 'datetime',
36
- labels: {
37
- style: {
38
- color: "#a6b0cf"
39
- }
40
- }
41
- },
42
- yAxis: {
43
- min: 0,
44
- title: {
45
- text: 'RPM',
46
- style: {
47
- color: "#f6f6f6"
48
- }
49
- },
50
- labels: {
51
- style: {
52
- color: "#a6b0cf"
53
- }
54
- }
17
+ dataLabels: {
18
+ enabled: false
55
19
  },
56
20
  legend: {
57
- enabled: false
58
- },
59
- exporting: {
60
- buttons: {
61
- contextButton: {
62
- theme: {
63
- fill: "#eee"
64
- }
21
+ show: false
22
+ },
23
+ xaxis: {
24
+ crosshairs: {
25
+ show: true
26
+ },
27
+ type: 'datetime',
28
+ labels: {
29
+ datetimeUTC: false,
30
+ style: {
31
+ colors: ["#a6b0cf"]
65
32
  }
66
33
  }
67
34
  },
68
- plotOptions: {
69
- area: {
70
- color: '#ff5b5b',
71
- }
72
- },
73
- series: [{
74
- type: 'area',
75
- name: name,
76
- data: data,
77
- fillOpacity: 0.3,
78
- lineWidth: 1,
79
- states: {
80
- hover: {
81
- lineWidth: 1
82
- }
83
- }
84
- }]
85
- });
86
- };
87
-
88
- function showRTChart(div, data) {
89
- Highcharts.chart(div, {
90
- chart: {
91
- type: 'area',
92
- zoomType: 'x',
93
- },
94
- title: {
95
- text: ''
96
- },
97
-
98
- tooltip: {
99
- borderWidth: 0,
100
- backgroundColor: 'yellow',
101
- pointFormat: '{point.y}',
102
- //headerFormat: '',
103
- shadow: false,
35
+ yaxis: {
36
+ min: 0,
37
+ title: {
38
+ text: title,
104
39
  style: {
105
- fontSize: '16px',
106
- color: '#000',
107
- },
108
- formatter: function() {
109
- if (this.y == 0) {
110
- return false;
111
- }
112
- return this.y + ' ms';
40
+ color: "#f6f6f6"
113
41
  }
114
- },
115
- xAxis: {
116
- crosshair: false,
117
- type: 'datetime',
118
- labels: {
119
- style: {
120
- color: "#a6b0cf"
121
- }
122
- }
123
- },
124
- yAxis: {
125
- min: 0,
126
- title: {
127
- text: 'Time',
128
- style: {
129
- color: "#f6f6f6"
130
- }
131
- },
132
- labels: {
133
- style: {
134
- color: "#a6b0cf"
135
- }
136
- }
137
- },
138
- legend: {
139
- enabled: false
140
- },
141
- exporting: {
142
- buttons: {
143
- contextButton: {
144
- theme: {
145
- fill: "#eee"
146
- }
42
+ },
43
+ labels: {
44
+ style: {
45
+ colors: ["#a6b0cf"]
147
46
  }
148
47
  }
149
- },
150
- plotOptions: {
151
- area: {
152
- color: '#ff5b5b',
153
- }
154
- },
155
- series: [{
156
- type: 'area',
157
- name: 'Response Time',
158
- data: data,
159
- fillOpacity: 0.3,
160
- lineWidth: 1,
161
- states: {
162
- hover: {
163
- lineWidth: 1
164
- }
165
- }
166
- }]
167
- });
168
- };
48
+ }
49
+ }
50
+ );
51
+ chart.render();
52
+ }
169
53
 
170
- function showPercentageChart(div, data, addon, name) {
171
- Highcharts.chart(div, {
172
- chart: {
173
- type: 'line',
174
- zoomType: 'x',
175
- },
54
+ function tooltipOptions(formatter) {
55
+ return {
56
+ style: {
57
+ fontSize: '16px'
58
+ },
59
+ marker: {
60
+ show: false,
61
+ },
62
+ x: {
63
+ show: false,
64
+ format: 'dd/MM/yy HH:mm'
65
+ },
66
+ y: {
67
+ formatter: formatter,
176
68
  title: {
177
- text: ''
178
- },
179
- tooltip: {
180
- borderWidth: 0,
181
- backgroundColor: 'yellow',
182
- pointFormat: '{point.y}',
183
- //headerFormat: '',
184
- shadow: false,
185
- style: {
186
- fontSize: '16px',
187
- color: '#000',
188
- },
189
- formatter: function() {
190
- if (this.y == 0) {
191
- return false;
192
- }
193
- return this.y + ' %';
194
- }
195
- },
196
- xAxis: {
197
- crosshair: true,
198
- type: 'datetime',
199
- labels: {
200
- style: {
201
- color: "#a6b0cf"
202
- }
203
- }
204
- },
205
- yAxis: {
206
- min: 0,
207
- title: {
208
- text: '%',
209
- style: {
210
- color: "#f6f6f6"
211
- }
212
- },
213
- labels: {
214
- style: {
215
- color: "#a6b0cf"
216
- }
217
- }
218
- },
219
- legend: {
220
- enabled: false
221
- },
222
- exporting: {
223
- buttons: {
224
- contextButton: {
225
- theme: {
226
- fill: "#eee"
227
- }
228
- }
229
- }
230
- },
231
- plotOptions: {
232
- area: {
233
- color: '#ff5b5b',
234
- }
235
- },
236
- series: [{
237
- type: 'line',
238
- name: name,
239
- data: data,
240
- fillOpacity: 0.3,
241
- lineWidth: 1,
242
- states: {
243
- hover: {
244
- lineWidth: 2
245
- }
246
- }
247
- }]
69
+ formatter: () => '',
70
+ }
71
+ }
72
+ };
73
+ }
74
+
75
+ function showTIRChart(element_id, data, addon, name) {
76
+ console.dir(data);
77
+ showChart(element_id, 'area', 'RPM', {
78
+ tooltip: tooltipOptions(value => (value ? value + addon : undefined)),
79
+ series: [{
80
+ name: name,
81
+ data: data
82
+ }]
248
83
  });
249
- };
84
+ }
250
85
 
86
+ function showRTChart(element_id, data) {
87
+ showChart(element_id, 'area', 'Time', {
88
+ tooltip: tooltipOptions(value => (value ? value + ' ms' : undefined)),
89
+ series: [{
90
+ name: 'Response Time',
91
+ data: data,
92
+ }],
93
+ });
94
+ }
251
95
 
252
- function showUsageChart(div, data, addon, name) {
253
- Highcharts.chart(div, {
254
- chart: {
255
- type: 'line',
256
- zoomType: 'x',
257
- },
258
- title: {
259
- text: ''
260
- },
261
- tooltip: {
262
- borderWidth: 0,
263
- backgroundColor: 'yellow',
264
- pointFormat: '{point.y}',
265
- //headerFormat: '',
266
- shadow: false,
267
- style: {
268
- fontSize: '16px',
269
- color: '#000',
270
- },
271
- formatter: function() {
272
- if (this.y == 0) {
273
- return false;
274
- }
275
- return bytes(this.y, true);
276
- }
277
- },
278
- xAxis: {
279
- crosshair: true,
280
- type: 'datetime',
281
- labels: {
282
- style: {
283
- color: "#a6b0cf"
284
- }
285
- }
286
- },
287
- yAxis: {
288
- min: 0,
289
- title: {
290
- text: '',
291
- style: {
292
- color: "#f6f6f6"
293
- }
294
- },
295
- labels: {
296
- style: {
297
- color: "#a6b0cf"
298
- }
299
- }
300
- },
301
- legend: {
302
- enabled: false
303
- },
304
- exporting: {
305
- buttons: {
306
- contextButton: {
307
- theme: {
308
- fill: "#eee"
309
- }
310
- }
311
- }
312
- },
313
- plotOptions: {
314
- area: {
315
- color: '#ff5b5b',
316
- }
317
- },
318
- series: [{
319
- type: 'line',
320
- name: name,
321
- data: data,
322
- fillOpacity: 0.3,
323
- lineWidth: 1,
324
- states: {
325
- hover: {
326
- lineWidth: 2
327
- }
328
- }
329
- }]
96
+ function showPercentageChart(element_id, data, name) {
97
+ showChart(element_id, 'line', '%', {
98
+ tooltip: tooltipOptions(value => (value ? value + ' %' : undefined)),
99
+ series: [{
100
+ name: name,
101
+ data: data,
102
+ }]
330
103
  });
331
- };
104
+ }
105
+
106
+ function showUsageChart(element_id, data, name, pow) {
107
+ const units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB'][pow];
108
+ const bytes = Math.pow(1024, pow);
332
109
 
333
- function bytes(bytes, label) {
334
- if (bytes == 0) return '';
335
- var s = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];
336
- var e = Math.floor(Math.log(bytes)/Math.log(1024));
337
- var value = ((bytes/Math.pow(1024, Math.floor(e))).toFixed(2));
338
- e = (e<0) ? (-e) : e;
339
- if (label) value += ' ' + s[e];
340
- return value;
110
+ showChart(element_id, 'line', name, {
111
+ tooltip: tooltipOptions(value => (value ? `${value} ${units}` : undefined)),
112
+ series: [{
113
+ name: name,
114
+ data: data.map(([timestamp, value]) => [timestamp, typeof value === 'number' ? (value / bytes).toFixed(2) : null]),
115
+ }]
116
+ });
341
117
  }
342
118
 
343
- const recent = document.getElementById("recent")
344
- const autoupdate = document.getElementById("autoupdate")
119
+ const recent = document.getElementById("recent");
120
+ const autoupdate = document.getElementById("autoupdate");
345
121
 
346
- if(autoupdate) {
122
+ if (autoupdate) {
347
123
  // set autoupdate checked from localStorage is missing
348
124
  if (localStorage.getItem("autoupdate") === null) {
349
125
  localStorage.setItem("autoupdate", "true");
@@ -354,12 +130,12 @@ if(autoupdate) {
354
130
  });
355
131
  }
356
132
 
357
- if(recent) {
358
- const tbody = recent.querySelector("tbody")
133
+ if (recent) {
134
+ const tbody = recent.querySelector("tbody");
359
135
 
360
136
  setInterval(() => {
361
- tr = tbody.children[0];
362
- from_timei = tr.getAttribute("from_timei") || ''
137
+ const tr = tbody.children[0];
138
+ const from_timei = tr.getAttribute("from_timei") || '';
363
139
 
364
140
  if (!autoupdate.checked) {
365
141
  return;
@@ -373,6 +149,6 @@ if(recent) {
373
149
  .then(res => res.text())
374
150
  .then(html => {
375
151
  tbody.innerHTML = html + tbody.innerHTML;
376
- })
152
+ });
377
153
  }, 3000);
378
154
  }
@@ -6,9 +6,6 @@
6
6
  <title>Rails Performance</title>
7
7
  <%= csrf_meta_tags %>
8
8
  <%= csp_meta_tag if ::Rails::VERSION::STRING.to_f >= 5.2 %>
9
- <script>
10
- window.APP_TIME_ZONE = '<%= Rails.application.config.time_zone.presence || 'UTC' %>';
11
- </script>
12
9
  <%= render '/rails_performance/stylesheets/stylesheets' %>
13
10
  <link rel="shortcut icon" href="/favicon.ico">
14
11
  </head>
@@ -38,13 +38,13 @@
38
38
  <script>
39
39
  <% @resources_report.data.keys.each do |server_key| %>
40
40
  var data1 = <%= raw @resources_report.cpu[server_key].to_json %>;
41
- showPercentageChart('cpu_report_<%= server_key.parameterize %>', data1, ' %', '%');
41
+ showPercentageChart('cpu_report_<%= server_key.parameterize %>', data1, 'CPU');
42
42
 
43
43
  var data2 = <%= raw @resources_report.memory[server_key].to_json %>;
44
- showUsageChart('memory_report_<%= server_key.parameterize %>', data2, ' Mb', 'Mb');
44
+ showUsageChart('memory_report_<%= server_key.parameterize %>', data2, 'Usage', 2);
45
45
 
46
46
  var data3 = <%= raw @resources_report.disk[server_key].to_json %>;
47
- showUsageChart('disk_report_<%= server_key.parameterize %>', data3, ' Gb', 'Gb');
47
+ showUsageChart('disk_report_<%= server_key.parameterize %>', data3, 'Available', 3);
48
48
  <% end %>
49
49
  </script>
50
50
  <% end %>
@@ -140,3 +140,7 @@ body.has-sticky-footer {
140
140
  background-color: #f5f5f5;
141
141
  padding: 1rem 0;
142
142
  }
143
+
144
+ .apexcharts-tooltip {
145
+ background: yellow !important;
146
+ }
@@ -69,7 +69,7 @@ module RailsPerformance
69
69
  when :custom
70
70
  "custom|*#{compile_custom_query}*|END|#{RailsPerformance::SCHEMA}"
71
71
  else
72
- raise "wrong type for datasource query builder"
72
+ raise "wrong type: \"#{type}\" for datasource query builder"
73
73
  end
74
74
  end
75
75
 
@@ -3,6 +3,8 @@ module RailsPerformance
3
3
  class RakeExt
4
4
  def self.init
5
5
  ::Rake::Task.class_eval do
6
+ next if method_defined?(:invoke_with_rails_performance)
7
+
6
8
  def invoke_with_rails_performance(*args)
7
9
  now = RailsPerformance::Utils.time
8
10
  status = "success"
@@ -1,4 +1,4 @@
1
1
  module RailsPerformance
2
- VERSION = "1.4.0"
2
+ VERSION = "1.4.1.alpha1"
3
3
  SCHEMA = "1.0.2"
4
4
  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.4.0
4
+ version: 1.4.1.alpha1
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-23 00:00:00.000000000 Z
11
+ date: 2024-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -320,6 +320,7 @@ files:
320
320
  - app/helpers/rails_performance/rails_performance_helper.rb
321
321
  - app/views/rails_performance/_panel.html.erb
322
322
  - app/views/rails_performance/javascripts/_javascripts.html.erb
323
+ - app/views/rails_performance/javascripts/apexcharts.min.js
323
324
  - app/views/rails_performance/javascripts/app.js
324
325
  - app/views/rails_performance/javascripts/jquery-3.4.1.min.js
325
326
  - app/views/rails_performance/javascripts/navbar.js