raygun-apm-rails 0.1.6 → 0.1.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: 5bded6633ee12299036cbbc4335ab2d2332375299aa2746c507801791cc0b886
4
- data.tar.gz: 5e4e99d585dfe5e1b970c4857088ad2fec161f7935677e9b3545b947b7164ee6
3
+ metadata.gz: a2d31d0ad976f35bdac2a42c3ae4b0da985291ab2a36e60982de8e04e2d34e7c
4
+ data.tar.gz: 582ec4542445a59adc1f33e76353c667153cc5e7af889a8f34a55213ef6e4564
5
5
  SHA512:
6
- metadata.gz: 18a5b450114214cfb18be5de0091e5cf93ef8c59e0f5d37103d3e641b650e6855fac6c59668170b0b6b3888aa6d51d4f5c466912e050331c0f10f7ef7c1c2610
7
- data.tar.gz: 2439fa20850563b3be76f8ffab6c362250d452388cd309c8f5d6a0cd62261a56c9620a022a60bda54db405be97a5e41af6e8f2153206b2982d22a6ec068c23a4
6
+ metadata.gz: 757a3a0f926195c155aabaea9c29ee716b6d408d1c401440db9348fde89209c4bf919284752d715674ecd5b163b3f330706156aa215d2c8d5a167741a468bd41
7
+ data.tar.gz: e390eee50d733103fef5b025f6f8710689bf4235e956800ecd73791355e318452799eb43d87be4e825c11e1cc6768fa2c23b781614439c3a9d7d89053d112df7
@@ -29,7 +29,10 @@ module Raygun
29
29
  def instrument(env)
30
30
  res = nil
31
31
  # Can be nil if we had a fatal error
32
- @tracer.start_trace if @tracer
32
+ if @tracer
33
+ Thread.current[:_raygun_apm_tracer] = @tracer
34
+ @tracer.start_trace
35
+ end
33
36
  res = @app.call(env)
34
37
  # Can be nil if we had a fatal error
35
38
  @tracer.end_trace if @tracer
@@ -46,7 +49,7 @@ module Raygun
46
49
  # Shutdown the tracepoint if enabled to reduce any overhead and stall emission
47
50
  @tracer.tracepoint.stop if @tracer.tracepoint.enabled?
48
51
  # Let the GC clean up the sink thread through the finalizer below
49
- @tracer = nil
52
+ @tracer = Thread.current[:_raygun_apm_tracer] = nil
50
53
  end
51
54
 
52
55
  def http_in_handler(args)
@@ -56,20 +59,27 @@ module Raygun
56
59
  return
57
60
  end
58
61
  req = Rack::Request.new notification.payload[:headers].env
59
- @http_in_event ||= Raygun::Apm::Event::HttpIn.new
60
- @http_in_event[:url] = req.url
61
- @http_in_event[:verb] = req.request_method
62
- @http_in_event[:status] = notification.payload[:status]
62
+ event = http_in_event
63
+ event[:url] = req.url
64
+ event[:verb] = req.request_method
65
+ event[:status] = notification.payload[:status]
63
66
  # XXX constant milliseconds to microseconds
64
- @http_in_event[:duration] = notification.duration * 1000
65
- @http_in_event[:timestamp] = notification.time.to_f * 1000000
66
- @http_in_event[:pid] = Process.pid
67
- @http_in_event[:tid] = @tracer.get_thread_id(Thread.current)
68
- @tracer.emit(@http_in_event)
67
+ event[:duration] = notification.duration * 1000
68
+ event[:timestamp] = notification.time.to_f * 1000000
69
+ event[:tid] = @tracer.get_thread_id(Thread.current)
70
+ @tracer.emit(event)
69
71
  rescue => e
70
72
  warn "[Raygun APM] error reporting HTTP IN event"
71
73
  end
72
-
74
+
75
+ def http_in_event
76
+ @http_in_event ||= begin
77
+ event = Raygun::Apm::Event::HttpIn.new
78
+ event[:pid] = Process.pid
79
+ event
80
+ end
81
+ end
82
+
73
83
  def sql_handler(args)
74
84
  notification = ActiveSupport::Notifications::Event.new *args
75
85
  connection = if notification.payload[:connection]
@@ -77,26 +87,33 @@ module Raygun
77
87
  else
78
88
  ObjectSpace._id2ref(notification.payload[:connection_id])
79
89
  end
80
- @sql_event ||= Raygun::Apm::Event::Sql.new
81
- @sql_event[:query] = notification.payload[:sql]
90
+ event = sql_event
91
+ event[:query] = notification.payload[:sql]
82
92
 
83
93
  # XXX this is hacky
84
94
  if config = connection.instance_variable_get('@config')
85
- @sql_event[:provider] = config[:adapter]
86
- @sql_event[:host] = config[:host]
87
- @sql_event[:database] = config[:database]
95
+ event[:provider] = config[:adapter]
96
+ event[:host] = config[:host]
97
+ event[:database] = config[:database]
88
98
  end
89
99
 
90
100
  # XXX constant milliseconds to microseconds
91
- @sql_event[:duration] = notification.duration * 1000
92
- @sql_event[:timestamp] = notification.time.to_f * 1000000
93
- @sql_event[:pid] = Process.pid
94
- @sql_event[:tid] = @tracer.get_thread_id(Thread.current)
95
- @tracer.emit(@sql_event)
101
+ event[:duration] = notification.duration * 1000
102
+ event[:timestamp] = notification.time.to_f * 1000000
103
+ event[:tid] = @tracer.get_thread_id(Thread.current)
104
+ @tracer.emit(event)
96
105
  rescue => e
97
106
  warn "[Raygun APM] error reporting SQL event"
98
107
  end
99
-
108
+
109
+ def sql_event
110
+ @sql_event ||= begin
111
+ event = Raygun::Apm::Event::Sql.new
112
+ event[:pid] = Process.pid
113
+ event
114
+ end
115
+ end
116
+
100
117
  def self.finalize(tracer)
101
118
  proc {tracer.process_ended}
102
119
  end
@@ -3,11 +3,14 @@ module Raygun
3
3
  module Rails
4
4
  class Railtie < ::Rails::Railtie
5
5
  initializer "raygun.apm" do |app|
6
+ return if ENV['RAYGUN_SKIP_MIDDLEWARE']
6
7
  require "raygun/apm"
7
8
  require "raygun/apm/rails/middleware"
8
9
  Raygun::Apm::Blacklist.extend_with Raygun::Apm::Rails::BLACKLIST
9
10
  Raygun::Apm::Blacklist.extend_with Raygun::Apm::Rails::BOUNDARY
10
11
  app.middleware.insert_before Rack::Sendfile, Raygun::Apm::Rails::Middleware
12
+ # Explictly enable instrumenting HTTP until a good control API is figured out
13
+ require "raygun/apm/hooks/net_http"
11
14
  end
12
15
  end
13
16
  end
@@ -1,7 +1,7 @@
1
1
  module Raygun
2
2
  module Apm
3
3
  module Rails
4
- VERSION = "0.1.6"
4
+ VERSION = "0.1.7"
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: raygun-apm-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erkki Eilonen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-09 00:00:00.000000000 Z
11
+ date: 2019-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: raygun-apm