raygun-apm 1.0.63-universal-darwin → 1.0.71-universal-darwin

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: a4340ef4f5ce0820cf8fcf121cbde1ceb76c78ae15f70e8a1f582c0c2c2d3847
4
- data.tar.gz: 7e3916e253ed0ac7e172c53b70c6a7b28468d5d3d09af13a0b40ecb82d0ae040
3
+ metadata.gz: 23e2da114dcf59235d2cd37fcc565ddbfe9d2f794385c3795155ee13d8af69f1
4
+ data.tar.gz: 0ee6aa0d656636bf1dd0055aeba9de05b20a204c3726d8435b4c0393c1d70466
5
5
  SHA512:
6
- metadata.gz: 91b4d1ecfd080ab35508035477ad03b747c68b1dd9b71487adce64f2e4c8f58ecfeb424207e0165aa4edcbe18aff1365680cc8ddbcdc4dbb89f0aff4ea29e32d
7
- data.tar.gz: 61fbe012a58a1ded7e23d5a7fac0674e37310d5a1c2ef36039894f953ebd2ea0d83b3c946024caedfa845e6c3b1b7839588f1cc969e9238b44f42d4a5b0842fc
6
+ metadata.gz: cfd06e6c3ac6b570fa2f7ee301addb1ba88e8f2741afa7d1345255d5fc97d0af9344324bf05a0fcf01853f14f2d717921fc805bee10f64c80dd39138f77c1716
7
+ data.tar.gz: 3f89350b563c56dd1cc3032b7a10485fadb7dd28024f4e49bc6dfdaec52c9126d8fc5b46ca9a88914d563c345f8c9c23f354d7ce10e4b1250231c2eb54f6724a
@@ -3,5 +3,4 @@
3
3
  require "bundler/setup"
4
4
  require "raygun/apm"
5
5
 
6
- check = Raygun::Apm::Diagnostics.new
7
- check.verify_agent
6
+ tracer = Raygun::Apm::Tracer.new
@@ -18,8 +18,10 @@ require "raygun/apm/event"
18
18
  require "raygun/apm/hooks/internals"
19
19
  require "raygun/apm/hooks/net_http"
20
20
  # conditionally required - may not be bundled
21
- begin
22
- require "raygun/apm/hooks/httpclient"
23
- require "raygun/apm/hooks/excon"
24
- rescue LoadError
21
+ conditional_hooks = %w(httpclient excon mongodb)
22
+ conditional_hooks.each do |hook|
23
+ begin
24
+ require "raygun/apm/hooks/#{hook}"
25
+ rescue LoadError
26
+ end
25
27
  end
@@ -66,6 +66,10 @@ module Raygun
66
66
  Method#
67
67
  Module#
68
68
  Mutex#
69
+ +Thread::Mutex#synchronize
70
+ +Thread::Mutex#lock
71
+ +Thread::Mutex#unlock
72
+ +Thread::Mutex#sleep
69
73
  NameError#
70
74
  NilClass#
71
75
  NoMemoryError#
@@ -154,6 +158,8 @@ module Raygun
154
158
  FileUtils::
155
159
  TempFile#
156
160
  TempFile::
161
+ Logger#
162
+ Logger::
157
163
  }
158
164
 
159
165
  INTERNALS = %w{
@@ -246,6 +252,10 @@ module Raygun
246
252
  }
247
253
 
248
254
  QUERIES = %w{
255
+ #mongodb
256
+ Mongo
257
+ BSON
258
+ +Mongo::Operation::Executable#do_execute
249
259
  #redis
250
260
  Redis
251
261
  +Redis#auth
@@ -18,6 +18,9 @@ module Raygun
18
18
  "production" => Tracer::ENV_PRODUCTION
19
19
  }
20
20
 
21
+ DEFAULT_BLACKLIST_PATH_UNIX = "/usr/share/Raygun/Blacklist"
22
+ DEFAULT_BLACKLIST_PATH_WINDOWS = "C:\\ProgramData\\Raygun\\Blacklist"
23
+
21
24
  attr_accessor :env
22
25
  def initialize(env=ENV)
