raygun-apm 1.1.14-x86_64-linux → 1.1.15.pre2-x86_64-linux
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 +4 -4
- data/COPYING.rax +9 -9
- data/LICENSE +27 -27
- data/LICENSE.bipbuffer +24 -24
- data/README.rdoc +118 -118
- data/bin/console +14 -14
- data/bin/raygun-diagnostics +6 -6
- data/bin/setup +8 -8
- data/ext/raygun/extconf.rb +59 -58
- data/lib/raygun/2.5/raygun_ext.so +0 -0
- data/lib/raygun/2.6/raygun_ext.so +0 -0
- data/lib/raygun/2.7/raygun_ext.so +0 -0
- data/lib/raygun/3.0/raygun_ext.so +0 -0
- data/lib/raygun/3.1/raygun_ext.so +0 -0
- data/lib/raygun/apm/blacklist/parser.rb +49 -49
- data/lib/raygun/apm/blacklist/translator.rb +78 -78
- data/lib/raygun/apm/blacklist.rb +476 -476
- data/lib/raygun/apm/config.rb +106 -106
- data/lib/raygun/apm/diagnostics.rb +54 -54
- data/lib/raygun/apm/event.rb +48 -48
- data/lib/raygun/apm/hooks/excon.rb +36 -36
- data/lib/raygun/apm/hooks/httpclient.rb +43 -43
- data/lib/raygun/apm/hooks/internals.rb +95 -95
- data/lib/raygun/apm/hooks/mongodb.rb +45 -45
- data/lib/raygun/apm/hooks/net_http.rb +44 -44
- data/lib/raygun/apm/hooks/redis.rb +46 -46
- data/lib/raygun/apm/tracer.rb +131 -131
- data/lib/raygun/apm/version.rb +6 -6
- data/lib/raygun/apm.rb +18 -18
- data/lib/raygun/raygun_ext.so +0 -0
- data/raygun-apm.gemspec +40 -40
- metadata +4 -4
data/lib/raygun/apm/config.rb
CHANGED
@@ -1,106 +1,106 @@
|
|
1
|
-
module Raygun
|
2
|
-
module Apm
|
3
|
-
class Config
|
4
|
-
LOGLEVELS = {
|
5
|
-
"None" => Tracer::LOG_NONE,
|
6
|
-
"Info" => Tracer::LOG_INFO,
|
7
|
-
"Warning" => Tracer::LOG_WARNING,
|
8
|
-
"Error" => Tracer::LOG_ERROR,
|
9
|
-
"Verbose" => Tracer::LOG_VERBOSE,
|
10
|
-
"Debug" => Tracer::LOG_DEBUG,
|
11
|
-
"Everything" => Tracer::LOG_EVERYTHING,
|
12
|
-
# ruby profiler specific
|
13
|
-
"Blacklist" => Tracer::LOG_BLACKLIST
|
14
|
-
}
|
15
|
-
|
16
|
-
ENVIRONMENTS = {
|
17
|
-
"development" => Tracer::ENV_DEVELOPMENT,
|
18
|
-
"production" => Tracer::ENV_PRODUCTION
|
19
|
-
}
|
20
|
-
|
21
|
-
DEFAULT_BLACKLIST_PATH_UNIX = "/usr/share/Raygun/Blacklist"
|
22
|
-
DEFAULT_BLACKLIST_PATH_WINDOWS = "C:\\ProgramData\\Raygun\\Blacklist"
|
23
|
-
|
24
|
-
attr_accessor :env
|
25
|
-
def initialize(env=ENV)
|
26
|
-
@env = env
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.cast_to_boolean(x)
|
30
|
-
case x
|
31
|
-
when true, 'true', 'True', 1, '1' then true
|
32
|
-
else
|
33
|
-
false
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.config_var(attr, opts={}, &blk)
|
38
|
-
define_method attr.downcase do
|
39
|
-
val = if x = env[attr]
|
40
|
-
if opts[:as] == Integer
|
41
|
-
Integer(x)
|
42
|
-
elsif opts[:as] == String
|
43
|
-
x.to_s
|
44
|
-
elsif opts[:as] == :boolean
|
45
|
-
self.class.cast_to_boolean(x)
|
46
|
-
end
|
47
|
-
else
|
48
|
-
opts[:default]
|
49
|
-
end
|
50
|
-
blk ? blk.call(val) : val
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
# Initial constants for ProtonAgentTail.exe
|
55
|
-
UDP_SINK_HOST = TCP_SINK_HOST = TCP_MANAGEMENT_HOST = '127.0.0.1'
|
56
|
-
UDP_SINK_MULTICAST_HOST = '239.100.15.215'
|
57
|
-
UDP_SINK_PORT = TCP_SINK_PORT = 2799
|
58
|
-
TCP_MANAGEMENT_PORT = 2790
|
59
|
-
|
60
|
-
## Enumerate all PROTON_ constants
|
61
|
-
config_var 'PROTON_API_KEY', as: String, default: ''
|
62
|
-
config_var 'PROTON_DEBUG_LOGLEVEL', as: String, default: 'None'
|
63
|
-
config_var 'PROTON_USER_OVERRIDES_FILE', as: String
|
64
|
-
config_var 'PROTON_NETWORK_MODE', as: String, default: 'Udp'
|
65
|
-
config_var 'PROTON_FILE_IPC_FOLDER', as: String
|
66
|
-
config_var 'PROTON_USE_MULTICAST', as: String, default: 'False'
|
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
|
71
|
-
config_var 'PROTON_TCP_HOST', as: String, default: TCP_SINK_HOST
|
72
|
-
config_var 'PROTON_TCP_PORT', as: Integer, default: TCP_SINK_PORT
|
73
|
-
## Conditional hooks
|
74
|
-
config_var 'PROTON_HOOK_REDIS', as: :boolean, default: 'True'
|
75
|
-
config_var 'PROTON_HOOK_INTERNALS', as: :boolean, default: 'True'
|
76
|
-
|
77
|
-
def proton_udp_host
|
78
|
-
if proton_use_multicast == 'True'
|
79
|
-
UDP_SINK_MULTICAST_HOST
|
80
|
-
else
|
81
|
-
env['PROTON_UDP_HOST'] ? env['PROTON_UDP_HOST'].to_s : UDP_SINK_HOST
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def proton_tcp_host
|
86
|
-
env['PROTON_TCP_HOST'] ? env['PROTON_TCP_HOST'].to_s : TCP_SINK_HOST
|
87
|
-
end
|
88
|
-
|
89
|
-
def loglevel
|
90
|
-
LOGLEVELS[proton_debug_loglevel] || raise(ArgumentError, "invalid log level")
|
91
|
-
end
|
92
|
-
|
93
|
-
def environment
|
94
|
-
environment = env['RACK_ENV'] || env['RAILS_ENV'] || 'production'
|
95
|
-
ENVIRONMENTS[environment] || Tracer::ENV_PRODUCTION
|
96
|
-
end
|
97
|
-
|
98
|
-
# Prefer what is set by PROTON_USER_OVERRIDES_FILE env
|
99
|
-
def blacklist_file
|
100
|
-
return proton_user_overrides_file if proton_user_overrides_file
|
101
|
-
path = Gem.win_platform? ? DEFAULT_BLACKLIST_PATH_WINDOWS : DEFAULT_BLACKLIST_PATH_UNIX
|
102
|
-
"#{File.join(path, proton_api_key)}.txt"
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
1
|
+
module Raygun
|
2
|
+
module Apm
|
3
|
+
class Config
|
4
|
+
LOGLEVELS = {
|
5
|
+
"None" => Tracer::LOG_NONE,
|
6
|
+
"Info" => Tracer::LOG_INFO,
|
7
|
+
"Warning" => Tracer::LOG_WARNING,
|
8
|
+
"Error" => Tracer::LOG_ERROR,
|
9
|
+
"Verbose" => Tracer::LOG_VERBOSE,
|
10
|
+
"Debug" => Tracer::LOG_DEBUG,
|
11
|
+
"Everything" => Tracer::LOG_EVERYTHING,
|
12
|
+
# ruby profiler specific
|
13
|
+
"Blacklist" => Tracer::LOG_BLACKLIST
|
14
|
+
}
|
15
|
+
|
16
|
+
ENVIRONMENTS = {
|
17
|
+
"development" => Tracer::ENV_DEVELOPMENT,
|
18
|
+
"production" => Tracer::ENV_PRODUCTION
|
19
|
+
}
|
20
|
+
|
21
|
+
DEFAULT_BLACKLIST_PATH_UNIX = "/usr/share/Raygun/Blacklist"
|
22
|
+
DEFAULT_BLACKLIST_PATH_WINDOWS = "C:\\ProgramData\\Raygun\\Blacklist"
|
23
|
+
|
24
|
+
attr_accessor :env
|
25
|
+
def initialize(env=ENV)
|
26
|
+
@env = env
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.cast_to_boolean(x)
|
30
|
+
case x
|
31
|
+
when true, 'true', 'True', 1, '1' then true
|
32
|
+
else
|
33
|
+
false
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.config_var(attr, opts={}, &blk)
|
38
|
+
define_method attr.downcase do
|
39
|
+
val = if x = env[attr]
|
40
|
+
if opts[:as] == Integer
|
41
|
+
Integer(x)
|
42
|
+
elsif opts[:as] == String
|
43
|
+
x.to_s
|
44
|
+
elsif opts[:as] == :boolean
|
45
|
+
self.class.cast_to_boolean(x)
|
46
|
+
end
|
47
|
+
else
|
48
|
+
opts[:default]
|
49
|
+
end
|
50
|
+
blk ? blk.call(val) : val
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Initial constants for ProtonAgentTail.exe
|
55
|
+
UDP_SINK_HOST = TCP_SINK_HOST = TCP_MANAGEMENT_HOST = '127.0.0.1'
|
56
|
+
UDP_SINK_MULTICAST_HOST = '239.100.15.215'
|
57
|
+
UDP_SINK_PORT = TCP_SINK_PORT = 2799
|
58
|
+
TCP_MANAGEMENT_PORT = 2790
|
59
|
+
|
60
|
+
## Enumerate all PROTON_ constants
|
61
|
+
config_var 'PROTON_API_KEY', as: String, default: ''
|
62
|
+
config_var 'PROTON_DEBUG_LOGLEVEL', as: String, default: 'None'
|
63
|
+
config_var 'PROTON_USER_OVERRIDES_FILE', as: String
|
64
|
+
config_var 'PROTON_NETWORK_MODE', as: String, default: 'Udp'
|
65
|
+
config_var 'PROTON_FILE_IPC_FOLDER', as: String
|
66
|
+
config_var 'PROTON_USE_MULTICAST', as: String, default: 'False'
|
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
|
71
|
+
config_var 'PROTON_TCP_HOST', as: String, default: TCP_SINK_HOST
|
72
|
+
config_var 'PROTON_TCP_PORT', as: Integer, default: TCP_SINK_PORT
|
73
|
+
## Conditional hooks
|
74
|
+
config_var 'PROTON_HOOK_REDIS', as: :boolean, default: 'True'
|
75
|
+
config_var 'PROTON_HOOK_INTERNALS', as: :boolean, default: 'True'
|
76
|
+
|
77
|
+
def proton_udp_host
|
78
|
+
if proton_use_multicast == 'True'
|
79
|
+
UDP_SINK_MULTICAST_HOST
|
80
|
+
else
|
81
|
+
env['PROTON_UDP_HOST'] ? env['PROTON_UDP_HOST'].to_s : UDP_SINK_HOST
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def proton_tcp_host
|
86
|
+
env['PROTON_TCP_HOST'] ? env['PROTON_TCP_HOST'].to_s : TCP_SINK_HOST
|
87
|
+
end
|
88
|
+
|
89
|
+
def loglevel
|
90
|
+
LOGLEVELS[proton_debug_loglevel] || raise(ArgumentError, "invalid log level")
|
91
|
+
end
|
92
|
+
|
93
|
+
def environment
|
94
|
+
environment = env['RACK_ENV'] || env['RAILS_ENV'] || 'production'
|
95
|
+
ENVIRONMENTS[environment] || Tracer::ENV_PRODUCTION
|
96
|
+
end
|
97
|
+
|
98
|
+
# Prefer what is set by PROTON_USER_OVERRIDES_FILE env
|
99
|
+
def blacklist_file
|
100
|
+
return proton_user_overrides_file if proton_user_overrides_file
|
101
|
+
path = Gem.win_platform? ? DEFAULT_BLACKLIST_PATH_WINDOWS : DEFAULT_BLACKLIST_PATH_UNIX
|
102
|
+
"#{File.join(path, proton_api_key)}.txt"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -1,54 +1,54 @@
|
|
1
|
-
require "socket"
|
2
|
-
require "json"
|
3
|
-
|
4
|
-
module Raygun
|
5
|
-
module Apm
|
6
|
-
class Diagnostics
|
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 = "\nThe Raygun APM Agent is reachable, but Unable to determine the state of the Agent at the moment."
|
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
|
-
AGENT_STATE_UP_CONFIGURED = "\nThe Raygun APM Agent is configured properly!"
|
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/"
|
12
|
-
PROFILER_NOOPED = "Profiler loaded in noop mode and will be disabled due to the minimum Agent version not met"
|
13
|
-
|
14
|
-
def initialize(host: Apm::Config::TCP_MANAGEMENT_HOST, port: Apm::Config::TCP_MANAGEMENT_PORT)
|
15
|
-
@host = host
|
16
|
-
@port = port
|
17
|
-
end
|
18
|
-
|
19
|
-
def verify_agent(tracer)
|
20
|
-
socket.write "GetAgentInfo"
|
21
|
-
response = JSON.parse(socket.gets)
|
22
|
-
if minimum_agent_version_not_met?(response['Version'])
|
23
|
-
puts AGENT_MINIMUM_VERSION_NOT_MET
|
24
|
-
tracer.noop!
|
25
|
-
puts PROFILER_NOOPED
|
26
|
-
else
|
27
|
-
if response['Status'] == 1
|
28
|
-
puts AGENT_STATE_UP_CONFIGURED
|
29
|
-
elsif response['Status'] == 0
|
30
|
-
puts AGENT_STATE_UP_MISCONFIGURED
|
31
|
-
end
|
32
|
-
end
|
33
|
-
rescue Errno::ECONNREFUSED
|
34
|
-
puts AGENT_STATE_DOWN
|
35
|
-
rescue
|
36
|
-
puts AGENT_STATE_UNKNOWN
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
def socket
|
41
|
-
@socket ||= s = TCPSocket.new(@host, @port)
|
42
|
-
end
|
43
|
-
|
44
|
-
def minimum_agent_version_not_met?(version)
|
45
|
-
# Legacy path
|
46
|
-
if String === version
|
47
|
-
version < Raygun::Apm::MINIMUM_AGENT_VERSION
|
48
|
-
else
|
49
|
-
"#{version['Major']}.#{version['Minor']}.#{version['Build']}.#{version['Revision']}" < Raygun::Apm::MINIMUM_AGENT_VERSION
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
1
|
+
require "socket"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
module Raygun
|
5
|
+
module Apm
|
6
|
+
class Diagnostics
|
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 = "\nThe Raygun APM Agent is reachable, but Unable to determine the state of the Agent at the moment."
|
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
|
+
AGENT_STATE_UP_CONFIGURED = "\nThe Raygun APM Agent is configured properly!"
|
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/"
|
12
|
+
PROFILER_NOOPED = "Profiler loaded in noop mode and will be disabled due to the minimum Agent version not met"
|
13
|
+
|
14
|
+
def initialize(host: Apm::Config::TCP_MANAGEMENT_HOST, port: Apm::Config::TCP_MANAGEMENT_PORT)
|
15
|
+
@host = host
|
16
|
+
@port = port
|
17
|
+
end
|
18
|
+
|
19
|
+
def verify_agent(tracer)
|
20
|
+
socket.write "GetAgentInfo"
|
21
|
+
response = JSON.parse(socket.gets)
|
22
|
+
if minimum_agent_version_not_met?(response['Version'])
|
23
|
+
puts AGENT_MINIMUM_VERSION_NOT_MET
|
24
|
+
tracer.noop!
|
25
|
+
puts PROFILER_NOOPED
|
26
|
+
else
|
27
|
+
if response['Status'] == 1
|
28
|
+
puts AGENT_STATE_UP_CONFIGURED
|
29
|
+
elsif response['Status'] == 0
|
30
|
+
puts AGENT_STATE_UP_MISCONFIGURED
|
31
|
+
end
|
32
|
+
end
|
33
|
+
rescue Errno::ECONNREFUSED
|
34
|
+
puts AGENT_STATE_DOWN
|
35
|
+
rescue
|
36
|
+
puts AGENT_STATE_UNKNOWN
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
def socket
|
41
|
+
@socket ||= s = TCPSocket.new(@host, @port)
|
42
|
+
end
|
43
|
+
|
44
|
+
def minimum_agent_version_not_met?(version)
|
45
|
+
# Legacy path
|
46
|
+
if String === version
|
47
|
+
version < Raygun::Apm::MINIMUM_AGENT_VERSION
|
48
|
+
else
|
49
|
+
"#{version['Major']}.#{version['Minor']}.#{version['Build']}.#{version['Revision']}" < Raygun::Apm::MINIMUM_AGENT_VERSION
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/raygun/apm/event.rb
CHANGED
@@ -1,49 +1,49 @@
|
|
1
|
-
module Raygun
|
2
|
-
module Apm
|
3
|
-
class Event
|
4
|
-
def inspect
|
5
|
-
"#<#{self.class.name}:#{self.object_id}> length:#{self.length} pid:#{self[:pid]} tid:#{self[:tid]} timestamp:#{self[:timestamp]}"
|
6
|
-
end
|
7
|
-
class ExceptionThrown < Event
|
8
|
-
def inspect
|
9
|
-
super + " class:#{self[:class_name]}"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
class ThreadStarted < Event
|
13
|
-
def inspect
|
14
|
-
super + " parent_tid:#{self[:parent_tid]}"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
class Begin < Event
|
18
|
-
def inspect
|
19
|
-
super + " function_id:#{self[:function_id]} instance_id:#{self[:instance_id]}"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
class End < Event
|
23
|
-
def inspect
|
24
|
-
super + " function_id:#{self[:function_id]}"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
class Methodinfo < Event
|
28
|
-
def inspect
|
29
|
-
super + " function_id:#{self[:function_id]} class_name:#{self[:class_name]} method_name:#{self[:method_name]} method_source:#{self[:method_source]}"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
class HttpOut < Event
|
33
|
-
def inspect
|
34
|
-
super + " url:#{self[:url]} verb:#{self[:verb]} status:#{self[:status]} duration:#{self[:duration]}"
|
35
|
-
end
|
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
|
42
|
-
class BeginTransaction < Event
|
43
|
-
def inspect
|
44
|
-
super + " api_key:#{self[:api_key]} technology_type:#{self[:technology_type]} process_type:#{self[:process_type]}"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
1
|
+
module Raygun
|
2
|
+
module Apm
|
3
|
+
class Event
|
4
|
+
def inspect
|
5
|
+
"#<#{self.class.name}:#{self.object_id}> length:#{self.length} pid:#{self[:pid]} tid:#{self[:tid]} timestamp:#{self[:timestamp]}"
|
6
|
+
end
|
7
|
+
class ExceptionThrown < Event
|
8
|
+
def inspect
|
9
|
+
super + " class:#{self[:class_name]}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
class ThreadStarted < Event
|
13
|
+
def inspect
|
14
|
+
super + " parent_tid:#{self[:parent_tid]}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
class Begin < Event
|
18
|
+
def inspect
|
19
|
+
super + " function_id:#{self[:function_id]} instance_id:#{self[:instance_id]}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
class End < Event
|
23
|
+
def inspect
|
24
|
+
super + " function_id:#{self[:function_id]}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
class Methodinfo < Event
|
28
|
+
def inspect
|
29
|
+
super + " function_id:#{self[:function_id]} class_name:#{self[:class_name]} method_name:#{self[:method_name]} method_source:#{self[:method_source]}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
class HttpOut < Event
|
33
|
+
def inspect
|
34
|
+
super + " url:#{self[:url]} verb:#{self[:verb]} status:#{self[:status]} duration:#{self[:duration]}"
|
35
|
+
end
|
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
|
42
|
+
class BeginTransaction < Event
|
43
|
+
def inspect
|
44
|
+
super + " api_key:#{self[:api_key]} technology_type:#{self[:technology_type]} process_type:#{self[:process_type]}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
49
|
end
|
@@ -1,36 +1,36 @@
|
|
1
|
-
require 'excon'
|
2
|
-
|
3
|
-
module Raygun
|
4
|
-
module Apm
|
5
|
-
module Hooks
|
6
|
-
module Excon
|
7
|
-
def request(params={}, &block)
|
8
|
-
if tracer = Raygun::Apm::Tracer.instance
|
9
|
-
started = tracer.now
|
10
|
-
response = super
|
11
|
-
ended = tracer.now
|
12
|
-
event = raygun_apm_http_out_event
|
13
|
-
event[:pid] = Process.pid
|
14
|
-
event[:url] = "#{@data[:scheme]}://#{@data[:host]}/#{params[:path]}"
|
15
|
-
event[:verb] = params[:method].to_s.upcase
|
16
|
-
event[:status] = response.status
|
17
|
-
event[:duration] = ended - started
|
18
|
-
event[:timestamp] = started
|
19
|
-
event[:tid] = tracer.get_thread_id(Thread.current)
|
20
|
-
tracer.emit(event)
|
21
|
-
response
|
22
|
-
else
|
23
|
-
super
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
def raygun_apm_http_out_event
|
29
|
-
@_raygun_apm_http_out_event ||= Raygun::Apm::Event::HttpOut.new
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
Raygun::Apm::Tracer.patch(Excon::Connection, Raygun::Apm::Hooks::Excon)
|
1
|
+
require 'excon'
|
2
|
+
|
3
|
+
module Raygun
|
4
|
+
module Apm
|
5
|
+
module Hooks
|
6
|
+
module Excon
|
7
|
+
def request(params={}, &block)
|
8
|
+
if tracer = Raygun::Apm::Tracer.instance
|
9
|
+
started = tracer.now
|
10
|
+
response = super
|
11
|
+
ended = tracer.now
|
12
|
+
event = raygun_apm_http_out_event
|
13
|
+
event[:pid] = Process.pid
|
14
|
+
event[:url] = "#{@data[:scheme]}://#{@data[:host]}/#{params[:path]}"
|
15
|
+
event[:verb] = params[:method].to_s.upcase
|
16
|
+
event[:status] = response.status
|
17
|
+
event[:duration] = ended - started
|
18
|
+
event[:timestamp] = started
|
19
|
+
event[:tid] = tracer.get_thread_id(Thread.current)
|
20
|
+
tracer.emit(event)
|
21
|
+
response
|
22
|
+
else
|
23
|
+
super
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
def raygun_apm_http_out_event
|
29
|
+
@_raygun_apm_http_out_event ||= Raygun::Apm::Event::HttpOut.new
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Raygun::Apm::Tracer.patch(Excon::Connection, Raygun::Apm::Hooks::Excon)
|
@@ -1,43 +1,43 @@
|
|
1
|
-
require 'httpclient'
|
2
|
-
|
3
|
-
module Raygun
|
4
|
-
module Apm
|
5
|
-
module Hooks
|
6
|
-
module HTTPClient
|
7
|
-
private
|
8
|
-
|
9
|
-
def do_request(method, uri, query, body, header, &filtered_block)
|
10
|
-
if tracer = Raygun::Apm::Tracer.instance
|
11
|
-
started = tracer.now
|
12
|
-
response = super
|
13
|
-
ended = tracer.now
|
14
|
-
event = raygun_apm_http_out_event
|
15
|
-
event[:pid] = Process.pid
|
16
|
-
event[:url] = raygun_apm_url(uri, query)
|
17
|
-
event[:verb] = method.to_s.upcase
|
18
|
-
event[:status] = response.code.to_i
|
19
|
-
event[:duration] = ended - started
|
20
|
-
event[:timestamp] = started
|
21
|
-
event[:tid] = tracer.get_thread_id(Thread.current)
|
22
|
-
tracer.emit(event)
|
23
|
-
response
|
24
|
-
else
|
25
|
-
super
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def raygun_apm_url(uri, query)
|
30
|
-
uri = uri.to_param if uri.respond_to?(:to_param)
|
31
|
-
query = query.to_param if query.respond_to?(:to_param)
|
32
|
-
query && uri ? URI.join(uri, query).to_s : uri.to_s
|
33
|
-
end
|
34
|
-
|
35
|
-
def raygun_apm_http_out_event
|
36
|
-
@_raygun_apm_http_out_event ||= Raygun::Apm::Event::HttpOut.new
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
Raygun::Apm::Tracer.patch(HTTPClient, Raygun::Apm::Hooks::HTTPClient)
|
1
|
+
require 'httpclient'
|
2
|
+
|
3
|
+
module Raygun
|
4
|
+
module Apm
|
5
|
+
module Hooks
|
6
|
+
module HTTPClient
|
7
|
+
private
|
8
|
+
|
9
|
+
def do_request(method, uri, query, body, header, &filtered_block)
|
10
|
+
if tracer = Raygun::Apm::Tracer.instance
|
11
|
+
started = tracer.now
|
12
|
+
response = super
|
13
|
+
ended = tracer.now
|
14
|
+
event = raygun_apm_http_out_event
|
15
|
+
event[:pid] = Process.pid
|
16
|
+
event[:url] = raygun_apm_url(uri, query)
|
17
|
+
event[:verb] = method.to_s.upcase
|
18
|
+
event[:status] = response.code.to_i
|
19
|
+
event[:duration] = ended - started
|
20
|
+
event[:timestamp] = started
|
21
|
+
event[:tid] = tracer.get_thread_id(Thread.current)
|
22
|
+
tracer.emit(event)
|
23
|
+
response
|
24
|
+
else
|
25
|
+
super
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def raygun_apm_url(uri, query)
|
30
|
+
uri = uri.to_param if uri.respond_to?(:to_param)
|
31
|
+
query = query.to_param if query.respond_to?(:to_param)
|
32
|
+
query && uri ? URI.join(uri, query).to_s : uri.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
def raygun_apm_http_out_event
|
36
|
+
@_raygun_apm_http_out_event ||= Raygun::Apm::Event::HttpOut.new
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
Raygun::Apm::Tracer.patch(HTTPClient, Raygun::Apm::Hooks::HTTPClient)
|