appsignal 2.1.0.alpha.3 → 2.1.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +43 -0
- data/.rubocop_todo.yml +289 -0
- data/.travis.yml +4 -0
- data/CHANGELOG.md +11 -1
- data/Gemfile +1 -1
- data/LICENSE +1 -1
- data/appsignal.gemspec +1 -0
- data/bin/appsignal +2 -2
- data/ext/agent.yml +11 -11
- data/ext/extconf.rb +33 -33
- data/gemfiles/rails-4.2.gemfile +4 -0
- data/gemfiles/resque.gemfile +4 -0
- data/lib/appsignal.rb +58 -54
- data/lib/appsignal/auth_check.rb +15 -16
- data/lib/appsignal/capistrano.rb +4 -4
- data/lib/appsignal/cli.rb +28 -28
- data/lib/appsignal/cli/diagnose.rb +11 -11
- data/lib/appsignal/cli/helpers.rb +1 -1
- data/lib/appsignal/cli/install.rb +38 -38
- data/lib/appsignal/cli/notify_of_deploy.rb +1 -1
- data/lib/appsignal/config.rb +73 -71
- data/lib/appsignal/event_formatter.rb +8 -8
- data/lib/appsignal/event_formatter/action_view/render_formatter.rb +4 -4
- data/lib/appsignal/event_formatter/active_record/instantiation_formatter.rb +1 -1
- data/lib/appsignal/event_formatter/active_record/sql_formatter.rb +1 -1
- data/lib/appsignal/event_formatter/elastic_search/search_formatter.rb +9 -7
- data/lib/appsignal/event_formatter/faraday/request_formatter.rb +1 -1
- data/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter.rb +6 -6
- data/lib/appsignal/event_formatter/moped/query_formatter.rb +56 -43
- data/lib/appsignal/extension.rb +5 -5
- data/lib/appsignal/hooks.rb +28 -26
- data/lib/appsignal/hooks/active_support_notifications.rb +2 -2
- data/lib/appsignal/hooks/celluloid.rb +1 -1
- data/lib/appsignal/hooks/data_mapper.rb +2 -2
- data/lib/appsignal/hooks/delayed_job.rb +1 -1
- data/lib/appsignal/hooks/mongo_ruby_driver.rb +1 -1
- data/lib/appsignal/hooks/net_http.rb +4 -4
- data/lib/appsignal/hooks/passenger.rb +2 -2
- data/lib/appsignal/hooks/puma.rb +4 -4
- data/lib/appsignal/hooks/rake.rb +1 -1
- data/lib/appsignal/hooks/redis.rb +1 -1
- data/lib/appsignal/hooks/sequel.rb +2 -2
- data/lib/appsignal/hooks/shoryuken.rb +8 -8
- data/lib/appsignal/hooks/sidekiq.rb +16 -15
- data/lib/appsignal/hooks/unicorn.rb +1 -1
- data/lib/appsignal/hooks/webmachine.rb +1 -1
- data/lib/appsignal/integrations/capistrano/capistrano_2_tasks.rb +6 -6
- data/lib/appsignal/integrations/data_mapper.rb +2 -3
- data/lib/appsignal/integrations/delayed_job_plugin.rb +5 -5
- data/lib/appsignal/integrations/mongo_ruby_driver.rb +6 -6
- data/lib/appsignal/integrations/padrino.rb +8 -8
- data/lib/appsignal/integrations/railtie.rb +5 -5
- data/lib/appsignal/integrations/resque.rb +4 -5
- data/lib/appsignal/integrations/resque_active_job.rb +3 -6
- data/lib/appsignal/integrations/sinatra.rb +2 -2
- data/lib/appsignal/integrations/webmachine.rb +2 -3
- data/lib/appsignal/js_exception_transaction.rb +10 -10
- data/lib/appsignal/marker.rb +3 -3
- data/lib/appsignal/rack/generic_instrumentation.rb +10 -9
- data/lib/appsignal/rack/js_exception_catcher.rb +7 -6
- data/lib/appsignal/rack/rails_instrumentation.rb +9 -8
- data/lib/appsignal/rack/sinatra_instrumentation.rb +19 -17
- data/lib/appsignal/rack/streaming_listener.rb +9 -8
- data/lib/appsignal/system.rb +19 -17
- data/lib/appsignal/transaction.rb +97 -40
- data/lib/appsignal/transmitter.rb +23 -30
- data/lib/appsignal/utils.rb +3 -3
- data/lib/appsignal/utils/params_sanitizer.rb +1 -1
- data/lib/appsignal/utils/query_params_sanitizer.rb +1 -1
- data/lib/appsignal/version.rb +2 -2
- data/spec/.rubocop.yml +4 -0
- data/spec/lib/appsignal/auth_check_spec.rb +7 -7
- data/spec/lib/appsignal/capistrano2_spec.rb +41 -41
- data/spec/lib/appsignal/capistrano3_spec.rb +43 -44
- data/spec/lib/appsignal/cli/notify_of_deploy_spec.rb +9 -11
- data/spec/lib/appsignal/cli_spec.rb +9 -9
- data/spec/lib/appsignal/config_spec.rb +88 -86
- data/spec/lib/appsignal/event_formatter/action_view/render_formatter_spec.rb +9 -9
- data/spec/lib/appsignal/event_formatter/active_record/instantiation_formatter_spec.rb +4 -4
- data/spec/lib/appsignal/event_formatter/active_record/sql_formatter_spec.rb +4 -4
- data/spec/lib/appsignal/event_formatter/elastic_search/search_formatter_spec.rb +12 -12
- data/spec/lib/appsignal/event_formatter/faraday/request_formatter_spec.rb +4 -4
- data/spec/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter_spec.rb +23 -23
- data/spec/lib/appsignal/event_formatter/moped/query_formatter_spec.rb +29 -30
- data/spec/lib/appsignal/event_formatter_spec.rb +28 -28
- data/spec/lib/appsignal/extension_spec.rb +15 -15
- data/spec/lib/appsignal/garbage_collection_profiler_spec.rb +6 -5
- data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +12 -12
- data/spec/lib/appsignal/hooks/delayed_job_spec.rb +34 -34
- data/spec/lib/appsignal/hooks/mongo_ruby_driver_spec.rb +3 -3
- data/spec/lib/appsignal/hooks/net_http_spec.rb +10 -10
- data/spec/lib/appsignal/hooks/rake_spec.rb +7 -7
- data/spec/lib/appsignal/hooks/redis_spec.rb +6 -6
- data/spec/lib/appsignal/hooks/shoryuken_spec.rb +21 -22
- data/spec/lib/appsignal/hooks/sidekiq_spec.rb +48 -45
- data/spec/lib/appsignal/hooks/webmachine_spec.rb +2 -2
- data/spec/lib/appsignal/hooks_spec.rb +16 -17
- data/spec/lib/appsignal/integrations/data_mapper_spec.rb +7 -8
- data/spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb +19 -19
- data/spec/lib/appsignal/integrations/object_spec.rb +3 -3
- data/spec/lib/appsignal/integrations/padrino_spec.rb +44 -44
- data/spec/lib/appsignal/integrations/railtie_spec.rb +13 -13
- data/spec/lib/appsignal/integrations/resque_active_job_spec.rb +7 -7
- data/spec/lib/appsignal/integrations/resque_spec.rb +8 -8
- data/spec/lib/appsignal/integrations/sinatra_spec.rb +7 -7
- data/spec/lib/appsignal/integrations/webmachine_spec.rb +15 -15
- data/spec/lib/appsignal/js_exception_transaction_spec.rb +23 -23
- data/spec/lib/appsignal/marker_spec.rb +8 -8
- data/spec/lib/appsignal/minutely_spec.rb +6 -6
- data/spec/lib/appsignal/rack/generic_instrumentation_spec.rb +7 -7
- data/spec/lib/appsignal/rack/js_exception_catcher_spec.rb +13 -13
- data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +11 -11
- data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +21 -21
- data/spec/lib/appsignal/rack/streaming_listener_spec.rb +36 -36
- data/spec/lib/appsignal/system/container_spec.rb +1 -1
- data/spec/lib/appsignal/transaction_spec.rb +213 -184
- data/spec/lib/appsignal/transmitter_spec.rb +20 -20
- data/spec/lib/appsignal/utils/params_sanitizer_spec.rb +19 -19
- data/spec/lib/appsignal/utils/query_params_sanitizer_spec.rb +41 -41
- data/spec/lib/appsignal/utils_spec.rb +41 -37
- data/spec/lib/appsignal_spec.rb +150 -142
- data/spec/spec_helper.rb +18 -18
- data/spec/support/delegate_matcher.rb +6 -6
- data/spec/support/helpers/api_request_helper.rb +2 -2
- data/spec/support/helpers/config_helpers.rb +3 -3
- data/spec/support/helpers/dependency_helper.rb +13 -13
- data/spec/support/helpers/directory_helper.rb +5 -5
- data/spec/support/helpers/env_helpers.rb +14 -14
- data/spec/support/helpers/system_helpers.rb +3 -3
- data/spec/support/helpers/transaction_helpers.rb +10 -10
- metadata +20 -2
@@ -18,18 +18,18 @@ module Appsignal
|
|
18
18
|
@@formatter_classes ||= {}
|
19
19
|
end
|
20
20
|
|
21
|
-
def register(name, formatter=self)
|
21
|
+
def register(name, formatter = self)
|
22
22
|
formatter_classes[name] = formatter
|
23
23
|
end
|
24
24
|
|
25
|
-
def unregister(name, formatter=self)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
def unregister(name, formatter = self)
|
26
|
+
return unless formatter_classes[name] == formatter
|
27
|
+
|
28
|
+
formatter_classes.delete(name)
|
29
|
+
formatters.delete(name)
|
30
30
|
end
|
31
31
|
|
32
|
-
def registered?(name, klass=nil)
|
32
|
+
def registered?(name, klass = nil)
|
33
33
|
if klass
|
34
34
|
formatter_classes[name] == klass
|
35
35
|
else
|
@@ -65,6 +65,6 @@ module Appsignal
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
Dir.glob(File.expand_path(
|
68
|
+
Dir.glob(File.expand_path("../event_formatter/**/*.rb", __FILE__)).each do |file|
|
69
69
|
require file
|
70
70
|
end
|
@@ -2,15 +2,15 @@ module Appsignal
|
|
2
2
|
class EventFormatter
|
3
3
|
module ActionView
|
4
4
|
class RenderFormatter < Appsignal::EventFormatter
|
5
|
-
register
|
6
|
-
register
|
5
|
+
register "render_partial.action_view"
|
6
|
+
register "render_template.action_view"
|
7
7
|
|
8
|
-
BLANK =
|
8
|
+
BLANK = "".freeze
|
9
9
|
|
10
10
|
attr_reader :root_path
|
11
11
|
|
12
12
|
def initialize
|
13
|
-
@root_path = "#{Rails.root
|
13
|
+
@root_path = "#{Rails.root}/".freeze
|
14
14
|
end
|
15
15
|
|
16
16
|
def format(payload)
|
@@ -2,7 +2,7 @@ module Appsignal
|
|
2
2
|
class EventFormatter
|
3
3
|
module ElasticSearch
|
4
4
|
class SearchFormatter < Appsignal::EventFormatter
|
5
|
-
register
|
5
|
+
register "search.elasticsearch"
|
6
6
|
|
7
7
|
def format(payload)
|
8
8
|
[
|
@@ -12,14 +12,16 @@ module Appsignal
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def sanitized_search(search)
|
15
|
-
return
|
15
|
+
return unless search.is_a?(Hash)
|
16
|
+
|
16
17
|
{}.tap do |hsh|
|
17
18
|
search.each do |key, val|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
hsh[key] =
|
20
|
+
if [:index, :type].include?(key)
|
21
|
+
val
|
22
|
+
else
|
23
|
+
Appsignal::Utils::QueryParamsSanitizer.sanitize(val)
|
24
|
+
end
|
23
25
|
end
|
24
26
|
end
|
25
27
|
end
|
@@ -57,7 +57,7 @@ module Appsignal
|
|
57
57
|
|
58
58
|
{}.tap do |hsh|
|
59
59
|
command.each do |key, val|
|
60
|
-
hsh[key] =
|
60
|
+
hsh[key] = apply_strategy(strategies[key], val)
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
@@ -66,20 +66,20 @@ module Appsignal
|
|
66
66
|
def self.apply_strategy(strategy, val)
|
67
67
|
case strategy
|
68
68
|
when :allow then val
|
69
|
-
when :deny then
|
70
|
-
when :deny_array then
|
69
|
+
when :deny then "?"
|
70
|
+
when :deny_array then "[?]"
|
71
71
|
when :sanitize_document
|
72
72
|
Appsignal::Utils::QueryParamsSanitizer.sanitize(val, true, :mongodb)
|
73
73
|
when :sanitize_bulk
|
74
74
|
if val.length > 1
|
75
75
|
[
|
76
|
-
|
76
|
+
format(:bulk, val.first),
|
77
77
|
"[...]"
|
78
78
|
]
|
79
79
|
else
|
80
|
-
val.map { |v|
|
80
|
+
val.map { |v| format(:bulk, v) }
|
81
81
|
end
|
82
|
-
else
|
82
|
+
else "?"
|
83
83
|
end
|
84
84
|
end
|
85
85
|
end
|
@@ -2,54 +2,67 @@ module Appsignal
|
|
2
2
|
class EventFormatter
|
3
3
|
module Moped
|
4
4
|
class QueryFormatter < Appsignal::EventFormatter
|
5
|
-
register
|
5
|
+
register "query.moped"
|
6
6
|
|
7
7
|
def format(payload)
|
8
|
-
if payload[:ops] && payload[:ops].
|
8
|
+
if payload[:ops] && !payload[:ops].empty?
|
9
9
|
op = payload[:ops].first
|
10
10
|
case op.class.to_s
|
11
|
-
when
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
11
|
+
when "Moped::Protocol::Command"
|
12
|
+
[
|
13
|
+
"Command", {
|
14
|
+
:database => op.full_collection_name,
|
15
|
+
:selector => sanitize(op.selector, true, :mongodb)
|
16
|
+
}.inspect
|
17
|
+
]
|
18
|
+
when "Moped::Protocol::Query"
|
19
|
+
[
|
20
|
+
"Query", {
|
21
|
+
:database => op.full_collection_name,
|
22
|
+
:selector => sanitize(op.selector, false, :mongodb),
|
23
|
+
:flags => op.flags,
|
24
|
+
:limit => op.limit,
|
25
|
+
:skip => op.skip,
|
26
|
+
:fields => op.fields
|
27
|
+
}.inspect
|
28
|
+
]
|
29
|
+
when "Moped::Protocol::Delete"
|
30
|
+
[
|
31
|
+
"Delete", {
|
32
|
+
:database => op.full_collection_name,
|
33
|
+
:selector => sanitize(op.selector, false, :mongodb),
|
34
|
+
:flags => op.flags
|
35
|
+
}.inspect
|
36
|
+
]
|
37
|
+
when "Moped::Protocol::Insert"
|
38
|
+
[
|
39
|
+
"Insert", {
|
40
|
+
:database => op.full_collection_name,
|
41
|
+
:documents => sanitize(op.documents, true, :mongodb),
|
42
|
+
:count => op.documents.count,
|
43
|
+
:flags => op.flags
|
44
|
+
}.inspect
|
45
|
+
]
|
46
|
+
when "Moped::Protocol::Update"
|
47
|
+
[
|
48
|
+
"Update",
|
49
|
+
{
|
50
|
+
:database => op.full_collection_name,
|
51
|
+
:selector => sanitize(op.selector, false, :mongodb),
|
52
|
+
:update => sanitize(op.update, true, :mongodb),
|
53
|
+
:flags => op.flags
|
54
|
+
}.inspect
|
55
|
+
]
|
56
|
+
when "Moped::Protocol::KillCursors"
|
57
|
+
[
|
58
|
+
"KillCursors",
|
59
|
+
{ :number_of_cursor_ids => op.number_of_cursor_ids }.inspect
|
60
|
+
]
|
49
61
|
else
|
50
|
-
|
51
|
-
|
52
|
-
|
62
|
+
[
|
63
|
+
op.class.to_s.sub("Moped::Protocol::", ""),
|
64
|
+
{ :database => op.full_collection_name }.inspect
|
65
|
+
]
|
53
66
|
end
|
54
67
|
end
|
55
68
|
end
|
data/lib/appsignal/extension.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
1
|
+
require "yaml"
|
2
2
|
|
3
3
|
begin
|
4
|
-
require
|
4
|
+
require "appsignal_extension"
|
5
5
|
Appsignal.extension_loaded = true
|
6
6
|
rescue LoadError => err
|
7
7
|
Appsignal.logger.error(
|
@@ -16,12 +16,12 @@ module Appsignal
|
|
16
16
|
class << self
|
17
17
|
def agent_config
|
18
18
|
@agent_config ||= YAML.load(
|
19
|
-
File.read(File.join(File.dirname(__FILE__),
|
19
|
+
File.read(File.join(File.dirname(__FILE__), "../../ext/agent.yml"))
|
20
20
|
)
|
21
21
|
end
|
22
22
|
|
23
23
|
def agent_version
|
24
|
-
agent_config[
|
24
|
+
agent_config["version"]
|
25
25
|
end
|
26
26
|
|
27
27
|
def method_missing(m, *args, &block)
|
@@ -31,7 +31,7 @@ module Appsignal
|
|
31
31
|
|
32
32
|
class Data
|
33
33
|
def inspect
|
34
|
-
"#<#{self.class.name}:#{object_id} #{
|
34
|
+
"#<#{self.class.name}:#{object_id} #{self}>"
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
data/lib/appsignal/hooks.rb
CHANGED
@@ -17,7 +17,7 @@ module Appsignal
|
|
17
17
|
end
|
18
18
|
|
19
19
|
class Hook
|
20
|
-
def self.register(name, hook=self)
|
20
|
+
def self.register(name, hook = self)
|
21
21
|
Appsignal::Hooks.register(name, hook.new)
|
22
22
|
end
|
23
23
|
|
@@ -63,16 +63,18 @@ module Appsignal
|
|
63
63
|
text.size > 200 ? "#{text[0...197]}..." : text
|
64
64
|
end
|
65
65
|
|
66
|
-
def extract_value(object_or_hash, field, default_value=nil, convert_to_s=false)
|
67
|
-
value =
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
object_or_hash.
|
75
|
-
|
66
|
+
def extract_value(object_or_hash, field, default_value = nil, convert_to_s = false)
|
67
|
+
value =
|
68
|
+
if object_or_hash.respond_to?(:[])
|
69
|
+
begin
|
70
|
+
object_or_hash[field]
|
71
|
+
rescue NameError
|
72
|
+
nil
|
73
|
+
end
|
74
|
+
elsif object_or_hash.respond_to?(field)
|
75
|
+
object_or_hash.send(field)
|
76
|
+
end || default_value
|
77
|
+
|
76
78
|
if convert_to_s
|
77
79
|
value.to_s
|
78
80
|
else
|
@@ -89,18 +91,18 @@ module Appsignal
|
|
89
91
|
end
|
90
92
|
end
|
91
93
|
|
92
|
-
require
|
93
|
-
require
|
94
|
-
require
|
95
|
-
require
|
96
|
-
require
|
97
|
-
require
|
98
|
-
require
|
99
|
-
require
|
100
|
-
require
|
101
|
-
require
|
102
|
-
require
|
103
|
-
require
|
104
|
-
require
|
105
|
-
require
|
106
|
-
require
|
94
|
+
require "appsignal/hooks/active_support_notifications"
|
95
|
+
require "appsignal/hooks/celluloid"
|
96
|
+
require "appsignal/hooks/delayed_job"
|
97
|
+
require "appsignal/hooks/net_http"
|
98
|
+
require "appsignal/hooks/passenger"
|
99
|
+
require "appsignal/hooks/puma"
|
100
|
+
require "appsignal/hooks/rake"
|
101
|
+
require "appsignal/hooks/redis"
|
102
|
+
require "appsignal/hooks/sequel"
|
103
|
+
require "appsignal/hooks/shoryuken"
|
104
|
+
require "appsignal/hooks/sidekiq"
|
105
|
+
require "appsignal/hooks/unicorn"
|
106
|
+
require "appsignal/hooks/mongo_ruby_driver"
|
107
|
+
require "appsignal/hooks/webmachine"
|
108
|
+
require "appsignal/hooks/data_mapper"
|
@@ -3,7 +3,7 @@ module Appsignal
|
|
3
3
|
class ActiveSupportNotificationsHook < Appsignal::Hooks::Hook
|
4
4
|
register :active_support_notifications
|
5
5
|
|
6
|
-
BANG =
|
6
|
+
BANG = "!".freeze
|
7
7
|
|
8
8
|
def dependencies_present?
|
9
9
|
defined?(::ActiveSupport::Notifications::Instrumenter)
|
@@ -13,7 +13,7 @@ module Appsignal
|
|
13
13
|
::ActiveSupport::Notifications::Instrumenter.class_eval do
|
14
14
|
alias instrument_without_appsignal instrument
|
15
15
|
|
16
|
-
def instrument(name, payload={}, &block)
|
16
|
+
def instrument(name, payload = {}, &block)
|
17
17
|
# Events that start with a bang are internal to Rails
|
18
18
|
instrument_this = name[0] != BANG
|
19
19
|
|
@@ -5,11 +5,11 @@ module Appsignal
|
|
5
5
|
|
6
6
|
def dependencies_present?
|
7
7
|
defined?(::DataMapper) &&
|
8
|
-
|
8
|
+
defined?(::DataObjects::Connection)
|
9
9
|
end
|
10
10
|
|
11
11
|
def install
|
12
|
-
require
|
12
|
+
require "appsignal/integrations/data_mapper"
|
13
13
|
::DataObjects::Connection.send(:include, Appsignal::Hooks::DataMapperLogListener)
|
14
14
|
end
|
15
15
|
end
|
@@ -10,7 +10,7 @@ module Appsignal
|
|
10
10
|
def install
|
11
11
|
# The DJ plugin is a subclass of Delayed::Plugin, so we can only
|
12
12
|
# require this code if we're actually installing.
|
13
|
-
require
|
13
|
+
require "appsignal/integrations/delayed_job_plugin"
|
14
14
|
::Delayed::Worker.plugins << Appsignal::Hooks::DelayedJobPlugin
|
15
15
|
end
|
16
16
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "net/http"
|
2
2
|
|
3
3
|
module Appsignal
|
4
4
|
class Hooks
|
@@ -13,10 +13,10 @@ module Appsignal
|
|
13
13
|
Net::HTTP.class_eval do
|
14
14
|
alias request_without_appsignal request
|
15
15
|
|
16
|
-
def request(request, body=nil, &block)
|
16
|
+
def request(request, body = nil, &block)
|
17
17
|
Appsignal.instrument(
|
18
|
-
|
19
|
-
"#{request.method} #{use_ssl? ?
|
18
|
+
"request.net_http",
|
19
|
+
"#{request.method} #{use_ssl? ? "https" : "http"}://#{request["host"] || address}"
|
20
20
|
) do
|
21
21
|
request_without_appsignal(request, body, &block)
|
22
22
|
end
|