23
26
  @env = env
@@ -62,19 +65,18 @@ module Raygun
62
65
  config_var 'PROTON_FILE_IPC_FOLDER', as: String
63
66
  config_var 'PROTON_USE_MULTICAST', as: String, default: 'False'
64
67
  config_var 'PROTON_BATCH_IDLE_COUNTER', as: Integer, default: 500
68
+ ## New - Ruby profiler
69
+ config_var 'PROTON_UDP_HOST', as: String, default: UDP_SINK_HOST
70
+ config_var 'PROTON_UDP_PORT', as: Integer, default: UDP_SINK_PORT
65
71
 
66
- def udp_host
72
+ def proton_udp_host
67
73
  if proton_use_multicast == 'True'
68
74
  UDP_SINK_MULTICAST_HOST
69
75
  else
70
- UDP_SINK_HOST
76
+ env['PROTON_UDP_HOST'] ? env['PROTON_UDP_HOST'].to_s : UDP_SINK_HOST
71
77
  end
72
78
  end
73
79
 
74
- def udp_port
75
- UDP_SINK_PORT
76
- end
77
-
78
80
  def loglevel
79
81
  LOGLEVELS[proton_debug_loglevel] || raise(ArgumentError, "invalid log level")
80
82
  end
@@ -83,6 +85,13 @@ module Raygun
83
85
  environment = env['RACK_ENV'] || env['RAILS_ENV'] || 'production'
84
86
  ENVIRONMENTS[environment] || Tracer::ENV_PRODUCTION
85
87
  end
88
+
89
+ # Prefer what is set by PROTON_USER_OVERRIDES_FILE env
90
+ def blacklist_file
91
+ return proton_user_overrides_file if proton_user_overrides_file
92
+ path = Gem.win_platform? ? DEFAULT_BLACKLIST_PATH_WINDOWS : DEFAULT_BLACKLIST_PATH_UNIX
93
+ "#{File.join(path, proton_api_key)}.txt"
94
+ end
86
95
  end
87
96
  end
88
97
  end
@@ -5,7 +5,7 @@ module Raygun
5
5
  module Apm
6
6
  class Diagnostics
7
7
  AGENT_STATE_DOWN = "\nThe Raygun APM Agent appears to not be running on the current host.\nIf not already installed, please consult https://raygun.com/documentation/product-guides/apm/agent/downloads/\nOtherwise refer to https://raygun.com/documentation/product-guides/apm/agent/installation/ for starting the Agent."
8
- AGENT_STATE_UNKNOWN = "\nUnable to determine the state of the Raygun APM Agent."
8
+ AGENT_STATE_UNKNOWN = "\nThe Raygun APM Agent is reachable, but Unable to determine the state of the Agent at the moment."
9
9
  AGENT_STATE_UP_MISCONFIGURED = "\nThe Raygun APM Agent is running, but misconfigured.\nThe API Key needs to be set through the Raygun_ApiKey environment variable.\nThe API key can be found under 'Application Settings' in the Raygun UI"
10
10
  AGENT_STATE_UP_CONFIGURED = "\nThe Raygun APM Agent is configured properly!"
11
11
  AGENT_MINIMUM_VERSION_NOT_MET = "\nVersion #{Raygun::Apm::VERSION} of the Raygun APM Profiler requires a minimum Agent version #{Raygun::Apm::MINIMUM_AGENT_VERSION}\nPlease download the latest Agent from https://raygun.com/documentation/product-guides/apm/agent/downloads/"
@@ -4,6 +4,11 @@ module Raygun
4
4
  def inspect
5
5
  "#<#{self.class.name}:#{self.object_id}> length:#{self.length} pid:#{self[:pid]} tid:#{self[:tid]} timestamp:#{self[:timestamp]}"
6
6
  end
7
+ class ExceptionThrown < Event
8
+ def inspect
9
+ super + " class:#{self[:class_name]}"
10
+ end
11
+ end
7
12
  class ThreadStarted < Event
8
13
  def inspect
9
14
  super + " parent_tid:#{self[:parent_tid]}"
