appsignal 3.5.4-java → 3.5.5-java
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/.semaphore/semaphore.yml +147 -9
- data/CHANGELOG.md +17 -0
- data/README.md +2 -0
- data/build_matrix.yml +5 -9
- data/ext/Rakefile +7 -1
- data/ext/agent.rb +27 -27
- data/gemfiles/redis-4.gemfile +5 -0
- data/gemfiles/redis-5.gemfile +6 -0
- data/lib/appsignal/cli/diagnose.rb +1 -1
- data/lib/appsignal/config.rb +9 -4
- data/lib/appsignal/environment.rb +24 -13
- data/lib/appsignal/event_formatter.rb +1 -1
- data/lib/appsignal/extension/jruby.rb +4 -3
- data/lib/appsignal/extension.rb +1 -1
- data/lib/appsignal/helpers/instrumentation.rb +7 -7
- data/lib/appsignal/helpers/metrics.rb +3 -3
- data/lib/appsignal/hooks/redis.rb +1 -0
- data/lib/appsignal/hooks/redis_client.rb +27 -0
- data/lib/appsignal/hooks.rb +3 -2
- data/lib/appsignal/integrations/hanami.rb +1 -1
- data/lib/appsignal/integrations/padrino.rb +1 -1
- data/lib/appsignal/integrations/railtie.rb +1 -1
- data/lib/appsignal/integrations/redis_client.rb +20 -0
- data/lib/appsignal/integrations/sidekiq.rb +1 -1
- data/lib/appsignal/integrations/sinatra.rb +1 -1
- data/lib/appsignal/minutely.rb +4 -4
- data/lib/appsignal/probes/gvl.rb +1 -1
- data/lib/appsignal/probes/helpers.rb +1 -1
- data/lib/appsignal/probes/mri.rb +1 -1
- data/lib/appsignal/probes/sidekiq.rb +5 -5
- data/lib/appsignal/rack/generic_instrumentation.rb +1 -1
- data/lib/appsignal/rack/rails_instrumentation.rb +2 -2
- data/lib/appsignal/rack/sinatra_instrumentation.rb +2 -2
- data/lib/appsignal/rack/streaming_listener.rb +1 -1
- data/lib/appsignal/span.rb +2 -2
- data/lib/appsignal/transaction.rb +11 -11
- data/lib/appsignal/utils/deprecation_message.rb +2 -2
- data/lib/appsignal/version.rb +1 -1
- data/lib/appsignal.rb +37 -31
- data/spec/lib/appsignal/config_spec.rb +2 -2
- data/spec/lib/appsignal/hooks/activejob_spec.rb +1 -1
- data/spec/lib/appsignal/hooks/redis_client_spec.rb +222 -0
- data/spec/lib/appsignal/hooks/redis_spec.rb +98 -76
- data/spec/lib/appsignal/hooks_spec.rb +4 -4
- data/spec/lib/appsignal/integrations/railtie_spec.rb +2 -2
- data/spec/lib/appsignal/integrations/sidekiq_spec.rb +3 -3
- data/spec/lib/appsignal/integrations/sinatra_spec.rb +2 -2
- data/spec/lib/appsignal/minutely_spec.rb +2 -2
- data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +1 -1
- data/spec/lib/appsignal/transaction_spec.rb +4 -4
- data/spec/lib/appsignal_spec.rb +34 -32
- data/spec/spec_helper.rb +1 -1
- data/spec/support/helpers/config_helpers.rb +6 -2
- data/spec/support/helpers/dependency_helper.rb +9 -1
- data/spec/support/helpers/log_helpers.rb +2 -2
- metadata +7 -2
@@ -68,9 +68,9 @@ module Appsignal
|
|
68
68
|
namespace = Appsignal::Transaction::HTTP_REQUEST
|
69
69
|
request = ::Rack::Request.new(env)
|
70
70
|
else
|
71
|
-
|
72
|
-
"either 'perform_job' (for jobs and tasks) or
|
73
|
-
"(for HTTP requests)"
|
71
|
+
internal_logger.error "Unrecognized name '#{name}': names must " \
|
72
|
+
"start with either 'perform_job' (for jobs and tasks) or " \
|
73
|
+
"'process_action' (for HTTP requests)"
|
74
74
|
return yield
|
75
75
|
end
|
76
76
|
|
@@ -228,8 +228,8 @@ module Appsignal
|
|
228
228
|
return unless active?
|
229
229
|
|
230
230
|
unless error.is_a?(Exception)
|
231
|
-
|
232
|
-
"value is not an exception: #{error.inspect}"
|
231
|
+
internal_logger.error "Appsignal.send_error: Cannot send error. " \
|
232
|
+
"The given value is not an exception: #{error.inspect}"
|
233
233
|
return
|
234
234
|
end
|
235
235
|
transaction = Appsignal::Transaction.new(
|
@@ -319,8 +319,8 @@ module Appsignal
|
|
319
319
|
"Appsignal.set_error called on location: #{call_location}"
|
320
320
|
end
|
321
321
|
unless exception.is_a?(Exception)
|
322
|
-
|
323
|
-
"value is not an exception: #{exception.inspect}"
|
322
|
+
internal_logger.error "Appsignal.set_error: Cannot set error. " \
|
323
|
+
"The given value is not an exception: #{exception.inspect}"
|
324
324
|
return
|
325
325
|
end
|
326
326
|
return if !active? || !Appsignal::Transaction.current?
|
@@ -10,7 +10,7 @@ module Appsignal
|
|
10
10
|
Appsignal::Utils::Data.generate(tags)
|
11
11
|
)
|
12
12
|
rescue RangeError
|
13
|
-
Appsignal.
|
13
|
+
Appsignal.internal_logger
|
14
14
|
.warn("Gauge value #{value} for key '#{key}' is too big")
|
15
15
|
end
|
16
16
|
|
@@ -37,7 +37,7 @@ module Appsignal
|
|
37
37
|
Appsignal::Utils::Data.generate(tags)
|
38
38
|
)
|
39
39
|
rescue RangeError
|
40
|
-
Appsignal.
|
40
|
+
Appsignal.internal_logger
|
41
41
|
.warn("Counter value #{value} for key '#{key}' is too big")
|
42
42
|
end
|
43
43
|
|
@@ -48,7 +48,7 @@ module Appsignal
|
|
48
48
|
Appsignal::Utils::Data.generate(tags)
|
49
49
|
)
|
50
50
|
rescue RangeError
|
51
|
-
Appsignal.
|
51
|
+
Appsignal.internal_logger
|
52
52
|
.warn("Distribution value #{value} for key '#{key}' is too big")
|
53
53
|
end
|
54
54
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Appsignal
|
4
|
+
class Hooks
|
5
|
+
# @api private
|
6
|
+
class RedisClientHook < Appsignal::Hooks::Hook
|
7
|
+
register :redis_client
|
8
|
+
|
9
|
+
def dependencies_present?
|
10
|
+
defined?(::RedisClient) &&
|
11
|
+
Appsignal.config &&
|
12
|
+
Appsignal.config[:instrument_redis]
|
13
|
+
end
|
14
|
+
|
15
|
+
def install
|
16
|
+
require "appsignal/integrations/redis_client"
|
17
|
+
::RedisClient::RubyConnection.prepend Appsignal::Integrations::RedisClientIntegration
|
18
|
+
Appsignal::Environment.report_enabled("redis")
|
19
|
+
|
20
|
+
return unless defined?(::RedisClient::HiredisConnection)
|
21
|
+
|
22
|
+
::RedisClient::HiredisConnection.prepend Appsignal::Integrations::RedisClientIntegration
|
23
|
+
Appsignal::Environment.report_enabled("hiredis")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/appsignal/hooks.rb
CHANGED
@@ -32,12 +32,12 @@ module Appsignal
|
|
32
32
|
return unless dependencies_present?
|
33
33
|
return if installed?
|
34
34
|
|
35
|
-
Appsignal.
|
35
|
+
Appsignal.internal_logger.debug("Installing #{name} hook")
|
36
36
|
begin
|
37
37
|
install
|
38
38
|
@installed = true
|
39
39
|
rescue => ex
|
40
|
-
logger = Appsignal.
|
40
|
+
logger = Appsignal.internal_logger
|
41
41
|
logger.error("Error while installing #{name} hook: #{ex}")
|
42
42
|
logger.debug ex.backtrace.join("\n")
|
43
43
|
end
|
@@ -103,6 +103,7 @@ require "appsignal/hooks/passenger"
|
|
103
103
|
require "appsignal/hooks/puma"
|
104
104
|
require "appsignal/hooks/rake"
|
105
105
|
require "appsignal/hooks/redis"
|
106
|
+
require "appsignal/hooks/redis_client"
|
106
107
|
require "appsignal/hooks/resque"
|
107
108
|
require "appsignal/hooks/sequel"
|
108
109
|
require "appsignal/hooks/shoryuken"
|
@@ -6,7 +6,7 @@ module Appsignal
|
|
6
6
|
module Integrations
|
7
7
|
module HanamiPlugin
|
8
8
|
def self.init
|
9
|
-
Appsignal.
|
9
|
+
Appsignal.internal_logger.debug("Loading Hanami integration")
|
10
10
|
|
11
11
|
hanami_app_config = ::Hanami.app.config
|
12
12
|
Appsignal.config = Appsignal::Config.new(
|
@@ -7,7 +7,7 @@ module Appsignal
|
|
7
7
|
# @api private
|
8
8
|
module PadrinoPlugin
|
9
9
|
def self.init
|
10
|
-
Appsignal.
|
10
|
+
Appsignal.internal_logger.debug("Loading Padrino (#{Padrino::VERSION}) integration")
|
11
11
|
|
12
12
|
root = Padrino.mounted_root
|
13
13
|
Appsignal.config = Appsignal::Config.new(root, Padrino.env)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
Appsignal.
|
3
|
+
Appsignal.internal_logger.debug("Loading Rails (#{Rails.version}) integration")
|
4
4
|
|
5
5
|
require "appsignal/utils/rails_helper"
|
6
6
|
require "appsignal/rack/rails_instrumentation"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Appsignal
|
4
|
+
module Integrations
|
5
|
+
module RedisClientIntegration
|
6
|
+
def write(command)
|
7
|
+
sanitized_command =
|
8
|
+
if command[0] == :eval
|
9
|
+
"#{command[1]}#{" ?" * (command.size - 3)}"
|
10
|
+
else
|
11
|
+
"#{command[0]}#{" ?" * (command.size - 1)}"
|
12
|
+
end
|
13
|
+
|
14
|
+
Appsignal.instrument "query.redis", @config.id, sanitized_command do
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -168,7 +168,7 @@ module Appsignal
|
|
168
168
|
# Sidekiq issue #1761: in dev mode, it's possible to have jobs enqueued
|
169
169
|
# which haven't been loaded into memory yet so the YAML can't be
|
170
170
|
# loaded.
|
171
|
-
Appsignal.
|
171
|
+
Appsignal.internal_logger.warn "Unable to load YAML: #{error.message}"
|
172
172
|
default
|
173
173
|
end
|
174
174
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require "appsignal"
|
4
4
|
require "appsignal/rack/sinatra_instrumentation"
|
5
5
|
|
6
|
-
Appsignal.
|
6
|
+
Appsignal.internal_logger.debug("Loading Sinatra (#{Sinatra::VERSION}) integration")
|
7
7
|
|
8
8
|
app_settings = ::Sinatra::Application.settings
|
9
9
|
Appsignal.config = Appsignal::Config.new(
|
data/lib/appsignal/minutely.rb
CHANGED
@@ -108,7 +108,7 @@ module Appsignal
|
|
108
108
|
attr_reader :probes
|
109
109
|
|
110
110
|
def logger
|
111
|
-
Appsignal.
|
111
|
+
Appsignal.internal_logger
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
@@ -132,7 +132,7 @@ module Appsignal
|
|
132
132
|
sleep initial_wait_time
|
133
133
|
initialize_probes
|
134
134
|
loop do
|
135
|
-
logger = Appsignal.
|
135
|
+
logger = Appsignal.internal_logger
|
136
136
|
logger.debug("Gathering minutely metrics with #{probe_instances.count} probes")
|
137
137
|
probe_instances.each do |name, probe|
|
138
138
|
logger.debug("Gathering minutely metrics with '#{name}' probe")
|
@@ -181,13 +181,13 @@ module Appsignal
|
|
181
181
|
klass = instance.class
|
182
182
|
end
|
183
183
|
unless dependencies_present?(klass)
|
184
|
-
Appsignal.
|
184
|
+
Appsignal.internal_logger.debug "Skipping '#{name}' probe, " \
|
185
185
|
"#{klass}.dependency_present? returned falsy"
|
186
186
|
return
|
187
187
|
end
|
188
188
|
probe_instances[name] = instance
|
189
189
|
rescue => error
|
190
|
-
logger = Appsignal.
|
190
|
+
logger = Appsignal.internal_logger
|
191
191
|
logger.error "Error while initializing minutely probe '#{name}': #{error}"
|
192
192
|
logger.debug error.backtrace.join("\n")
|
193
193
|
end
|
data/lib/appsignal/probes/gvl.rb
CHANGED
@@ -22,7 +22,7 @@ module Appsignal
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def initialize(appsignal: Appsignal, gvl_tools: ::GVLTools)
|
25
|
-
Appsignal.
|
25
|
+
Appsignal.internal_logger.debug("Initializing GVL probe")
|
26
26
|
@appsignal = appsignal
|
27
27
|
@gvl_tools = gvl_tools
|
28
28
|
end
|
@@ -47,7 +47,7 @@ module Appsignal
|
|
47
47
|
# Auto detect hostname as fallback. May be inaccurate.
|
48
48
|
@hostname =
|
49
49
|
config[:hostname] || Socket.gethostname
|
50
|
-
Appsignal.
|
50
|
+
Appsignal.internal_logger.debug "Probe helper: Using hostname config " \
|
51
51
|
"option '#{@hostname.inspect}' as hostname"
|
52
52
|
|
53
53
|
@hostname
|
data/lib/appsignal/probes/mri.rb
CHANGED
@@ -11,7 +11,7 @@ module Appsignal
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def initialize(appsignal: Appsignal, gc_profiler: Appsignal::GarbageCollection.profiler)
|
14
|
-
Appsignal.
|
14
|
+
Appsignal.internal_logger.debug("Initializing VM probe")
|
15
15
|
@appsignal = appsignal
|
16
16
|
@gc_profiler = gc_profiler
|
17
17
|
end
|
@@ -59,7 +59,7 @@ module Appsignal
|
|
59
59
|
@adapter = is_sidekiq7 ? Sidekiq7Adapter : Sidekiq6Adapter
|
60
60
|
|
61
61
|
config_string = " with config: #{config}" unless config.empty?
|
62
|
-
Appsignal.
|
62
|
+
Appsignal.internal_logger.debug("Initializing Sidekiq probe#{config_string}")
|
63
63
|
require "sidekiq/api"
|
64
64
|
end
|
65
65
|
|
@@ -123,14 +123,14 @@ module Appsignal
|
|
123
123
|
|
124
124
|
if config.key?(:hostname)
|
125
125
|
@hostname = config[:hostname]
|
126
|
-
Appsignal.
|
127
|
-
"option #{@hostname.inspect} as hostname"
|
126
|
+
Appsignal.internal_logger.debug "Sidekiq probe: Using hostname " \
|
127
|
+
"config option #{@hostname.inspect} as hostname"
|
128
128
|
return @hostname
|
129
129
|
end
|
130
130
|
|
131
131
|
host = adapter.hostname
|
132
|
-
Appsignal.
|
133
|
-
"#{host.inspect} as hostname"
|
132
|
+
Appsignal.internal_logger.debug "Sidekiq probe: Using Redis server " \
|
133
|
+
"hostname #{host.inspect} as hostname"
|
134
134
|
@hostname = host
|
135
135
|
end
|
136
136
|
end
|
@@ -7,7 +7,7 @@ module Appsignal
|
|
7
7
|
module Rack
|
8
8
|
class GenericInstrumentation
|
9
9
|
def initialize(app, options = {})
|
10
|
-
Appsignal.
|
10
|
+
Appsignal.internal_logger.debug "Initializing Appsignal::Rack::GenericInstrumentation"
|
11
11
|
@app = app
|
12
12
|
@options = options
|
13
13
|
end
|
@@ -7,7 +7,7 @@ module Appsignal
|
|
7
7
|
module Rack
|
8
8
|
class RailsInstrumentation
|
9
9
|
def initialize(app, options = {})
|
10
|
-
Appsignal.
|
10
|
+
Appsignal.internal_logger.debug "Initializing Appsignal::Rack::RailsInstrumentation"
|
11
11
|
@app = app
|
12
12
|
@options = options
|
13
13
|
end
|
@@ -43,7 +43,7 @@ module Appsignal
|
|
43
43
|
begin
|
44
44
|
transaction.set_metadata("method", request.request_method)
|
45
45
|
rescue => error
|
46
|
-
Appsignal.
|
46
|
+
Appsignal.internal_logger.error("Unable to report HTTP request method: '#{error}'")
|
47
47
|
end
|
48
48
|
Appsignal::Transaction.complete_current!
|
49
49
|
end
|
@@ -15,7 +15,7 @@ module Appsignal
|
|
15
15
|
def initialize(app, options = {})
|
16
16
|
@app = app
|
17
17
|
@options = options
|
18
|
-
Appsignal.
|
18
|
+
Appsignal.internal_logger.warn "Please remove Appsignal::Rack::SinatraInstrumentation " \
|
19
19
|
"from your Sinatra::Base class. This is no longer needed."
|
20
20
|
end
|
21
21
|
|
@@ -32,7 +32,7 @@ module Appsignal
|
|
32
32
|
attr_reader :raise_errors_on
|
33
33
|
|
34
34
|
def initialize(app, options = {})
|
35
|
-
Appsignal.
|
35
|
+
Appsignal.internal_logger.debug "Initializing Appsignal::Rack::SinatraBaseInstrumentation"
|
36
36
|
@app = app
|
37
37
|
@options = options
|
38
38
|
@raise_errors_on = raise_errors?(@app)
|
@@ -7,7 +7,7 @@ module Appsignal
|
|
7
7
|
# @api private
|
8
8
|
class StreamingListener
|
9
9
|
def initialize(app, options = {})
|
10
|
-
Appsignal.
|
10
|
+
Appsignal.internal_logger.debug "Initializing Appsignal::Rack::StreamingListener"
|
11
11
|
@app = app
|
12
12
|
@options = options
|
13
13
|
end
|
data/lib/appsignal/span.rb
CHANGED
@@ -16,8 +16,8 @@ module Appsignal
|
|
16
16
|
|
17
17
|
def add_error(error)
|
18
18
|
unless error.is_a?(Exception)
|
19
|
-
Appsignal.
|
20
|
-
"The given value is not an exception: #{error.inspect}"
|
19
|
+
Appsignal.internal_logger.error "Appsignal::Span#add_error: Cannot " \
|
20
|
+
"add error. The given value is not an exception: #{error.inspect}"
|
21
21
|
return
|
22
22
|
end
|
23
23
|
return unless error
|
@@ -26,7 +26,7 @@ module Appsignal
|
|
26
26
|
Appsignal::Transaction.new(id, namespace, request, options)
|
27
27
|
else
|
28
28
|
# Otherwise, log the issue about trying to start another transaction
|
29
|
-
Appsignal.
|
29
|
+
Appsignal.internal_logger.warn_once_then_debug(
|
30
30
|
:transaction_id,
|
31
31
|
"Trying to start new transaction with id " \
|
32
32
|
"'#{id}', but a transaction with id '#{current.transaction_id}' " \
|
@@ -59,7 +59,7 @@ module Appsignal
|
|
59
59
|
def complete_current!
|
60
60
|
current.complete
|
61
61
|
rescue => e
|
62
|
-
Appsignal.
|
62
|
+
Appsignal.internal_logger.error(
|
63
63
|
"Failed to complete transaction ##{current.transaction_id}. #{e.message}"
|
64
64
|
)
|
65
65
|
ensure
|
@@ -114,7 +114,7 @@ module Appsignal
|
|
114
114
|
|
115
115
|
def complete
|
116
116
|
if discarded?
|
117
|
-
Appsignal.
|
117
|
+
Appsignal.internal_logger.debug "Skipping transaction '#{transaction_id}' " \
|
118
118
|
"because it was manually discarded."
|
119
119
|
return
|
120
120
|
end
|
@@ -188,7 +188,7 @@ module Appsignal
|
|
188
188
|
# Breadcrumb reference
|
189
189
|
def add_breadcrumb(category, action, message = "", metadata = {}, time = Time.now.utc)
|
190
190
|
unless metadata.is_a? Hash
|
191
|
-
Appsignal.
|
191
|
+
Appsignal.internal_logger.error "add_breadcrumb: Cannot add breadcrumb. " \
|
192
192
|
"The given metadata argument is not a Hash."
|
193
193
|
return
|
194
194
|
end
|
@@ -287,7 +287,7 @@ module Appsignal
|
|
287
287
|
|
288
288
|
@ext.set_queue_start(start)
|
289
289
|
rescue RangeError
|
290
|
-
Appsignal.
|
290
|
+
Appsignal.internal_logger.warn("Queue start value #{start} is too big")
|
291
291
|
end
|
292
292
|
|
293
293
|
# Set the queue time based on the HTTP header or `:queue_start` env key
|
@@ -324,7 +324,7 @@ module Appsignal
|
|
324
324
|
return unless key && data
|
325
325
|
|
326
326
|
if !data.is_a?(Array) && !data.is_a?(Hash)
|
327
|
-
Appsignal.
|
327
|
+
Appsignal.internal_logger.error(
|
328
328
|
"Invalid sample data for '#{key}'. Value is not an Array or Hash: '#{data.inspect}'"
|
329
329
|
)
|
330
330
|
return
|
@@ -337,11 +337,11 @@ module Appsignal
|
|
337
337
|
rescue RuntimeError => e
|
338
338
|
begin
|
339
339
|
inspected_data = data.inspect
|
340
|
-
Appsignal.
|
340
|
+
Appsignal.internal_logger.error(
|
341
341
|
"Error generating data (#{e.class}: #{e.message}) for '#{inspected_data}'"
|
342
342
|
)
|
343
343
|
rescue => e
|
344
|
-
Appsignal.
|
344
|
+
Appsignal.internal_logger.error(
|
345
345
|
"Error generating data (#{e.class}: #{e.message}). Can't inspect data."
|
346
346
|
)
|
347
347
|
end
|
@@ -362,7 +362,7 @@ module Appsignal
|
|
362
362
|
|
363
363
|
def set_error(error)
|
364
364
|
unless error.is_a?(Exception)
|
365
|
-
Appsignal.
|
365
|
+
Appsignal.internal_logger.error "Appsignal::Transaction#set_error: Cannot set error. " \
|
366
366
|
"The given value is not an exception: #{error.inspect}"
|
367
367
|
return
|
368
368
|
end
|
@@ -385,7 +385,7 @@ module Appsignal
|
|
385
385
|
break unless error
|
386
386
|
|
387
387
|
if causes.length >= ERROR_CAUSES_LIMIT
|
388
|
-
Appsignal.
|
388
|
+
Appsignal.internal_logger.debug "Appsignal::Transaction#set_error: Error has more " \
|
389
389
|
"than #{ERROR_CAUSES_LIMIT} error causes. Only the first #{ERROR_CAUSES_LIMIT} " \
|
390
390
|
"will be reported."
|
391
391
|
root_cause_missing = true
|
@@ -529,7 +529,7 @@ module Appsignal
|
|
529
529
|
request.send options[:params_method]
|
530
530
|
rescue => e
|
531
531
|
# Getting params from the request has been know to fail.
|
532
|
-
Appsignal.
|
532
|
+
Appsignal.internal_logger.debug "Exception while getting params: #{e}"
|
533
533
|
nil
|
534
534
|
end
|
535
535
|
end
|
@@ -3,12 +3,12 @@
|
|
3
3
|
module Appsignal
|
4
4
|
module Utils
|
5
5
|
module DeprecationMessage
|
6
|
-
def self.message(message, logger = Appsignal.
|
6
|
+
def self.message(message, logger = Appsignal.internal_logger)
|
7
7
|
Kernel.warn "appsignal WARNING: #{message}"
|
8
8
|
logger.warn message
|
9
9
|
end
|
10
10
|
|
11
|
-
def deprecation_message(message, logger = Appsignal.
|
11
|
+
def deprecation_message(message, logger = Appsignal.internal_logger)
|
12
12
|
Appsignal::Utils::DeprecationMessage.message(message, logger)
|
13
13
|
end
|
14
14
|
end
|
data/lib/appsignal/version.rb
CHANGED
data/lib/appsignal.rb
CHANGED
@@ -46,7 +46,11 @@ module Appsignal
|
|
46
46
|
# @see extension_loaded?
|
47
47
|
attr_accessor :extension_loaded
|
48
48
|
# @!attribute [rw] logger
|
49
|
-
# Accessor for the AppSignal logger.
|
49
|
+
# Accessor for the internal AppSignal logger.
|
50
|
+
#
|
51
|
+
# Not to be confused with our logging feature.
|
52
|
+
# This is part of our private internal API. Do not call this method
|
53
|
+
# directly.
|
50
54
|
#
|
51
55
|
# If no logger has been set, it will return a "in memory logger", using
|
52
56
|
# `in_memory_log`. Once AppSignal is started (using {.start}) the
|
@@ -57,7 +61,7 @@ module Appsignal
|
|
57
61
|
# @api private
|
58
62
|
# @return [Logger]
|
59
63
|
# @see start_logger
|
60
|
-
attr_writer :
|
64
|
+
attr_writer :internal_logger
|
61
65
|
|
62
66
|
# @api private
|
63
67
|
def testing?
|
@@ -91,11 +95,11 @@ module Appsignal
|
|
91
95
|
# @since 0.7.0
|
92
96
|
def start
|
93
97
|
unless extension_loaded?
|
94
|
-
|
98
|
+
internal_logger.info("Not starting appsignal, extension is not loaded")
|
95
99
|
return
|
96
100
|
end
|
97
101
|
|
98
|
-
|
102
|
+
internal_logger.debug("Starting appsignal")
|
99
103
|
|
100
104
|
@config ||= Config.new(
|
101
105
|
Dir.pwd,
|
@@ -103,9 +107,9 @@ module Appsignal
|
|
103
107
|
)
|
104
108
|
|
105
109
|
if config.valid?
|
106
|
-
|
110
|
+
internal_logger.level = config.log_level
|
107
111
|
if config.active?
|
108
|
-
|
112
|
+
internal_logger.info "Starting AppSignal #{Appsignal::VERSION} " \
|
109
113
|
"(#{$PROGRAM_NAME}, Ruby #{RUBY_VERSION}, #{RUBY_PLATFORM})"
|
110
114
|
config.write_to_environment
|
111
115
|
Appsignal::Extension.start
|
@@ -120,10 +124,10 @@ module Appsignal
|
|
120
124
|
|
121
125
|
collect_environment_metadata
|
122
126
|
else
|
123
|
-
|
127
|
+
internal_logger.info("Not starting, not active for #{config.env}")
|
124
128
|
end
|
125
129
|
else
|
126
|
-
|
130
|
+
internal_logger.error("Not starting, no valid config for this environment")
|
127
131
|
end
|
128
132
|
end
|
129
133
|
|
@@ -143,9 +147,9 @@ module Appsignal
|
|
143
147
|
# @since 1.0.0
|
144
148
|
def stop(called_by = nil)
|
145
149
|
if called_by
|
146
|
-
|
150
|
+
internal_logger.debug("Stopping appsignal (#{called_by})")
|
147
151
|
else
|
148
|
-
|
152
|
+
internal_logger.debug("Stopping appsignal")
|
149
153
|
end
|
150
154
|
Appsignal::Extension.stop
|
151
155
|
end
|
@@ -154,7 +158,7 @@ module Appsignal
|
|
154
158
|
return unless active?
|
155
159
|
|
156
160
|
Appsignal.start_logger
|
157
|
-
|
161
|
+
internal_logger.debug("Forked process, resubscribing and restarting extension")
|
158
162
|
Appsignal::Extension.start
|
159
163
|
end
|
160
164
|
|
@@ -162,7 +166,8 @@ module Appsignal
|
|
162
166
|
Appsignal::Extension.get_server_state(key)
|
163
167
|
end
|
164
168
|
|
165
|
-
# In memory logger used before any logger is started with
|
169
|
+
# In memory internal logger used before any internal logger is started with
|
170
|
+
# {.start_logger}.
|
166
171
|
#
|
167
172
|
# The contents of this logger are flushed to the logger in {.start_logger}.
|
168
173
|
#
|
@@ -176,11 +181,12 @@ module Appsignal
|
|
176
181
|
end
|
177
182
|
end
|
178
183
|
|
179
|
-
def
|
180
|
-
@
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
+
def internal_logger
|
185
|
+
@internal_logger ||=
|
186
|
+
Appsignal::Utils::IntegrationLogger.new(in_memory_log).tap do |l|
|
187
|
+
l.level = ::Logger::INFO
|
188
|
+
l.formatter = log_formatter("appsignal")
|
189
|
+
end
|
184
190
|
end
|
185
191
|
|
186
192
|
# @api private
|
@@ -192,7 +198,7 @@ module Appsignal
|
|
192
198
|
end
|
193
199
|
end
|
194
200
|
|
195
|
-
# Start the AppSignal logger.
|
201
|
+
# Start the AppSignal internal logger.
|
196
202
|
#
|
197
203
|
# Sets the log level and sets the logger. Uses a file-based logger or the
|
198
204
|
# STDOUT-based logger. See the `:log` configuration option.
|
@@ -201,18 +207,18 @@ module Appsignal
|
|
201
207
|
# @since 0.7.0
|
202
208
|
def start_logger
|
203
209
|
if config && config[:log] == "file" && config.log_file_path
|
204
|
-
|
210
|
+
start_internal_file_logger(config.log_file_path)
|
205
211
|
else
|
206
|
-
|
212
|
+
start_internal_stdout_logger
|
207
213
|
end
|
208
214
|
|
209
|
-
|
215
|
+
internal_logger.level =
|
210
216
|
if config
|
211
217
|
config.log_level
|
212
218
|
else
|
213
219
|
Appsignal::Config::DEFAULT_LOG_LEVEL
|
214
220
|
end
|
215
|
-
|
221
|
+
internal_logger << @in_memory_log.string if @in_memory_log
|
216
222
|
end
|
217
223
|
|
218
224
|
# Returns if the C-extension was loaded properly.
|
@@ -255,18 +261,18 @@ module Appsignal
|
|
255
261
|
|
256
262
|
private
|
257
263
|
|
258
|
-
def
|
259
|
-
@
|
260
|
-
|
264
|
+
def start_internal_stdout_logger
|
265
|
+
@internal_logger = Appsignal::Utils::IntegrationLogger.new($stdout)
|
266
|
+
internal_logger.formatter = log_formatter("appsignal")
|
261
267
|
end
|
262
268
|
|
263
|
-
def
|
264
|
-
@
|
265
|
-
|
269
|
+
def start_internal_file_logger(path)
|
270
|
+
@internal_logger = Appsignal::Utils::IntegrationLogger.new(path)
|
271
|
+
internal_logger.formatter = log_formatter
|
266
272
|
rescue SystemCallError => error
|
267
|
-
|
268
|
-
|
269
|
-
|
273
|
+
start_internal_stdout_logger
|
274
|
+
internal_logger.warn "Unable to start internal logger with log path '#{path}'."
|
275
|
+
internal_logger.warn error
|
270
276
|
end
|
271
277
|
|
272
278
|
def collect_environment_metadata
|
@@ -265,7 +265,7 @@ describe Appsignal::Config do
|
|
265
265
|
|
266
266
|
context "with an overriden config file" do
|
267
267
|
let(:config) do
|
268
|
-
project_fixture_config("production", {}, Appsignal.
|
268
|
+
project_fixture_config("production", {}, Appsignal.internal_logger,
|
269
269
|
File.join(project_fixture_path, "config", "appsignal.yml"))
|
270
270
|
end
|
271
271
|
|
@@ -276,7 +276,7 @@ describe Appsignal::Config do
|
|
276
276
|
|
277
277
|
context "with an invalid overriden config file" do
|
278
278
|
let(:config) do
|
279
|
-
project_fixture_config("production", {}, Appsignal.
|
279
|
+
project_fixture_config("production", {}, Appsignal.internal_logger,
|
280
280
|
File.join(project_fixture_path, "config", "missing.yml"))
|
281
281
|
end
|
282
282
|
|