rorvswild 1.5.2 → 1.5.7

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: a9e6a2963e38a065dfaba2af93a5d05275a18d6a57c9e3b12b80b027f8f6c605
4
- data.tar.gz: 953c30a7d822f9ea69b2c2ef16d96f7a16ed5765da2fa8d013982a553c1a06f8
3
+ metadata.gz: 185e306b95a9f95fe78161e62e5e8e03d43ce8f892ad2350882ba44e07ba7d9e
4
+ data.tar.gz: 8b5e2bba0d15a48f1bde89cd804bd56535e957069b6b1acd59ccec96ec4d2857
5
5
  SHA512:
6
- metadata.gz: bad6d0f028f564619f7283f582fbf5f008f8cf5fcd5b38ab8036fb570438ef1e4e75d2bffeeff93f562f541dc4bdf7cbdf3b38435fc44d354c82f9fd01b7cc5b
7
- data.tar.gz: 31a9d64bbc3a6468022705025bab670c2dd3d156a9e35ba9241450f2d98a45c4f30448f25ceab7d7b983a21d251907dc3c4aeef6900084559a47b1c27841748b
6
+ metadata.gz: 15ae6b40fcf59aa4eabe7db0b0068239b49cd4311d2a03014484110fc51c5574ee00b068549298c720aef4bbe2f9280c480b026887589b999a0f41792b89d116
7
+ data.tar.gz: bd616d7f191bf7296a4d537e4e9edd81bc4d791e46ecd237da8370c5d3031c697eb43545c429ff2040e8a9e41df2cce68ff1e9a077e2ac1a4a65fa4eb4f05453
data/README.md CHANGED
@@ -32,11 +32,11 @@ Signup on https://www.rorvswild.com and create an app to get one.
32
32
 
33
33
  * Add in your Gemfile `gem "rorvswild"`
34
34
  * Run `bundle install` in you terminal
35
- * Run `rorvswild-setup API_KEY` in you terminal
35
+ * Run `rorvswild-install API_KEY` in you terminal
36
36
  * Deploy/Restart your app
37
37
  * Make a few requests and refresh your app page on rorvswild.com to view the dashboard.
38
38
 
39
- The `rorvswild-setup` command creates a `config/rorvswild.yml` file.
39
+ The `rorvswild-install` command creates a `config/rorvswild.yml` file.
40
40
 
41
41
  If you prefer to use an initializer, you can do the following:
42
42
 
@@ -167,6 +167,32 @@ Finally here is the list of all plugins you can ignore :
167
167
  - Resque
168
168
  - Sidekiq
169
169
 
170
+ #### Change logger
171
+
172
+ By default RorVsWild uses `Rails.logger` or standard output. However in some cases you want to isolate RorVsWild's logs.
173
+ To do that, you have to specifiy the log destination via the `logger` option :
174
+
175
+ ```yaml
176
+ # config/rorvswild.yml
177
+ production:
178
+ api_key: API_KEY
179
+ logger: log/rorvswild.yml
180
+ ```
181
+
182
+ Here is the equivalent if you prefer initialising RorVsWild manually :
183
+
184
+ ```ruby
185
+ # config/initializers/rorvswild.rb
186
+ RorVsWild.start(api_key: "API_KEY", logger: "log/rorvswild.log")
187
+ ```
188
+
189
+ In the case you want a custom logger such as Syslog, you can only do it by initialising it manually :
190
+
191
+ ```ruby
192
+ # config/initializers/rorvswild.rb
193
+ RorVsWild.start(api_key: "API_KEY", logger: Logger::Syslog.new)
194
+ ```
195
+
170
196
  ## Contributing
171
197
 
