appsignal 3.5.3-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 +180 -14
- data/CHANGELOG.md +36 -0
- data/README.md +2 -0
- data/Rakefile +3 -1
- data/build_matrix.yml +7 -13
- data/ext/Rakefile +8 -1
- data/ext/agent.rb +27 -27
- data/ext/appsignal_extension.c +0 -24
- data/ext/base.rb +4 -1
- data/gemfiles/redis-4.gemfile +5 -0
- data/gemfiles/redis-5.gemfile +6 -0
- data/lib/appsignal/cli/diagnose/paths.rb +25 -6
- 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 -17
- data/lib/appsignal/extension.rb +1 -1
- data/lib/appsignal/helpers/instrumentation.rb +7 -7
- data/lib/appsignal/helpers/metrics.rb +15 -13
- 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/cli/diagnose_spec.rb +17 -12
- 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 +62 -60
- 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
data/ext/appsignal_extension.c
CHANGED
@@ -759,28 +759,6 @@ static VALUE set_gauge(VALUE self, VALUE key, VALUE value, VALUE tags) {
|
|
759
759
|
return Qnil;
|
760
760
|
}
|
761
761
|
|
762
|
-
static VALUE set_host_gauge(VALUE self, VALUE key, VALUE value) {
|
763
|
-
Check_Type(key, T_STRING);
|
764
|
-
Check_Type(value, T_FLOAT);
|
765
|
-
|
766
|
-
appsignal_set_host_gauge(
|
767
|
-
make_appsignal_string(key),
|
768
|
-
NUM2DBL(value)
|
769
|
-
);
|
770
|
-
return Qnil;
|
771
|
-
}
|
772
|
-
|
773
|
-
static VALUE set_process_gauge(VALUE self, VALUE key, VALUE value) {
|
774
|
-
Check_Type(key, T_STRING);
|
775
|
-
Check_Type(value, T_FLOAT);
|
776
|
-
|
777
|
-
appsignal_set_process_gauge(
|
778
|
-
make_appsignal_string(key),
|
779
|
-
NUM2DBL(value)
|
780
|
-
);
|
781
|
-
return Qnil;
|
782
|
-
}
|
783
|
-
|
784
762
|
static VALUE increment_counter(VALUE self, VALUE key, VALUE count, VALUE tags) {
|
785
763
|
appsignal_data_t* tags_data;
|
786
764
|
|
@@ -941,8 +919,6 @@ void Init_appsignal_extension(void) {
|
|
941
919
|
|
942
920
|
// Metrics
|
943
921
|
rb_define_singleton_method(Extension, "set_gauge", set_gauge, 3);
|
944
|
-
rb_define_singleton_method(Extension, "set_host_gauge", set_host_gauge, 2);
|
945
|
-
rb_define_singleton_method(Extension, "set_process_gauge", set_process_gauge, 2);
|
946
922
|
rb_define_singleton_method(Extension, "increment_counter", increment_counter, 3);
|
947
923
|
rb_define_singleton_method(Extension, "add_distribution_value", add_distribution_value, 3);
|
948
924
|
}
|
data/ext/base.rb
CHANGED
@@ -26,13 +26,16 @@ def report
|
|
26
26
|
@report ||=
|
27
27
|
begin
|
28
28
|
rbconfig = RbConfig::CONFIG
|
29
|
+
patchlevel = rbconfig["PATCHLEVEL"]
|
30
|
+
patchlevel_label = "-p#{patchlevel}" if patchlevel
|
31
|
+
ruby_version = "#{RUBY_VERSION}#{patchlevel_label}"
|
29
32
|
{
|
30
33
|
"result" => {
|
31
34
|
"status" => "incomplete"
|
32
35
|
},
|
33
36
|
"language" => {
|
34
37
|
"name" => "ruby",
|
35
|
-
"version" =>
|
38
|
+
"version" => ruby_version
|
36
39
|
},
|
37
40
|
"download" => {
|
38
41
|
"checksum" => "unverified"
|
@@ -19,7 +19,6 @@ module Appsignal
|
|
19
19
|
begin
|
20
20
|
config = Appsignal.config
|
21
21
|
log_file_path = config.log_file_path
|
22
|
-
makefile_log_path = File.join("ext", "mkmf.log")
|
23
22
|
{
|
24
23
|
:package_install_path => {
|
25
24
|
:label => "AppSignal gem path",
|
@@ -37,9 +36,9 @@ module Appsignal
|
|
37
36
|
:label => "Log directory",
|
38
37
|
:path => log_file_path ? File.dirname(log_file_path) : ""
|
39
38
|
},
|
40
|
-
|
39
|
+
"ext/mkmf.log" => {
|
41
40
|
:label => "Makefile install log",
|
42
|
-
:path =>
|
41
|
+
:path => makefile_install_log_path
|
43
42
|
},
|
44
43
|
"appsignal.log" => {
|
45
44
|
:label => "AppSignal log",
|
@@ -54,8 +53,11 @@ module Appsignal
|
|
54
53
|
def path_stat(path)
|
55
54
|
{
|
56
55
|
:path => path,
|
57
|
-
:exists =>
|
56
|
+
:exists => false
|
58
57
|
}.tap do |info|
|
58
|
+
next unless info[:path]
|
59
|
+
|
60
|
+
info[:exists] = File.exist?(path)
|
59
61
|
next unless info[:exists]
|
60
62
|
|
61
63
|
stat = File.stat(path)
|
@@ -84,9 +86,26 @@ module Appsignal
|
|
84
86
|
end
|
85
87
|
|
86
88
|
# Returns the AppSignal gem installation path. The root directory of
|
87
|
-
# this gem.
|
89
|
+
# this gem when installed.
|
88
90
|
def gem_path
|
89
|
-
|
91
|
+
gemspec.full_gem_path
|
92
|
+
end
|
93
|
+
|
94
|
+
# Returns the AppSignal gem's Makefile log path, if it exists.
|
95
|
+
def makefile_install_log_path
|
96
|
+
possible_locations = [
|
97
|
+
# Installed gem location
|
98
|
+
File.join(gemspec.extension_dir, "mkmf.log"),
|
99
|
+
# Local development location
|
100
|
+
File.join(gem_path, "ext", "mkmf.log")
|
101
|
+
]
|
102
|
+
possible_locations.find do |location|
|
103
|
+
File.exist?(location)
|
104
|
+
end || possible_locations.first
|
105
|
+
end
|
106
|
+
|
107
|
+
def gemspec
|
108
|
+
Gem.loaded_specs["appsignal"]
|
90
109
|
end
|
91
110
|
end
|
92
111
|
end
|
@@ -201,7 +201,7 @@ module Appsignal
|
|
201
201
|
)
|
202
202
|
Appsignal.config.write_to_environment
|
203
203
|
Appsignal.start_logger
|
204
|
-
Appsignal.
|
204
|
+
Appsignal.internal_logger.info("Starting AppSignal diagnose")
|
205
205
|
end
|
206
206
|
|
207
207
|
def run_agent_diagnose_mode
|
data/lib/appsignal/config.rb
CHANGED
@@ -219,8 +219,8 @@ module Appsignal
|
|
219
219
|
# use. This will be overwritten by the file config and environment
|
220
220
|
# variables config.
|
221
221
|
# @param logger [Logger] The logger to use for the AppSignal gem. This is
|
222
|
-
# used by the configuration class only. Default:
|
223
|
-
# also {Appsignal.start_logger}.
|
222
|
+
# used by the configuration class only. Default:
|
223
|
+
# {Appsignal.internal_logger}. See also {Appsignal.start_logger}.
|
224
224
|
# @param config_file [String] Custom config file location. Default
|
225
225
|
# `config/appsignal.yml`.
|
226
226
|
#
|
@@ -230,8 +230,13 @@ module Appsignal
|
|
230
230
|
# Configuration load order
|
231
231
|
# @see https://docs.appsignal.com/ruby/instrumentation/integrating-appsignal.html
|
232
232
|
# How to integrate AppSignal manually
|
233
|
-
def initialize(
|
234
|
-
|
233
|
+
def initialize(
|
234
|
+
root_path,
|
235
|
+
env,
|
236
|
+
initial_config = {},
|
237
|
+
logger = Appsignal.internal_logger,
|
238
|
+
config_file = nil
|
239
|
+
)
|
235
240
|
@config_file_error = false
|
236
241
|
@root_path = root_path
|
237
242
|
@config_file = config_file
|
@@ -10,9 +10,9 @@ module Appsignal
|
|
10
10
|
#
|
11
11
|
# The value of the environment metadata is given as a block that captures
|
12
12
|
# errors that might be raised while fetching the value. It will not
|
13
|
-
# re-raise errors, but instead log them using the
|
14
|
-
# ensures AppSignal will not cause an
|
15
|
-
# collecting this metadata.
|
13
|
+
# re-raise errors, but instead log them using the
|
14
|
+
# {Appsignal.internal_logger}. This ensures AppSignal will not cause an
|
15
|
+
# error in the application when collecting this metadata.
|
16
16
|
#
|
17
17
|
# @example Reporting a key and value
|
18
18
|
# Appsignal::Environment.report("ruby_version") { RUBY_VERSION }
|
@@ -34,8 +34,8 @@ module Appsignal
|
|
34
34
|
when String
|
35
35
|
key
|
36
36
|
else
|
37
|
-
Appsignal.
|
38
|
-
"Unsupported value type for #{key.inspect}"
|
37
|
+
Appsignal.internal_logger.error "Unable to report on environment " \
|
38
|
+
"metadata: Unsupported value type for #{key.inspect}"
|
39
39
|
return
|
40
40
|
end
|
41
41
|
|
@@ -43,7 +43,7 @@ module Appsignal
|
|
43
43
|
begin
|
44
44
|
yield
|
45
45
|
rescue => e
|
46
|
-
Appsignal.
|
46
|
+
Appsignal.internal_logger.error \
|
47
47
|
"Unable to report on environment metadata #{key.inspect}:\n" \
|
48
48
|
"#{e.class}: #{e}"
|
49
49
|
return
|
@@ -56,26 +56,35 @@ module Appsignal
|
|
56
56
|
when String
|
57
57
|
yielded_value
|
58
58
|
else
|
59
|
-
Appsignal.
|
60
|
-
"#{key.inspect}: Unsupported value type for " \
|
59
|
+
Appsignal.internal_logger.error "Unable to report on environment " \
|
60
|
+
"metadata #{key.inspect}: Unsupported value type for " \
|
61
61
|
"#{yielded_value.inspect}"
|
62
62
|
return
|
63
63
|
end
|
64
64
|
|
65
65
|
Appsignal::Extension.set_environment_metadata(key, value)
|
66
66
|
rescue => e
|
67
|
-
Appsignal.
|
68
|
-
"#{e.class}: #{e}"
|
67
|
+
Appsignal.internal_logger.error "Unable to report on environment " \
|
68
|
+
"metadata:\n#{e.class}: #{e}"
|
69
69
|
end
|
70
70
|
|
71
71
|
# @see report_supported_gems
|
72
72
|
SUPPORTED_GEMS = %w[
|
73
73
|
actioncable
|
74
|
+
actionmailer
|
74
75
|
activejob
|
76
|
+
activerecord
|
75
77
|
capistrano
|
76
78
|
celluloid
|
77
79
|
data_mapper
|
78
80
|
delayed_job
|
81
|
+
dry-monitor
|
82
|
+
elasticsearch
|
83
|
+
excon
|
84
|
+
faraday
|
85
|
+
gvltools
|
86
|
+
hanami
|
87
|
+
hiredis
|
79
88
|
mongo_ruby_driver
|
80
89
|
padrino
|
81
90
|
passenger
|
@@ -85,7 +94,9 @@ module Appsignal
|
|
85
94
|
rails
|
86
95
|
rake
|
87
96
|
redis
|
97
|
+
redis-client
|
88
98
|
resque
|
99
|
+
rom
|
89
100
|
sequel
|
90
101
|
shoryuken
|
91
102
|
sidekiq
|
@@ -114,15 +125,15 @@ module Appsignal
|
|
114
125
|
report("ruby_#{gem_name}_version") { gem_spec.version.to_s }
|
115
126
|
end
|
116
127
|
rescue => e
|
117
|
-
Appsignal.
|
128
|
+
Appsignal.internal_logger.error "Unable to report supported gems:\n" \
|
118
129
|
"#{e.class}: #{e}"
|
119
130
|
end
|
120
131
|
|
121
132
|
def self.report_enabled(feature)
|
122
133
|
Appsignal::Environment.report("ruby_#{feature}_enabled") { true }
|
123
134
|
rescue => e
|
124
|
-
Appsignal.
|
125
|
-
"#{e.class}: #{e}"
|
135
|
+
Appsignal.internal_logger.error "Unable to report integration " \
|
136
|
+
"enabled:\n#{e.class}: #{e}"
|
126
137
|
end
|
127
138
|
end
|
128
139
|
end
|
@@ -71,12 +71,6 @@ module Appsignal
|
|
71
71
|
attach_function :appsignal_set_gauge,
|
72
72
|
[:appsignal_string, :double, :pointer],
|
73
73
|
:void
|
74
|
-
attach_function :appsignal_set_host_gauge,
|
75
|
-
[:appsignal_string, :double],
|
76
|
-
:void
|
77
|
-
attach_function :appsignal_set_process_gauge,
|
78
|
-
[:appsignal_string, :double],
|
79
|
-
:void
|
80
74
|
attach_function :appsignal_increment_counter,
|
81
75
|
[:appsignal_string, :double, :pointer],
|
82
76
|
:void
|
@@ -248,14 +242,15 @@ module Appsignal
|
|
248
242
|
[:pointer],
|
249
243
|
:appsignal_string
|
250
244
|
|
251
|
-
Appsignal.extension_loaded = true
|
245
|
+
Appsignal.extension_loaded = true if Appsignal.respond_to? :extension_loaded=
|
252
246
|
rescue LoadError => error
|
253
247
|
error_message = "ERROR: AppSignal failed to load extension. " \
|
254
248
|
"Please run `appsignal diagnose` and email us at support@appsignal.com\n" \
|
255
249
|
"#{error.class}: #{error.message}"
|
256
|
-
Appsignal.
|
250
|
+
Appsignal.internal_logger.error(error_message) if Appsignal.respond_to? :internal_logger
|
257
251
|
Kernel.warn error_message
|
258
|
-
Appsignal.extension_loaded = false
|
252
|
+
Appsignal.extension_loaded = false if Appsignal.respond_to? :extension_loaded=
|
253
|
+
raise error if ENV["_APPSIGNAL_EXTENSION_INSTALL"] == "true"
|
259
254
|
end
|
260
255
|
|
261
256
|
def start
|
@@ -319,14 +314,6 @@ module Appsignal
|
|
319
314
|
appsignal_set_gauge(make_appsignal_string(key), value, tags.pointer)
|
320
315
|
end
|
321
316
|
|
322
|
-
def set_host_gauge(key, value)
|
323
|
-
appsignal_set_host_gauge(make_appsignal_string(key), value)
|
324
|
-
end
|
325
|
-
|
326
|
-
def set_process_gauge(key, value)
|
327
|
-
appsignal_set_process_gauge(make_appsignal_string(key), value)
|
328
|
-
end
|
329
|
-
|
330
317
|
def increment_counter(key, value, tags)
|
331
318
|
appsignal_increment_counter(make_appsignal_string(key), value, tags.pointer)
|
332
319
|
end
|
data/lib/appsignal/extension.rb
CHANGED
@@ -12,7 +12,7 @@ rescue LoadError => error
|
|
12
12
|
error_message = "ERROR: AppSignal failed to load extension. " \
|
13
13
|
"Please run `appsignal diagnose` and email us at support@appsignal.com\n" \
|
14
14
|
"#{error.class}: #{error.message}"
|
15
|
-
Appsignal.
|
15
|
+
Appsignal.internal_logger.error(error_message)
|
16
16
|
Kernel.warn error_message
|
17
17
|
Appsignal.extension_loaded = false
|
18
18
|
end
|
@@ -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,22 +10,24 @@ 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
|
|
17
|
-
def set_host_gauge(
|
18
|
-
Appsignal::
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
def set_host_gauge(_key, _value)
|
18
|
+
Appsignal::Utils::DeprecationMessage.message \
|
19
|
+
"The `set_host_gauge` method has been deprecated. " \
|
20
|
+
"Calling this method has no effect. " \
|
21
|
+
"Please remove method call in the following file to remove " \
|
22
|
+
"this message.\n#{caller.first}"
|
22
23
|
end
|
23
24
|
|
24
|
-
def set_process_gauge(
|
25
|
-
Appsignal::
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
def set_process_gauge(_key, _value)
|
26
|
+
Appsignal::Utils::DeprecationMessage.message \
|
27
|
+
"The `set_process_gauge` method has been deprecated. " \
|
28
|
+
"Calling this method has no effect. " \
|
29
|
+
"Please remove method call in the following file to remove " \
|
30
|
+
"this message.\n#{caller.first}"
|
29
31
|
end
|
30
32
|
|
31
33
|
def increment_counter(key, value = 1.0, tags = {})
|
@@ -35,7 +37,7 @@ module Appsignal
|
|
35
37
|
Appsignal::Utils::Data.generate(tags)
|
36
38
|
)
|
37
39
|
rescue RangeError
|
38
|
-
Appsignal.
|
40
|
+
Appsignal.internal_logger
|
39
41
|
.warn("Counter value #{value} for key '#{key}' is too big")
|
40
42
|
end
|
41
43
|
|
@@ -46,7 +48,7 @@ module Appsignal
|
|
46
48
|
Appsignal::Utils::Data.generate(tags)
|
47
49
|
)
|
48
50
|
rescue RangeError
|
49
|
-
Appsignal.
|
51
|
+
Appsignal.internal_logger
|
50
52
|
.warn("Distribution value #{value} for key '#{key}' is too big")
|
51
53
|
end
|
52
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
|