raygun-apm-rails 1.0.11 → 1.0.16

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7343414b67d3d4f27334368be9a0e12293ffb50e737e821f91149a32f9785e28
4
- data.tar.gz: 7767a300addc7517ca0f30fa4250dd83aa240ece8f0832daf59e4dde100d21e5
3
+ metadata.gz: 910685e3adfe69c88e8386cb97c52b39cfee2bea3d24749e8fab7c6a8a1103cf
4
+ data.tar.gz: b53ff2418459434687b85c3a09bef529bb326b6e01823945452baa5c32d71262
5
5
  SHA512:
6
- metadata.gz: 8f00178423b80f710f92a1fb97d3867c1c8a32d3b63cb0fb09143e9df33043e1d83ea5766c45380d90eca398886654ec6e37de8656c81c717022755360986621
7
- data.tar.gz: 658e2b8948f7622e1cd168be6a1bbfcb7e66efe80848d2cebd8028867a337fdd5c174a2db8c748010cebcd78745f2a1a4ad31a38cc1f3589197911da513c78d0
6
+ metadata.gz: 68661256cec7214dde186391a088d81e88ac4c978e6837b3eeeee2cd87b1b39b77fdc2aaa8e5a0fa85776d2c81ebc86d1a0f798fe6fff47120c19763b4add0f5
7
+ data.tar.gz: 4298329b5444c9ec7869a53a2ed111e92847b75eb0288edcd13e219eb0716bc8de5bf84edde6c7a55daba70be0b084f5fda5577937f90be4ed6f6cf991bc6e7d
@@ -60,6 +60,13 @@ module Raygun
60
60
  ConnectionPool
61
61
  CoffeeScript
62
62
  ApplicationRecord
63
+ Zeitwerk
64
+ SassC
65
+ Webpacker
66
+ DidYouMean
67
+ Nokogiri
68
+ Loofah
69
+ WebConsole
63
70
  +Raygun::Apm::Rails::Middleware::Ruby_APM_profiler_trace
64
71
  }
65
72
  end
@@ -4,7 +4,7 @@ module Raygun
4
4
  class Middleware
5
5
  def initialize(app)
6
6
  @app = app
7
- @tracer_initialized = nil
7
+ @tracer = nil
8
8
  end
9
9
 
10
10
  def call(env)
@@ -13,45 +13,52 @@ module Raygun
13
13
  end
14
14
 
15
15
  private
16
+
17
+ def instrument(env)
18
+ res = nil
19
+ # Can be nil if we had a fatal error
20
+ @tracer ||= init_tracer
21
+ if @tracer
22
+ # For the exceptional HTTP IN handler
23
+ @request_started = @tracer.now
24
+ Thread.current.thread_variable_set(:_raygun_apm_tracer, @tracer)
25
+ @tracer.start_trace
26
+ end
27
+ res = Ruby_APM_profiler_trace{ @app.call(env) }
28
+ if (status = res.first) >= 400 && status < 600
29
+ exceptional_http_in_handler(env, status)
30
+ end
31
+ # Can be nil if we had a fatal error
32
+ @tracer.end_trace if @tracer
33
+ res
34
+ rescue Raygun::Apm::FatalError => e
35
+ raygun_shutdown_handler(e)
36
+ end
16
37
 
17
- def initialize_tracer
38
+ def init_tracer
39
+ return @tracer if @tracer
18
40
  @tracer = Raygun::Apm::Tracer.new
19
41
  @tracer.udp_sink!
20
42
  @tracer.process_started
21
43
  ObjectSpace.define_finalizer(self, self.class.finalize(@tracer))
22
-
44
+
23
45
  @http_in_subscriber = ActiveSupport::Notifications.subscribe('process_action.action_controller') do |*args|
24
46
  http_in_handler(args)
25
47
  end
48
+
26
49
  @sql_subscriber = ActiveSupport::Notifications.subscribe('sql.active_record') do |*args|