@@ -29,6 +34,11 @@ module Raygun
29
34
  super + " url:#{self[:url]} verb:#{self[:verb]} status:#{self[:status]} duration:#{self[:duration]}"
30
35
  end
31
36
  end
37
+ class Sql < Event
38
+ def inspect
39
+ super + " provider:#{self[:provider]} host:#{self[:host]} query:#{self[:query]} database:#{self[:database]} duration:#{self[:duration]}"
40
+ end
41
+ end
32
42
  class BeginTransaction < Event
33
43
  def inspect
34
44
  super + " api_key:#{self[:api_key]} technology_type:#{self[:technology_type]} process_type:#{self[:process_type]}"
@@ -1,3 +1,5 @@
1
+ require 'thread'
2
+
1
3
  module Raygun
2
4
  module Apm
3
5
  module Hooks
@@ -64,6 +66,24 @@ module Raygun
64
66
  super
65
67
  end
66
68
  end
69
+
70
+ module Mutex
71
+ def synchronize(*args)
72
+ super
73
+ end
74
+
75
+ def lock(*args)
76
+ super
77
+ end
78
+
79
+ def unlock(*args)
80
+ super
81
+ end
82
+
83
+ def sleep(*args)
84
+ super
85
+ end
86
+ end
67
87
  end
68
88
  end
69
89
  end
@@ -71,4 +91,5 @@ end
71
91
  Object.prepend Raygun::Apm::Hooks::Object
72
92
  IO.prepend Raygun::Apm::Hooks::IO
73
93
  Random.prepend Raygun::Apm::Hooks::Random
74
- Signal.prepend Raygun::Apm::Hooks::Signal
94
+ Signal.prepend Raygun::Apm::Hooks::Signal
95
+ Thread::Mutex.prepend Raygun::Apm::Hooks::Mutex
@@ -0,0 +1,45 @@
1
+ require 'mongo'
2
+
3
+ module Raygun
4
+ module Apm
5
+ module Hooks
6
+ module MongoDB
7
+ def do_execute(connection, client, options = {})
8
+ result = nil
9
+ if tracer = Raygun::Apm::Tracer.instance
10
+ started = tracer.now
11
+ result = super
12
+ ended = tracer.now
13
+ event = raygun_apm_sql_event
14
+ event[:pid] = Process.pid
15
+ event[:query] = raygun_format_query(connection)
16
+ event[:provider] = "mongodb"
17
+ event[:host] = connection.address.to_s
18
+ event[:database] = client.database.name
19
+ event[:duration] = ended - started
20
+ event[:timestamp] = started
21
+ event[:tid] = tracer.get_thread_id(Thread.current)
22
+ tracer.emit(event)
23
+ result
24
+ else
25
+ super
26
+ end
27
+ end
28
+
29
+ private
30
+ def raygun_format_query(connection)
31
+ payload = message(connection).payload
32
+ return "#{payload["database_name"]}.#{payload["command_name"]} #{payload["command"]}}"
33
+ end
34
+
35
+ def raygun_apm_sql_event
36
+ @_raygun_apm_sql_event ||= Raygun::Apm::Event::Sql.new
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ Mongo::Operation.constants.each do |operation|
44
+ Mongo::Operation.const_get(operation).prepend(Raygun::Apm::Hooks::MongoDB) rescue nil
45
+ end
@@ -36,8 +36,8 @@ module Raygun
36
36
  sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, Tracer::BATCH_PACKET_SIZE)
37
37
  self.udp_sink(
38
38
  socket: sock,
39
- host: config.udp_host,
40
- port: config.udp_port,
39
+ host: config.proton_udp_host,
40
+ port: config.proton_udp_port,
41
41
  receive_buffer_size: sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_RCVBUF).int
42
42
  )
43
43
  # Any fails here is kamikaze for the tracer
@@ -57,20 +57,23 @@ module Raygun
57
57
 
58
58
  def initialize_blacklist
59
59
  @blacklist_parser = Raygun::Apm::Blacklist::Parser.new(self)
