rorvswild 1.7.0 → 1.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rorvswild/local/javascript/local.js +5 -0
- data/lib/rorvswild/local/local.html.erb +61 -53
- data/lib/rorvswild/local/stylesheet/local.css +91 -25
- data/lib/rorvswild/plugin/delayed_job.rb +10 -1
- data/lib/rorvswild/plugin/middleware.rb +33 -3
- data/lib/rorvswild/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 587f67697724c84547a0fde87674a10b35b4a36c61d5de4d032bd775fa339443
|
4
|
+
data.tar.gz: 5da27bd25a15ba85948731d383084852778545a7a86c95921194c22bf80efc7e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92cef045840fe613886cd7d2fd8370cf69afff5e86517025efaaf33d2e694c629225cd82dd728cbf8d1f89045119479dc7667ad44cb1cf935131e84e0720b067
|
7
|
+
data.tar.gz: 127d539486858d0f73ad38cb5ab4c2164c43b56c01673e114f08760e0a394b70be2bc569a0b332a7bc901347a05066d84e7407f772dd6c46ae227584930cdc49
|
@@ -41,6 +41,10 @@ RorVsWild.Local.prototype.toggle = function() {
|
|
41
41
|
this.active ? this.collapse() : this.expand()
|
42
42
|
}
|
43
43
|
|
44
|
+
RorVsWild.Local.prototype.toggleCommand = function(event) {
|
45
|
+
document.querySelector(event.currentTarget.getAttribute("data-target")).classList.toggle("is-open")
|
46
|
+
}
|
47
|
+
|
44
48
|
RorVsWild.Local.prototype.expand = function() {
|
45
49
|
this.currentRequest = this.requests[0]
|
46
50
|
this.active = true
|
@@ -120,6 +124,7 @@ RorVsWild.Local.Request.prototype.sections = function() {
|
|
120
124
|
return this.data.sections.map(function(section) {
|
121
125
|
var runtime = (section.total_runtime - section.children_runtime)
|
122
126
|
var object = {
|
127
|
+
id: RorVsWild.Local.nextId(),
|
123
128
|
impact: RorVsWild.Local.formatImpact(runtime * 100 / this.data.runtime),
|
124
129
|
averageRuntime: RorVsWild.Local.formatRuntime(runtime / section.calls),
|
125
130
|
command: section.kind != "view" ? section.command : null,
|
@@ -5,54 +5,57 @@
|
|
5
5
|
|
6
6
|
<script type="x-tmpl-mustache" data-partial="RorVsWild.Local">
|
7
7
|
<div id="rorvswild-local-requests" class="rorvswild-local-panel {{containerClass}}">
|
8
|
-
|
9
8
|
<div class="rorvswild-local-panel__header">
|
10
|
-
<
|
11
|
-
<
|
12
|
-
<
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
</a>
|
18
|
-
|
19
|
-
{{#currentRequest}}
|
20
|
-
<span class="rorvswild-local-panel__header__title">breakdown</span>
|
21
|
-
{{/currentRequest}}
|
22
|
-
{{^currentRequest}}
|
23
|
-
<span class="rorvswild-local-panel__header__title">history</span>
|
24
|
-
{{/currentRequest}}
|
25
|
-
<span class="rorvswild-local-panel__header__icons">
|
26
|
-
<a href="https://github.com/BaseSecrete/rorvswild" class="rorvswild-local-panel__github" title="Source code">
|
27
|
-
<svg width="16px" height="16px" viewBox="0 0 16 16">
|
28
|
-
<path d="M8,0 C3.58,0 0,3.58 0,8 C0,11.54 2.29,14.53 5.47,15.59 C5.87,15.66 6.02,15.42 6.02,15.21 C6.02,15.02 6.01,14.39 6.01,13.72 C4,14.09 3.48,13.23 3.32,12.78 C3.23,12.55 2.84,11.84 2.5,11.65 C2.22,11.5 1.82,11.13 2.49,11.12 C3.12,11.11 3.57,11.7 3.72,11.94 C4.44,13.15 5.59,12.81 6.05,12.6 C6.12,12.08 6.33,11.73 6.56,11.53 C4.78,11.33 2.92,10.64 2.92,7.58 C2.92,6.71 3.23,5.99 3.74,5.43 C3.66,5.23 3.38,4.41 3.82,3.31 C3.82,3.31 4.49,3.1 6.02,4.13 C6.66,3.95 7.34,3.86 8.02,3.86 C8.7,3.86 9.38,3.95 10.02,4.13 C11.55,3.09 12.22,3.31 12.22,3.31 C12.66,4.41 12.38,5.23 12.3,5.43 C12.81,5.99 13.12,6.7 13.12,7.58 C13.12,10.65 11.25,11.33 9.47,11.53 C9.76,11.78 10.01,12.26 10.01,13.01 C10.01,14.08 10,14.94 10,15.21 C10,15.42 10.15,15.67 10.55,15.59 C13.71,14.53 16,11.53 16,8 C16,3.58 12.42,0 8,0 L8,0 Z"></path>
|
9
|
+
<div class="rorvswild-local-panel__width-limiter">
|
10
|
+
<a href="https://www.rorvswild.com" class="rorvswild-local-panel__logo">
|
11
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 34.83 30.83">
|
12
|
+
<polygon points="17.41 9.41 13.41 9.41 9.41 13.41 17.41 21.41 25.41 13.41 21.41 9.41 17.41 9.41"/>
|
13
|
+
<polyline points="1.41 21.41 9.41 29.41 17.41 21.41 25.41 29.41 33.41 21.41"/>
|
14
|
+
<polyline points="9.41 5.41 5.41 1.41 1.41 5.41"/>
|
15
|
+
<polyline points="33.41 5.41 29.41 1.41 25.41 5.41"/>
|
29
16
|
</svg>
|
30
17
|
</a>
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
18
|
+
|
19
|
+
{{#currentRequest}}
|
20
|
+
<span class="rorvswild-local-panel__header__title">breakdown</span>
|
21
|
+
{{/currentRequest}}
|
22
|
+
{{^currentRequest}}
|
23
|
+
<span class="rorvswild-local-panel__header__title">history</span>
|
24
|
+
{{/currentRequest}}
|
25
|
+
<span class="rorvswild-local-panel__header__icons">
|
26
|
+
<a href="https://github.com/BaseSecrete/rorvswild" class="rorvswild-local-panel__github" title="Source code">
|
27
|
+
<svg width="16px" height="16px" viewBox="0 0 16 16">
|
28
|
+
<path d="M8,0 C3.58,0 0,3.58 0,8 C0,11.54 2.29,14.53 5.47,15.59 C5.87,15.66 6.02,15.42 6.02,15.21 C6.02,15.02 6.01,14.39 6.01,13.72 C4,14.09 3.48,13.23 3.32,12.78 C3.23,12.55 2.84,11.84 2.5,11.65 C2.22,11.5 1.82,11.13 2.49,11.12 C3.12,11.11 3.57,11.7 3.72,11.94 C4.44,13.15 5.59,12.81 6.05,12.6 C6.12,12.08 6.33,11.73 6.56,11.53 C4.78,11.33 2.92,10.64 2.92,7.58 C2.92,6.71 3.23,5.99 3.74,5.43 C3.66,5.23 3.38,4.41 3.82,3.31 C3.82,3.31 4.49,3.1 6.02,4.13 C6.66,3.95 7.34,3.86 8.02,3.86 C8.7,3.86 9.38,3.95 10.02,4.13 C11.55,3.09 12.22,3.31 12.22,3.31 C12.66,4.41 12.38,5.23 12.3,5.43 C12.81,5.99 13.12,6.7 13.12,7.58 C13.12,10.65 11.25,11.33 9.47,11.53 C9.76,11.78 10.01,12.26 10.01,13.01 C10.01,14.08 10,14.94 10,15.21 C10,15.42 10.15,15.67 10.55,15.59 C13.71,14.53 16,11.53 16,8 C16,3.58 12.42,0 8,0 L8,0 Z"></path>
|
35
29
|
</svg>
|
36
|
-
</
|
37
|
-
|
38
|
-
|
30
|
+
</a>
|
31
|
+
{{#embedded}}
|
32
|
+
<div data-events="click->collapse" class="rorvswild-local-panel__close" title="Close">
|
33
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
34
|
+
<line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line>
|
35
|
+
</svg>
|
36
|
+
</div>
|
37
|
+
{{/embedded}}
|
38
|
+
</span>
|
39
|
+
</div>
|
39
40
|
</div>
|
40
41
|
<div class="rorvswild-local-panel__content">
|
41
|
-
|
42
|
-
|
43
|
-
<
|
44
|
-
<
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
42
|
+
<div class="rorvswild-local-panel__width-limiter">
|
43
|
+
{{#currentRequest}}
|
44
|
+
<div data-events="click->goToHistory" class="rorvswild-local-panel__back-button" title="Go to history">
|
45
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
46
|
+
<line x1="20" y1="12" x2="4" y2="12"></line>
|
47
|
+
<polyline points="10 18 4 12 10 6"></polyline>
|
48
|
+
</svg>
|
49
|
+
</div>
|
50
|
+
{{> RorVsWild.Local.RequestDetails}}
|
51
|
+
{{/currentRequest}}
|
50
52
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
53
|
+
{{^currentRequest}}
|
54
|
+
{{#requests}}
|
55
|
+
{{> RorVsWild.Local.RequestSummary}}
|
56
|
+
{{/requests}}
|
57
|
+
{{/currentRequest}}
|
58
|
+
</div>
|
56
59
|
</div>
|
57
60
|
<div class="rorvswild-local-panel__footer">
|
58
61
|
This data is not sent to rorvswild.com. <a href="https://www.rorvswild.com" class="rorvswild-local-panel__footer__link">Create an account</a> to monitor your production environment.
|
@@ -66,12 +69,12 @@
|
|
66
69
|
|
67
70
|
<script type="x-tmpl-mustache" data-partial="RorVsWild.Local.RequestSummary">
|
68
71
|
<div data-events="click->goToRequestDetails" data-request-id="{{id}}" class="rorvswild-local-panel__request">
|
69
|
-
<
|
70
|
-
{{name}}
|
71
|
-
<
|
72
|
+
<div class="rorvswild-local-panel__request__name">
|
73
|
+
<span>{{name}}</span>
|
74
|
+
<div class="rorvswild-local-panel__request__path">
|
72
75
|
{{path}}
|
73
|
-
</
|
74
|
-
</
|
76
|
+
</div>
|
77
|
+
</div>
|
75
78
|
<span class="rorvswild-local-panel__request__runtime">{{runtime}}<small>ms</small></span>
|
76
79
|
<span class="rorvswild-local-panel__request__started-at">{{queuedAt}}</span>
|
77
80
|
</div>
|
@@ -98,26 +101,31 @@
|
|
98
101
|
</script>
|
99
102
|
|
100
103
|
<script type="x-tmpl-mustache" data-partial="RorVsWild.Local.Section">
|
101
|
-
<div class="rorvswild-local-panel__request-details__section">
|
104
|
+
<div class="rorvswild-local-panel__request-details__section" id="section-{{id}}">
|
102
105
|
<div class="rorvswild-local-panel__request-details__section__main">
|
103
106
|
<span class="rorvswild-local-panel__request-details__section__file">
|
107
|
+
{{#command}}
|
108
|
+
<button data-events="click->toggleCommand" data-target="#section-{{id}}" class="rorvswild-local-panel__request-details__section__kind"><span>{{kind}}</button>
|
109
|
+
{{/command}}
|
110
|
+
{{^command}}
|
111
|
+
<span class="rorvswild-local-panel__request-details__section__kind">{{kind}}</span>
|
112
|
+
{{/command}}
|
104
113
|
{{#url}}
|
105
114
|
<a href="{{url}}" class="rorvswild-local-panel__request-details__section__file__name" title="Open in your editor">{{file}}<span>:{{line}}</span></a>
|
106
115
|
{{/url}}
|
107
116
|
{{^url}}
|
108
117
|
<span class="rorvswild-local-panel__request-details__section__file__name">{{file}}<span>:{{line}}</span></span>
|
109
118
|
{{/url}}
|
110
|
-
<div class="rorvswild-local-panel__request-details__section__code">
|
111
|
-
<span class="rorvswild-local-panel__request-details__section__kind">{{kind}}</span>
|
112
|
-
<span class="rorvswild-local-panel__request-details__section__command">
|
113
|
-
<pre><code class="{{language}}">{{command}}</code></pre>
|
114
|
-
</span>
|
115
|
-
</div>
|
116
119
|
</span>
|
117
120
|
<span class="rorvswild-local-panel__request-details__section__average" title="average runtime">{{averageRuntime}}<small>ms</small></span>
|
118
121
|
<span class="rorvswild-local-panel__request-details__section__calls" title="calls">x{{calls}}</span>
|
119
122
|
<span class="rorvswild-local-panel__request-details__section__impact" title="impact">{{impact}}<small>%</small></span>
|
120
123
|
</div>
|
124
|
+
{{#command}}
|
125
|
+
<div class="rorvswild-local-panel__request-details__section__code">
|
126
|
+
<pre><code class="{{language}}">{{command}}</code></pre>
|
127
|
+
</div>
|
128
|
+
{{/command}}
|
121
129
|
</div>
|
122
130
|
</script>
|
123
131
|
|
@@ -96,11 +96,15 @@
|
|
96
96
|
/* Panel Header */
|
97
97
|
.rorvswild-local-panel__header {
|
98
98
|
background: rgb(26 29 36) !important;
|
99
|
-
padding: 12px !important;
|
100
99
|
box-shadow: 0 1px 2px 0 rgba(14,18,26, .8) !important;
|
100
|
+
}
|
101
|
+
|
102
|
+
.rorvswild-local-panel__header .rorvswild-local-panel__width-limiter {
|
101
103
|
display: flex;
|
104
|
+
padding: 12px !important;
|
102
105
|
}
|
103
106
|
|
107
|
+
|
104
108
|
.rorvswild-local-panel__header__title {
|
105
109
|
color: rgb(199 203 214) !important;
|
106
110
|
text-transform: uppercase !important;
|
@@ -113,7 +117,7 @@
|
|
113
117
|
.rorvswild-local-panel svg {
|
114
118
|
height: 24px !important;
|
115
119
|
width: 24px !important;
|
116
|
-
stroke-width: 2 !important;
|
120
|
+
stroke-width: 2.5 !important;
|
117
121
|
fill: none !important;
|
118
122
|
stroke-linecap: square !important;
|
119
123
|
stroke: rgb(146 149 159) !important;
|
@@ -150,7 +154,7 @@
|
|
150
154
|
.rorvswild-local-panel__content {
|
151
155
|
flex: 1 !important;
|
152
156
|
height: calc(100% - 48px) !important;
|
153
|
-
overflow-y:
|
157
|
+
overflow-y: scroll;
|
154
158
|
overscroll-behavior: contain;
|
155
159
|
}
|
156
160
|
|
@@ -187,10 +191,20 @@
|
|
187
191
|
font-weight: 700;
|
188
192
|
}
|
189
193
|
|
194
|
+
.rorvswild-local-panel__request__name > span {
|
195
|
+
text-decoration-color: rgb(146 149 159);
|
196
|
+
text-decoration: underline;
|
197
|
+
text-decoration-thickness: 1px;
|
198
|
+
text-underline-offset: 1px;
|
199
|
+
}
|
200
|
+
|
190
201
|
.rorvswild-local-panel__request__path {
|
191
202
|
color: rgb(146 149 159) !important;
|
192
203
|
font-weight: 400;
|
193
204
|
display: block !important;
|
205
|
+
text-decoration: none !important;
|
206
|
+
text-decoration-thickness: 0 !important;
|
207
|
+
text-decoration-color: transparent !important;
|
194
208
|
}
|
195
209
|
|
196
210
|
.rorvswild-local-panel__request__started-at {
|
@@ -241,6 +255,7 @@ h2.rorvswild-local-panel__request__name__title {
|
|
241
255
|
|
242
256
|
.rorvswild-local-panel__request-details__section__main {
|
243
257
|
display: flex !important;
|
258
|
+
gap: 8px;
|
244
259
|
width: 100% !important;
|
245
260
|
flex-wrap: wrap !important;
|
246
261
|
}
|
@@ -251,16 +266,18 @@ h2.rorvswild-local-panel__request__name__title {
|
|
251
266
|
overflow-wrap: break-word !important;
|
252
267
|
min-width: 0 !important;
|
253
268
|
color: rgb(199 203 214) !important;
|
269
|
+
display: flex;
|
270
|
+
gap: 8px;
|
254
271
|
}
|
255
272
|
|
256
273
|
a.rorvswild-local-panel__request-details__section__file__name {
|
257
274
|
text-decoration-color: rgb(146 149 159);
|
258
275
|
font-weight: 700;
|
276
|
+
text-decoration-thickness: 1px;
|
277
|
+
text-underline-offset: 1px;
|
259
278
|
}
|
260
279
|
|
261
|
-
a.rorvswild-local-panel__request-details__section__file__name:hover {
|
262
|
-
text-decoration-color: rgb(199 203 214);
|
263
|
-
}
|
280
|
+
a.rorvswild-local-panel__request-details__section__file__name:hover { text-decoration-color: rgb(199 203 214); }
|
264
281
|
|
265
282
|
a.rorvswild-local-panel__request-details__section__file__name::after {
|
266
283
|
content: '↗';
|
@@ -282,45 +299,96 @@ a.rorvswild-local-panel__request-details__section__file__name:hover::after { opa
|
|
282
299
|
color: rgb(182 202 255) !important;
|
283
300
|
font-weight: 700 !important;
|
284
301
|
width: 48px !important;
|
285
|
-
|
302
|
+
text-align: right;
|
303
|
+
margin-left: auto;
|
286
304
|
}
|
287
305
|
|
288
306
|
.rorvswild-local-panel__request-details__section__calls {
|
289
307
|
color: rgb(199 203 214) !important;
|
290
308
|
width: 48px !important;
|
291
|
-
|
309
|
+
text-align: right;
|
292
310
|
}
|
293
311
|
|
294
312
|
.rorvswild-local-panel__request-details__section__impact {
|
295
313
|
color: rgb(199 203 214) !important;
|
296
314
|
width: 48px !important;
|
297
315
|
font-weight: 700 !important;
|
298
|
-
|
316
|
+
text-align: right;
|
299
317
|
}
|
300
318
|
|
301
319
|
.rorvswild-local-panel__request-details__section__code {
|
302
|
-
display: flex !important;
|
303
320
|
color: rgb(146 149 159) !important;
|
304
|
-
|
321
|
+
background: rgb(14 15 20);
|
322
|
+
padding: 12px;
|
323
|
+
margin: 12px -12px -12px;
|
324
|
+
overflow: hidden !important;
|
325
|
+
display: none;
|
305
326
|
}
|
306
327
|
|
307
328
|
.rorvswild-local-panel__request-details__section__kind {
|
308
|
-
background: rgb(38 41 49)
|
329
|
+
background: rgb(38 41 49);
|
309
330
|
font-size: 10px !important;
|
310
331
|
text-transform: uppercase !important;
|
311
332
|
text-align: center !important;
|
312
|
-
letter-spacing:
|
313
|
-
width:
|
333
|
+
letter-spacing: 1px !important;
|
334
|
+
width: 64px !important;
|
314
335
|
height: 24px !important;
|
336
|
+
min-height: 24px;
|
337
|
+
padding: 0;
|
315
338
|
display: inline-block !important;
|
339
|
+
flex-shrink: 0;
|
316
340
|
}
|
317
341
|
|
318
|
-
.rorvswild-local-panel__request-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
342
|
+
button.rorvswild-local-panel__request-details__section__kind {
|
343
|
+
box-shadow: 0 0 0 1px rgb(72 75 80) inset;
|
344
|
+
border: none;
|
345
|
+
font-weight: 700;
|
346
|
+
position: relative;
|
347
|
+
}
|
348
|
+
|
349
|
+
button.rorvswild-local-panel__request-details__section__kind span {
|
350
|
+
display: inline-block;
|
351
|
+
max-width: calc(5ch + 5px);
|
352
|
+
white-space: nowrap;
|
353
|
+
overflow: hidden;
|
354
|
+
}
|
355
|
+
|
356
|
+
button.rorvswild-local-panel__request-details__section__kind:hover { box-shadow: 0 0 0 1px rgb(147 149 156) inset; }
|
357
|
+
|
358
|
+
button.rorvswild-local-panel__request-details__section__kind::after {
|
359
|
+
content: "";
|
360
|
+
display: block;
|
361
|
+
box-sizing: border-box;
|
362
|
+
position: absolute;
|
363
|
+
width: 4px;
|
364
|
+
height: 4px;
|
365
|
+
border-bottom: 1px solid rgb(146 149 159);
|
366
|
+
border-right: 1px solid rgb(146 149 159);
|
367
|
+
transform: rotate(45deg);
|
368
|
+
right: 6px;
|
369
|
+
top:calc(50% - 3px);
|
370
|
+
}
|
371
|
+
|
372
|
+
button.rorvswild-local-panel__request-details__section__kind:hover::after { border-color: inherit; }
|
373
|
+
|
374
|
+
span.rorvswild-local-panel__request-details__section__kind {
|
375
|
+
background: rgb(14 15 20) !important;
|
376
|
+
color: rgb(146 149 159)!important;
|
377
|
+
}
|
378
|
+
|
379
|
+
.rorvswild-local-panel__request-details__section.is-open .rorvswild-local-panel__request-details__section__code {
|
380
|
+
display: flex;
|
381
|
+
border-bottom: 1px solid rgb(26 29 36) !important
|
382
|
+
}
|
383
|
+
|
384
|
+
.rorvswild-local-panel__request-details__section.is-open .rorvswild-local-panel__request-details__section__kind {
|
385
|
+
color: rgb(182 202 255) !important;
|
386
|
+
background-color: rgb(14 15 20) !important;
|
387
|
+
}
|
388
|
+
|
389
|
+
.rorvswild-local-panel__request-details__section.is-open .rorvswild-local-panel__request-details__section__kind::after {
|
390
|
+
transform: rotate(225deg);
|
391
|
+
transform-origin: 2.5px 3px;
|
324
392
|
}
|
325
393
|
|
326
394
|
/* Panel Footer */
|
@@ -346,10 +414,8 @@ a.rorvswild-local-panel__footer__link {
|
|
346
414
|
|
347
415
|
.rorvswild-local-panel__request__runtime { margin-left: 12px !important; }
|
348
416
|
|
349
|
-
.rorvswild-local-
|
350
|
-
|
351
|
-
|
352
|
-
text-align: right !important;
|
353
|
-
margin: 0 0 0 12px !important;
|
417
|
+
.rorvswild-local-panel__width-limiter {
|
418
|
+
max-width: 1520px;
|
419
|
+
margin: 0 auto;
|
354
420
|
}
|
355
421
|
}
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RorVsWild
|
2
4
|
module Plugin
|
3
5
|
module DelayedJob
|
@@ -7,7 +9,14 @@ module RorVsWild
|
|
7
9
|
Delayed::Worker.plugins << Class.new(Delayed::Plugin) do
|
8
10
|
callbacks do |lifecycle|
|
9
11
|
lifecycle.around(:invoke_job) do |job, *args, &block|
|
10
|
-
|
12
|
+
if job.payload_object.class.name == "ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper"
|
13
|
+
job_name, job_args = job.payload_object.job_data.values_at("job_class", "arguments")
|
14
|
+
elsif job.payload_object.is_a?(Delayed::PerformableMethod)
|
15
|
+
job_name, job_args = job.name, job.payload_object.args
|
16
|
+
else
|
17
|
+
job_name, job_args = job.name, job.payload_object
|
18
|
+
end
|
19
|
+
RorVsWild.agent.measure_job(job_name, parameters: job_args) { block.call(job) }
|
11
20
|
end
|
12
21
|
end
|
13
22
|
end
|
@@ -26,12 +26,14 @@ module RorVsWild
|
|
26
26
|
inject_server_timing(RorVsWild.agent.stop_request, headers)
|
27
27
|
end
|
28
28
|
|
29
|
+
private
|
30
|
+
|
29
31
|
def rails_engine_location
|
30
32
|
@rails_engine_location = ::Rails::Engine.instance_method(:call).source_location
|
31
33
|
end
|
32
34
|
|
33
|
-
def
|
34
|
-
sections.
|
35
|
+
def format_server_timing_header(sections)
|
36
|
+
sections.map do |section|
|
35
37
|
if section.kind == "view"
|
36
38
|
"#{section.kind};dur=#{section.self_runtime};desc=\"#{section.file}\""
|
37
39
|
else
|
@@ -40,9 +42,37 @@ module RorVsWild
|
|
40
42
|
end.join(", ")
|
41
43
|
end
|
42
44
|
|
45
|
+
def format_server_timing_ascii(sections, total_width = 80)
|
46
|
+
max_time = sections.map(&:self_runtime).max
|
47
|
+
chart_width = (total_width * 0.25).to_i
|
48
|
+
rows = sections.map { |section|
|
49
|
+
[
|
50
|
+
section.kind == "view" ? section.file : "#{section.file}:#{section.line}",
|
51
|
+
"█" * (section.self_runtime * (chart_width-1) / max_time),
|
52
|
+
"#{section.self_runtime}ms"
|
53
|
+
]
|
54
|
+
}
|
55
|
+
time_width = rows.map { |cols| cols[2].size }.max + 1
|
56
|
+
label_width = total_width - chart_width - time_width
|
57
|
+
rows.each { |cols| cols[0] = truncate_backwards(cols[0], label_width) }
|
58
|
+
template = "%-#{label_width}s%#{chart_width}s%#{time_width}s"
|
59
|
+
rows.map { |cols| format(template, *cols) }.join("\n")
|
60
|
+
end
|
61
|
+
|
62
|
+
def truncate_backwards(string, width)
|
63
|
+
string.size > width ? "…" + string[-(width - 1)..-1] : string
|
64
|
+
end
|
65
|
+
|
43
66
|
def inject_server_timing(data, headers)
|
44
67
|
return if !data || !data[:send_server_timing] || !(sections = data[:sections])
|
45
|
-
|
68
|
+
sections = sections.sort_by(&:self_runtime).reverse[0,10]
|
69
|
+
headers["Server-Timing"] = format_server_timing_header(sections)
|
70
|
+
if data[:name] && RorVsWild.logger.level <= Logger::Severity::DEBUG
|
71
|
+
RorVsWild.logger.debug(["┤ #{data[:name]} ├".center(80, "─"),
|
72
|
+
format_server_timing_ascii(sections),
|
73
|
+
"─" * 80, nil].join("\n")
|
74
|
+
)
|
75
|
+
end
|
46
76
|
end
|
47
77
|
end
|
48
78
|
end
|
data/lib/rorvswild/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rorvswild
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexis Bernard
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-
|
12
|
+
date: 2024-06-03 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Performances and errors insights for rails developers.
|
15
15
|
email:
|
@@ -86,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
86
|
- !ruby/object:Gem::Version
|
87
87
|
version: '0'
|
88
88
|
requirements: []
|
89
|
-
rubygems_version: 3.
|
89
|
+
rubygems_version: 3.3.26
|
90
90
|
signing_key:
|
91
91
|
specification_version: 4
|
92
92
|
summary: Ruby on Rails applications monitoring
|