172
198
  1. Fork it ( https://github.com/[my-github-username]/rorvswild/fork )
@@ -21,12 +21,13 @@ module RorVsWild
21
21
  @connection_count = 0
22
22
  @mutex = Mutex.new
23
23
  @config = config
24
+ @headers = {"Content-Type" => "application/json", "X-Gem-Version" => RorVsWild::VERSION}
25
+ @headers["X-Rails-Version"] = Rails.version if defined?(Rails)
24
26
  end
25
27
 
26
28
  def post(path, data)
27
29
  uri = URI(api_url + path)
28
- post = Net::HTTP::Post.new(uri.path, "X-Gem-Version".freeze => RorVsWild::VERSION)
29
- post.content_type = "application/json".freeze
30
+ post = Net::HTTP::Post.new(uri.path, @headers)
30
31
  post.basic_auth(nil, api_key)
31
32
  post.body = data.to_json
32
33
  transmit(post)
@@ -46,6 +47,7 @@ module RorVsWild
46
47
 
47
48
  def take_or_create_connection
48
49
  if http = take_connection
50
+ http.start unless http.active?
49
51
  http
50
52
  elsif @connection_count < max_connections
51
53
  @connection_count += 1
@@ -57,6 +59,8 @@ module RorVsWild
57
59
  if http = take_or_create_connection
58
60
  http.request(request)
59
61
  end
62
+ rescue Exception => ex
63
+ RorVsWild.logger.error(ex.full_message)
60
64
  ensure
61
65
  release_connection(http)
62
66
  end
@@ -65,6 +69,7 @@ module RorVsWild
65
69
  uri = URI(api_url)
66
70
  http = Net::HTTP.new(uri.host, uri.port)
67
71
  http.open_timeout = timeout
72
+ http.keep_alive_timeout = 5
68
73
 
69
74
  if uri.scheme == HTTPS
70
75
  # Disable peer verification while there is a memory leak with OpenSSL
@@ -38,6 +38,7 @@ production:
38
38
  # - Redis
39
39
  # - Resque
40
40
  # - Sidekiq
41
+ # logger: log/rorvswild.log # By default it uses Rails.logger or Logger.new(STDOUT)
41
42
  YAML
42
43
  end
43
44
  end
@@ -5,7 +5,7 @@
5
5
  .rorvswild-local-toggler {
6
6
  background: #1d242f !important;
7
7
  color: #80abe3 !important;
8
- box-shadow: 0 0 0 1px rgba(159, 169, 187, 0.3), 0 1px 4px 0px rgba(25, 32, 42, .9) !important;
8
+ box-shadow: 0 0 0 1px rgba(159, 169, 187, 0.3), 0 1px 4px 0px rgba(25, 32, 42, 0.9) !important;
9
9
  border-radius: 4px !important;
10
10
  font-family: SF Mono, Menlo, Consolas, DejaVu Sans Mono, monospace !important;
11
11
  font-size: 15px !important;
@@ -13,10 +13,11 @@
13
13
  position: fixed !important;
14
14
  bottom: 12px !important;
15
15
  left: 12px !important;
16
- padding:0 12px !important;
16
+ padding: 0 12px !important;
17
17
  cursor: pointer !important;
18
18
  z-index: 100000000000000003 !important;
19
19
  }
20
+
20
21
  .rorvswild-local-toggler small {
21
22
  color: #9fa9bb !important;
22
23
  font-size: 12px !important;
@@ -30,7 +31,7 @@
30
31
 
31
32
  .rorvswild-local-panel {
32
33
  background: #1d242f !important;
33
- box-shadow: 0 0 0 48px rgba(25, 32, 42, .9) !important;
34
+ box-shadow: 0 0 0 48px rgba(25, 32, 42, 0.9) !important;
34
35
  color: #eceef1 !important;
35
36
  font-family: SF Mono, Menlo, Consolas, DejaVu Sans Mono, monospace !important;
36
37
  font-size: 15px !important;
@@ -84,6 +85,7 @@
84
85
  display: -ms-flexbox;
85
86
  display: flex;
86
87
  }
88
+
87
89
  .rorvswild-local-panel__header__title {
88
90
  color: #9fa9bb !important;
89
91
  text-transform: uppercase !important;
@@ -94,6 +96,7 @@
94
96
  -ms-flex: 1;
95
97
  flex: 1;
96
98
  }
99
+
97
100
  .rorvswild-local-panel svg {
98
101
  height: 24px !important;
99
102
  width: 24px !important;
@@ -104,12 +107,15 @@
104
107
  stroke-miterlimit: 10 !important;
105
108
  vertical-align: middle !important;
106
109
  }
110
+
107
111
  .rorvswild-local-panel svg:hover {
108
112
  stroke: #eceef1 !important;
109
113
  }
114
+
110
115
  .rorvswild-local-panel__logo {
111
116
  width: 60px !important;
112
117
  }
118
+
113
119
  .rorvswild-local-panel__header__icons {
114
120
  width: 60px !important;
115
121
  display: -webkit-box !important;
@@ -119,14 +125,17 @@
119
125
  -ms-flex-pack: end !important;
120
126
  justify-content: flex-end !important;
121
127
  }
128
+
122
129
  .rorvswild-local-panel__close {
123
130
  cursor: pointer !important;
124
131
  margin-left: 12px !important;
125
132
  }
133
+
126
134
  .rorvswild-local-panel__github svg {
127
135
  stroke: none !important;
128
136
  fill: #9fa9bb !important;
129
137
  }
138
+
130
139
  .rorvswild-local-panel__github svg:hover {
131
140
  stroke: none !important;
132
141
  fill: #eceef1 !important;
@@ -136,17 +145,21 @@
136
145
 
137
146
  .rorvswild-local-panel__content {
138
147
  -webkit-box-flex: 1 !important;
139
- -ms-flex: 1 !important;
140
- flex: 1 !important;
148
+ -ms-flex: 1 !important;
149
+ flex: 1 !important;
141
150
  height: calc(100% - 48px) !important;
142
151
  overflow-x: auto !important;
143
152
  }
153
+
144
154
  .rorvswild-local-panel__content::-webkit-scrollbar { width: 3px !important; }
155
+
145
156
  .rorvswild-local-panel__content::-webkit-scrollbar-corner { background: transparent !important; }
157
+
146
158
  .rorvswild-local-panel__content::-webkit-scrollbar-track {
147
- box-shadow: inset 0 0 0 rgba(0,0,0,0.3) !important;
159
+ box-shadow: inset 0 0 0 rgba(0, 0, 0, 0.3) !important;
148
160
  background: transparent !important;
149
161
  }
162
+
150
163
  .rorvswild-local-panel__content::-webkit-scrollbar-thumb {
151
164
  background-color: #9fa9bb !important;
152
165
  outline: 1px solid #9fa9bb !important;
@@ -162,18 +175,22 @@
162
175
  border-bottom: 1px solid rgba(25, 32, 42, 1) !important;
163
176
  cursor: pointer !important;
164
177
  -ms-flex-wrap: wrap !important;
165
- flex-wrap: wrap !important;
178
+ flex-wrap: wrap !important;
166
179
  }
180
+
167
181
  .rorvswild-local-panel__request:hover { background: #222835 !important; }
182
+
168
183
  .rorvswild-local-panel__request__name {
169
184
  word-break: break-all !important;
170
185
  overflow-wrap: break-word !important;
171
186
  width: 100% !important;
172
187
  }
188
+
173
189
  .rorvswild-local-panel__request__path {
174
190
  color: #9fa9bb !important;
175
191
  display: block !important;
176
192
  }
193
+
177
194
  .rorvswild-local-panel__request__started-at {
178
195
  color: #9fa9bb !important;
179
196
  margin-left: 12px !important;
@@ -187,6 +204,7 @@
187
204
  cursor: pointer !important;
188
205
  display: block !important;
189
206
  }
207
+
190
208
  .rorvswild-local-panel__request-details__request {
191
209
  display: -webkit-box !important;
192
210
  display: -ms-flexbox !important;
@@ -194,8 +212,9 @@
194
212
  margin-bottom: 48px !important;
195
213
  padding: 12px 12px 0 !important;
196
214
  -ms-flex-wrap: wrap !important;
197
- flex-wrap: wrap !important;
215
+ flex-wrap: wrap !important;
198
216
  }
217
+
199
218
  h2.rorvswild-local-panel__request__name__title {
200
219
  margin:-18px 0 0 !important;
201
220
  padding:0 !important;
@@ -213,6 +232,7 @@ h2.rorvswild-local-panel__request__name__title {
213
232
  border-bottom: 1px solid rgba(25, 32, 42, 1) !important;
214
233
  display: block !important;
215
234
  }
235
+
216
236
  .rorvswild-local-panel__request-details__section:hover {
217
237
  background: #212834 !important;
218
238
  -webkit-transition: all .3s !important;
@@ -227,31 +247,37 @@ h2.rorvswild-local-panel__request__name__title {
227
247
  -ms-flex-wrap: wrap !important;
228
248
  flex-wrap: wrap !important;
229
249
  }
250
+
230
251
  .rorvswild-local-panel__request-details__section__file {
231
252
  width: 100% !important;
232
253
  word-break: break-all !important;
233
254
  overflow-wrap: break-word !important;
234
255
  min-width: 0 !important;
235
256
  }
257
+
236
258
  .rorvswild-local-panel__request-details__section__average {
237
259
  color: #80abe3 !important;
238
260
  width: 48px !important;
239
261
  margin:0 12px 0 0 !important;
240
262
  }
263
+
241
264
  .rorvswild-local-panel__request-details__section__calls {
242
265
  color: #9fa9bb !important;
243
266
  width: 48px !important;
244
- margin:0 12px 0 0 !important;
267
+ margin: 0 12px 0 0 !important;
245
268
  }
269
+
246
270
  .rorvswild-local-panel__request-details__section__impact {
247
271
  width: 48px !important;
248
- margin:0 12px 0 0 !important;
272
+ margin: 0 12px 0 0 !important;
249
273
  }
274
+
250
275
  .rorvswild-local-panel__request-details__section__code {
251
276
  display: -webkit-box !important;
252
277
  display: -ms-flexbox !important;
253
278
  display: flex !important;
254
279
  }
280
+
255
281
  .rorvswild-local-panel__request-details__section__kind {
256
282
  background: rgba(25, 32, 42, 1) !important;
257
283
  font-size: 10px !important;
@@ -262,18 +288,15 @@ h2.rorvswild-local-panel__request__name__title {
262
288
  height: 24px !important;
263
289
  display: inline-block !important;
264
290
  }
291
+
265
292
  .rorvswild-local-panel__request-details__section__command {
266
- overflow: hidden !important;
267
293
  color: #9fa9bb !important;
268
- margin-left: 12px !important;
269
294
  -webkit-box-flex: 1 !important;
270
- -ms-flex: 1 !important;
271
- flex: 1 !important;
272
- opacity: .6 !important;
273
- }
274
-
275
- .rorvswild-local-panel__request-details__section:hover .rorvswild-local-panel__request-details__section__command {
276
- opacity: 1 !important;
295
+ -ms-flex: 1 !important;
296
+ flex: 1 !important;
297
+ margin-left: 12px !important;
298
+ opacity: 1;
299
+ overflow: hidden !important;
277
300
  }
278
301
 
279
302
  /* Panel Footer */
@@ -285,6 +308,7 @@ h2.rorvswild-local-panel__request__name__title {
285
308
  padding: 12px !important;
286
309
  text-align: center !important;
287
310
  }
311
+
288
312
  a.rorvswild-local-panel__footer__link {
289
313
  color: #eceef1 !important;
290
314
  text-decoration: underline !important;
@@ -296,33 +320,35 @@ a.rorvswild-local-panel__footer__link {
296
320
  @media screen and (min-width: 720px) {
297
321
  .rorvswild-local-panel__request-details__section__main {
298
322
  -ms-flex-wrap: nowrap !important;
299
- flex-wrap: nowrap !important;
323
+ flex-wrap: nowrap !important;
300
324
  }
301
325
 
302
326
  .rorvswild-local-panel__request__name {
303
327
  -webkit-box-flex: 1 !important;
304
- -ms-flex: 1 !important;
305
- flex: 1 !important;
328
+ -ms-flex: 1 !important;
329
+ flex: 1 !important;
306
330
  }
307
331
 
308
332
  .rorvswild-local-panel__request__runtime { margin-left: 12px !important; }
309
333
 
310
334
  .rorvswild-local-panel__request-details__section__file {
311
335
  -webkit-box-flex: 1 !important;
312
- -ms-flex: 1 !important;
313
- flex: 1 !important;
336
+ -ms-flex: 1 !important;
337
+ flex: 1 !important;
314
338
  }
315
339
 
316
340
  .rorvswild-local-panel__request-details__section__average {
317
341
  text-align: right !important;
318
- margin:0 0 0 12px !important;
342
+ margin: 0 0 0 12px !important;
319
343
  }
344
+
320
345
  .rorvswild-local-panel__request-details__section__calls {
321
346
  text-align: right !important;
322
- margin:0 0 0 12px !important;
347
+ margin: 0 0 0 12px !important;
323
348
  }
349
+
324
350
  .rorvswild-local-panel__request-details__section__impact {
325
351
  text-align: right !important;
326
- margin:0 0 0 12px !important;
352
+ margin: 0 0 0 12px !important;
327
353
  }
328
354
  }
@@ -25,9 +25,6 @@ http://prismjs.com/download.html?themes=prism-twilight&languages=markup+css+clik
25
25
  -ms-hyphens: none !important;
26
26
  hyphens: none !important;
27
27
 
28
- -webkit-filter: saturate(75%) !important; /* Safari 6.0 - 9.0 */
29
- filter: saturate(75%) !important;
30
-
31
28
  border-radius: 0 !important;
32
29
  border: 0 !important;
33
30
  box-shadow: 0 0 0 !important;
@@ -40,7 +37,6 @@ http://prismjs.com/download.html?themes=prism-twilight&languages=markup+css+clik
40
37
  background: transparent !important;
41
38
  }
42
39
 
43
-
44
40
  /* Text Selection colour */
45
41
  .rorvswild-local-panel pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
46
42
  .rorvswild-local-panel code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
@@ -66,7 +62,7 @@ http://prismjs.com/download.html?themes=prism-twilight&languages=markup+css+clik
66
62
  .rorvswild-local-panel .token.cdata {
67
63
  color: #9fa9bb !important;
68
64
  font-style: italic !important;
69
- opacity: 0.5 !important;
65
+ opacity: 0.7 !important;
70
66
  }
71
67
 
72
68
  .rorvswild-local-panel .token.punctuation {
@@ -89,7 +85,7 @@ http://prismjs.com/download.html?themes=prism-twilight&languages=markup+css+clik
89
85
  .rorvswild-local-panel .token.symbol,
90
86
  .rorvswild-local-panel .token.builtin,
91
87
  .rorvswild-local-panel .token.string {
92
- color: #67b6b2 !important;
88
+ color: #69b3c8 !important;
93
89
  }
94
90
 
95
91
  .rorvswild-local-panel .token.attr-name,
@@ -4,27 +4,31 @@ module RorVsWild
4
4
  def self.setup
5
5
  return if @installed
6
6
  return unless defined?(::ActionController::Base)
7
- ActiveSupport::Notifications.subscribe("process_action.action_controller", new)
7
+ ::ActionController::Base.around_action(&method(:around_action))
8
8
  ::ActionController::Base.rescue_from(StandardError) { |ex| RorVsWild::Plugin::ActionController.after_exception(ex, self) }
9
- @installed = true
10
- end
11
9
 
12
- def start(name, id, payload)
13
- controller_action = "#{payload[:controller]}##{payload[:action]}"
14
- if !RorVsWild.agent.ignored_request?(controller_action)
15
- section = RorVsWild::Section.start
16
- RorVsWild.agent.current_data[:name] = controller_action
17
- controller = payload[:headers]["action_controller.instance".freeze]
18
- method_name = controller.method_for_action(payload[:action])
19
- section.file, section.line = controller.method(method_name).source_location
20
- section.file = RorVsWild.agent.locator.relative_path(section.file)
21
- section.command = "#{controller.class}##{method_name}"
22
- section.kind = "code".freeze
10
+ if defined?(::ActionController::API) && ::ActionController::API.respond_to?(:around_action)
11
+ ::ActionController::API.around_action(&method(:around_action))
12
+ ::ActionController::API.rescue_from(StandardError) { |ex| RorVsWild::Plugin::ActionController.after_exception(ex, self) }
23
13
  end
14
+ @installed = true
24
15
  end
25
16
 
26
- def finish(name, id, payload)
27
- RorVsWild::Section.stop
17
+ def self.around_action(controller, block)
18
+ controller_action = "#{controller.class}##{controller.action_name}"
19
+ return block.call if RorVsWild.agent.ignored_request?(controller_action)
20
+ begin
21
+ RorVsWild::Section.start do |section|
22
+ method_name = controller.send(:method_for_action, controller.action_name)
23
+ section.file, section.line = controller.method(method_name).source_location
24
+ section.file = RorVsWild.agent.locator.relative_path(section.file)
25
+ section.command = "#{controller.class}##{method_name}"
26
+ RorVsWild.agent.current_data[:name] = controller_action
27
+ end
28
+ block.call
29
+ ensure
30
+ RorVsWild::Section.stop
31
+ end
28
32
  end
29
33
 
30
34
  def self.after_exception(exception, controller)
@@ -0,0 +1,31 @@
1
+ module RorVsWild
2
+ module Plugin
3
+ class Middleware
4
+ def self.setup
5
+ return if @installed
6
+ Rails.application.config.middleware.unshift(RorVsWild::Plugin::Middleware, nil) if defined?(Rails)
7
+ @installed = true
8
+ end
9
+
10
+ def initialize(app, config)
11
+ @app, @config = app, config
12
+ end
13
+
14
+ def call(env)
15
+ RorVsWild.agent.start_request
16
+ RorVsWild.agent.current_data[:path] = env["ORIGINAL_FULLPATH".freeze]
17
+ section = RorVsWild::Section.start
18
+ section.file, section.line = rails_engine_location
19
+ section.command = "Rails::Engine#call".freeze
20
+ @app.call(env)
21
+ ensure
22
+ RorVsWild::Section.stop
23
+ RorVsWild.agent.stop_request
24
+ end
25
+
26
+ def rails_engine_location
27
+ @rails_engine_location = ::Rails::Engine.instance_method(:call).source_location
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,3 @@
1
1
  module RorVsWild
2
- VERSION = "1.5.2".freeze
2
+ VERSION = "1.5.7".freeze
3
3
  end
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rorvswild
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.5.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexis Bernard
8
+ - Antoine Marguerie
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2020-04-25 00:00:00.000000000 Z
12
+ date: 2020-08-25 00:00:00.000000000 Z
12
13
  dependencies: []
13
- description: Performances and quality insights for rails developers.
14
+ description: Performances and errors insights for rails developers.
14
15
  email:
15
16
  - alexis@bernard.io
17
+ - antoine@basesecrete.com
16
18
  executables:
17
19
  - rorvswild-install
18
20
  extensions: []
@@ -39,7 +41,6 @@ files:
39
41
  - lib/rorvswild/local/stylesheet/vendor/prism.css
40
42
  - lib/rorvswild/locator.rb
41
43
  - lib/rorvswild/plugin/action_controller.rb
42
- - lib/rorvswild/plugin/action_dispatch.rb
43
44
  - lib/rorvswild/plugin/action_mailer.rb
44
45
  - lib/rorvswild/plugin/action_view.rb
45
46
  - lib/rorvswild/plugin/active_job.rb
@@ -47,6 +48,7 @@ files:
47
48
  - lib/rorvswild/plugin/delayed_job.rb
48
49
  - lib/rorvswild/plugin/elasticsearch.rb
49
50
  - lib/rorvswild/plugin/faktory.rb
51
+ - lib/rorvswild/plugin/middleware.rb
50
52
  - lib/rorvswild/plugin/mongo.rb
51
53
  - lib/rorvswild/plugin/net_http.rb
52
54
  - lib/rorvswild/plugin/redis.rb
@@ -79,5 +81,5 @@ requirements: []
79
81
  rubygems_version: 3.0.3
80
82
  signing_key:
81
83
  specification_version: 4
82
- summary: Ruby on Rails app monitoring
84
+ summary: Ruby on Rails applications monitoring
83
85
  test_files: []
@@ -1,27 +0,0 @@
1
- module RorVsWild
2
- module Plugin
3
- class ActionDispatch
4
- def self.setup
5
- return if @installed
6
- return unless defined?(::ActiveSupport::Notifications)
7
- ActiveSupport::Notifications.subscribe("request.action_dispatch", new)
8
- @installed = true
9
- end
10
-
11
- def start(name, id, payload)
12
- RorVsWild.agent.start_request
13
- RorVsWild.agent.current_data[:path] = payload[:request].original_fullpath
14
- @action_dispath_location ||= ::ActionDispatch::Executor.instance_method(:call).source_location
15
- section = RorVsWild::Section.start
16
- section.file, section.line = @action_dispath_location
17
- section.command = "ActionDispatch::Executor.#call".freeze
18
- section.kind = "code".freeze
19
- end
20
-
21
- def finish(name, id, payload)
22
- RorVsWild::Section.stop
23
- RorVsWild.agent.stop_request
24
- end
25
- end
26
- end
27
- end