60
- @blacklist = if @config.proton_user_overrides_file && File.exists?(@config.proton_user_overrides_file)
61
- File.readlines(@config.proton_user_overrides_file)
60
+ file = @config.blacklist_file
61
+ @blacklist = if file && File.exist?(file)
62
+ File.readlines(file)
62
63
  else
63
64
  []
64
65
  end
65
- # From file
66
- @blacklist_parser.add_filters @blacklist
67
66
  # Defaults
68
67
  @blacklist_parser.add_filters Raygun::Apm::Blacklist.resolve_entries
68
+ # From file
69
+ @blacklist_parser.add_filters @blacklist
69
70
  end
70
71
 
71
72
  def register_known_library_paths
72
73
  if defined?(Bundler)
73
- self.register_libraries Bundler.load.specs.map(&:full_gem_path).sort << RbConfig::CONFIG['rubylibdir']
74
+ libs = Bundler.load.specs.map(&:full_gem_path).sort << RbConfig::CONFIG['rubylibdir']
75
+ libs.delete(Dir.getwd)
76
+ self.register_libraries libs
74
77
  else
75
78
  self.register_libraries [RbConfig::CONFIG['rubylibdir']]
76
79
  end
@@ -1,6 +1,6 @@
1
1
  module Raygun
2
2
  module Apm
3
- VERSION = "1.0.63"
3
+ VERSION = "1.0.71"
4
4
  MINIMUM_AGENT_VERSION = "1.0.1190.0"
5
5
  end
6
6
  end
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
 
15
15
  spec.files = Dir['README.rdoc', 'raygun-apm.gemspec', 'lib/**/*', 'bin/**/*'].reject { |f| f.match(/raygun_ext\./) }
16
16
  spec.files += Dir['lib/raygun/**/{2}*/raygun_ext.*']
17
- spec.bindir = "exe"
17
+ spec.bindir = "bin"
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib", "ext"]
20
20
 
@@ -36,4 +36,5 @@ Gem::Specification.new do |spec|
36
36
  spec.add_development_dependency "excon", "~> 0.73.0"
37
37
  spec.add_development_dependency "httparty", "~> 0.18.0"
38
38
  spec.add_development_dependency "httpclient", "~> 2.8.3"
39
+ spec.add_development_dependency "mongoid", "~> 7.1.2"
39
40
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: raygun-apm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.63
4
+ version: 1.0.71
5
5
  platform: universal-darwin
6
6
  authors:
7
7
  - Raygun
8
8
  - Erkki Eilonen
9
9
  autorequire:
10
- bindir: exe
10
+ bindir: bin
11
11
  cert_chain: []
12
- date: 2020-08-06 00:00:00.000000000 Z
12
+ date: 2020-09-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: debase-ruby_core_source
@@ -193,6 +193,20 @@ dependencies:
193
193
  - - "~>"
194
194
  - !ruby/object:Gem::Version
195
195
  version: 2.8.3
196
+ - !ruby/object:Gem::Dependency
197
+ name: mongoid
198
+ requirement: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - "~>"
201
+ - !ruby/object:Gem::Version
202
+ version: 7.1.2
203
+ type: :development
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: 7.1.2
196
210
  description:
197
211
  email:
198
212
  - support@raygun.com
@@ -203,7 +217,7 @@ extra_rdoc_files: []
203
217
  files:
204
218
  - README.rdoc
205
219
  - bin/console
206
- - bin/diagnostics
220
+ - bin/raygun-diagnostics
207
221
  - bin/setup
208
222
  - ext/raygun/extconf.rb
209
223
  - lib/raygun/2.5/raygun_ext.bundle
@@ -219,6 +233,7 @@ files:
219
233
  - lib/raygun/apm/hooks/excon.rb
220
234
  - lib/raygun/apm/hooks/httpclient.rb
221
235
  - lib/raygun/apm/hooks/internals.rb
236
+ - lib/raygun/apm/hooks/mongodb.rb
222
237
  - lib/raygun/apm/hooks/net_http.rb
223
238
  - lib/raygun/apm/hooks/redis.rb
224
239
  - lib/raygun/apm/tracer.rb