27
50
  sql_handler(args)
28
51
  end
29
52
 
30
53
  GC.stress = true if ENV['RAYGUN_STRESS_GC']
31
-
54
+ @tracer
32
55
  # If any fatal errors on init, shutdown the tracer
33
56
  rescue Raygun::Apm::FatalError => e
34
57
  raygun_shutdown_handler(e)
35
58
  end
36
-
37
- def instrument(env)
38
- res = nil
39
- @tracer_initialized ||= initialize_tracer
40
- # Can be nil if we had a fatal error
41
- if @tracer
42
- Thread.current.thread_variable_set(:_raygun_apm_tracer, @tracer)
43
- @tracer.start_trace
44
- end
45
- res = Ruby_APM_profiler_trace{ @app.call(env) }
46
- # Can be nil if we had a fatal error
47
- @tracer.end_trace if @tracer
48
- res
49
- rescue Raygun::Apm::FatalError => e
50
- raygun_shutdown_handler(e)
51
- end
52
59
 
53
60
  def raygun_shutdown_handler(exception)
54
- warn "[Raygun APM] shutting down due to error - #{exception.message}",
61
+ warn "[Raygun APM] shutting down due to error - #{exception.message} #{exception.backtrace.join("\n")}",
55
62
  # Kill extended event subcriptions
56
63
  ActiveSupport::Notifications.unsubscribe(@http_in_subscriber)
57
64
  ActiveSupport::Notifications.unsubscribe(@sql_subscriber)
@@ -64,10 +71,6 @@ module Raygun
64
71
 
65
72
  def http_in_handler(args)
66
73
  notification = ActiveSupport::Notifications::Event.new *args
67
- if notification.payload[:exception]
68
- warn "[Raygun APM] exception in HTTP IN event: #{notification.payload[:exception]}"
69
- return
70
- end
71
74
  req = Rack::Request.new notification.payload[:headers].env
72
75
  event = http_in_event
73
76
  event[:url] = req.url
@@ -83,6 +86,22 @@ module Raygun
83
86
  raygun_shutdown_handler(e)
84
87
  end
85
88
 
89
+ # For middleware chain halts that does not trigger 'process_action.action_controller'
90
+ def exceptional_http_in_handler(env, status)
91
+ req = Rack::Request.new env
92
+ event = http_in_event
93
+ event[:url] = req.url
94
+ event[:verb] = req.request_method
95
+ event[:status] = status
96
+ event[:duration] = @tracer.now - @request_started
97
+ event[:timestamp] = @tracer.now
98
+ event[:tid] = @tracer.get_thread_id(Thread.current)
99
+ @tracer.emit(event)
100
+ rescue => e
101
+ warn "[Raygun APM] error reporting exceptional HTTP IN event"
102
+ raygun_shutdown_handler(e)
103
+ end
104
+
86
105
  def http_in_event
87
106
  @http_in_event ||= begin
88
107
  event = Raygun::Apm::Event::HttpIn.new
@@ -1,7 +1,7 @@
1
1
  module Raygun
2
2
  module Apm
3
3
  module Rails
4
- VERSION = "1.0.11"
4
+ VERSION = "1.0.16"
5
5
  end
6
6
  end
7
7
  end
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_dependency "raygun-apm", "~> 1.0.8"
23
+ spec.add_dependency "raygun-apm", "~> 1.0.15"
24
24
  spec.add_development_dependency "bundler", "~> 1.17"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
  spec.add_development_dependency "minitest", "~> 5.0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: raygun-apm-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.11
4
+ version: 1.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Raygun
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-03-03 00:00:00.000000000 Z
12
+ date: 2020-03-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: raygun-apm
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 1.0.8
20
+ version: 1.0.15
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 1.0.8
27
+ version: 1.0.15
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: bundler
30
30
  requirement: !ruby/object:Gem::Requirement