appsignal 3.9.3-java → 3.11.0-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/.github/workflows/ci.yml +22 -19
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +180 -0
- data/Gemfile +1 -0
- data/README.md +0 -1
- data/Rakefile +1 -1
- data/benchmark.rake +99 -42
- data/build_matrix.yml +10 -12
- data/gemfiles/webmachine1.gemfile +5 -4
- data/lib/appsignal/cli/demo.rb +0 -1
- data/lib/appsignal/config.rb +57 -97
- data/lib/appsignal/demo.rb +15 -20
- data/lib/appsignal/environment.rb +6 -1
- data/lib/appsignal/event_formatter/rom/sql_formatter.rb +1 -0
- data/lib/appsignal/event_formatter.rb +3 -2
- data/lib/appsignal/helpers/instrumentation.rb +490 -16
- data/lib/appsignal/hooks/action_cable.rb +21 -16
- data/lib/appsignal/hooks/active_job.rb +15 -14
- data/lib/appsignal/hooks/delayed_job.rb +1 -1
- data/lib/appsignal/hooks/shoryuken.rb +3 -63
- data/lib/appsignal/integrations/action_cable.rb +5 -7
- data/lib/appsignal/integrations/active_support_notifications.rb +1 -0
- data/lib/appsignal/integrations/capistrano/capistrano_2_tasks.rb +36 -35
- data/lib/appsignal/integrations/data_mapper.rb +1 -0
- data/lib/appsignal/integrations/delayed_job_plugin.rb +27 -33
- data/lib/appsignal/integrations/dry_monitor.rb +1 -0
- data/lib/appsignal/integrations/excon.rb +1 -0
- data/lib/appsignal/integrations/http.rb +1 -0
- data/lib/appsignal/integrations/net_http.rb +1 -0
- data/lib/appsignal/integrations/object.rb +6 -0
- data/lib/appsignal/integrations/padrino.rb +21 -25
- data/lib/appsignal/integrations/que.rb +13 -20
- data/lib/appsignal/integrations/railtie.rb +1 -1
- data/lib/appsignal/integrations/rake.rb +45 -15
- data/lib/appsignal/integrations/redis.rb +1 -0
- data/lib/appsignal/integrations/redis_client.rb +1 -0
- data/lib/appsignal/integrations/resque.rb +2 -5
- data/lib/appsignal/integrations/shoryuken.rb +75 -0
- data/lib/appsignal/integrations/sidekiq.rb +7 -25
- data/lib/appsignal/integrations/unicorn.rb +1 -0
- data/lib/appsignal/integrations/webmachine.rb +12 -9
- data/lib/appsignal/logger.rb +7 -3
- data/lib/appsignal/probes/helpers.rb +1 -0
- data/lib/appsignal/probes/mri.rb +1 -0
- data/lib/appsignal/probes/sidekiq.rb +1 -0
- data/lib/appsignal/probes.rb +3 -0
- data/lib/appsignal/rack/abstract_middleware.rb +67 -24
- data/lib/appsignal/rack/body_wrapper.rb +143 -0
- data/lib/appsignal/rack/event_handler.rb +39 -8
- data/lib/appsignal/rack/generic_instrumentation.rb +6 -4
- data/lib/appsignal/rack/grape_middleware.rb +3 -2
- data/lib/appsignal/rack/hanami_middleware.rb +1 -1
- data/lib/appsignal/rack/instrumentation_middleware.rb +62 -0
- data/lib/appsignal/rack/rails_instrumentation.rb +1 -3
- data/lib/appsignal/rack/sinatra_instrumentation.rb +1 -3
- data/lib/appsignal/rack/streaming_listener.rb +14 -59
- data/lib/appsignal/rack.rb +60 -0
- data/lib/appsignal/span.rb +1 -0
- data/lib/appsignal/transaction.rb +353 -104
- data/lib/appsignal/utils/data.rb +0 -1
- data/lib/appsignal/utils/hash_sanitizer.rb +0 -1
- data/lib/appsignal/utils/integration_logger.rb +0 -13
- data/lib/appsignal/utils/integration_memory_logger.rb +0 -13
- data/lib/appsignal/utils/json.rb +0 -1
- data/lib/appsignal/utils/query_params_sanitizer.rb +0 -1
- data/lib/appsignal/utils/stdout_and_logger_message.rb +0 -1
- data/lib/appsignal/utils.rb +6 -0
- data/lib/appsignal/version.rb +1 -1
- data/lib/appsignal.rb +9 -6
- data/spec/lib/appsignal/capistrano2_spec.rb +1 -1
- data/spec/lib/appsignal/config_spec.rb +139 -43
- data/spec/lib/appsignal/hooks/action_cable_spec.rb +43 -74
- data/spec/lib/appsignal/hooks/activejob_spec.rb +9 -0
- data/spec/lib/appsignal/hooks/delayed_job_spec.rb +2 -443
- data/spec/lib/appsignal/hooks/rake_spec.rb +100 -17
- data/spec/lib/appsignal/hooks/shoryuken_spec.rb +0 -171
- data/spec/lib/appsignal/integrations/delayed_job_plugin_spec.rb +459 -0
- data/spec/lib/appsignal/integrations/padrino_spec.rb +181 -131
- data/spec/lib/appsignal/integrations/que_spec.rb +3 -4
- data/spec/lib/appsignal/integrations/shoryuken_spec.rb +167 -0
- data/spec/lib/appsignal/integrations/sidekiq_spec.rb +4 -4
- data/spec/lib/appsignal/integrations/sinatra_spec.rb +10 -2
- data/spec/lib/appsignal/integrations/webmachine_spec.rb +77 -17
- data/spec/lib/appsignal/rack/abstract_middleware_spec.rb +144 -11
- data/spec/lib/appsignal/rack/body_wrapper_spec.rb +263 -0
- data/spec/lib/appsignal/rack/event_handler_spec.rb +81 -10
- data/spec/lib/appsignal/rack/generic_instrumentation_spec.rb +70 -17
- data/spec/lib/appsignal/rack/grape_middleware_spec.rb +1 -1
- data/spec/lib/appsignal/rack/instrumentation_middleware_spec.rb +38 -0
- data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +4 -2
- data/spec/lib/appsignal/rack/streaming_listener_spec.rb +43 -120
- data/spec/lib/appsignal/rack_spec.rb +63 -0
- data/spec/lib/appsignal/transaction_spec.rb +1675 -953
- data/spec/lib/appsignal/utils/integration_logger_spec.rb +12 -16
- data/spec/lib/appsignal/utils/integration_memory_logger_spec.rb +0 -10
- data/spec/lib/appsignal_spec.rb +517 -13
- data/spec/support/helpers/transaction_helpers.rb +44 -20
- data/spec/support/matchers/transaction.rb +15 -1
- data/spec/support/mocks/dummy_app.rb +1 -1
- data/spec/support/testing.rb +1 -1
- metadata +12 -4
- data/support/check_versions +0 -22
data/lib/appsignal/config.rb
CHANGED
|
@@ -10,6 +10,7 @@ module Appsignal
|
|
|
10
10
|
class Config
|
|
11
11
|
include Appsignal::Utils::StdoutAndLoggerMessage
|
|
12
12
|
|
|
13
|
+
# @api private
|
|
13
14
|
DEFAULT_CONFIG = {
|
|
14
15
|
:activejob_report_errors => "all",
|
|
15
16
|
:ca_file_path => File.expand_path(File.join("../../../resources/cacert.pem"), __FILE__),
|
|
@@ -23,6 +24,7 @@ module Appsignal
|
|
|
23
24
|
:enable_gvl_global_timer => true,
|
|
24
25
|
:enable_gvl_waiting_threads => true,
|
|
25
26
|
:enable_rails_error_reporter => true,
|
|
27
|
+
:enable_rake_performance_instrumentation => false,
|
|
26
28
|
:endpoint => "https://push.appsignal.com",
|
|
27
29
|
:files_world_accessible => true,
|
|
28
30
|
:filter_metadata => [],
|
|
@@ -66,15 +68,31 @@ module Appsignal
|
|
|
66
68
|
"trace" => ::Logger::DEBUG
|
|
67
69
|
}.freeze
|
|
68
70
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
+
# @api private
|
|
72
|
+
ENV_STRING_KEYS = {
|
|
71
73
|
"APPSIGNAL_ACTIVEJOB_REPORT_ERRORS" => :activejob_report_errors,
|
|
72
74
|
"APPSIGNAL_APP_NAME" => :name,
|
|
73
75
|
"APPSIGNAL_BIND_ADDRESS" => :bind_address,
|
|
74
76
|
"APPSIGNAL_CA_FILE_PATH" => :ca_file_path,
|
|
75
|
-
"
|
|
77
|
+
"APPSIGNAL_HOSTNAME" => :hostname,
|
|
78
|
+
"APPSIGNAL_HOST_ROLE" => :host_role,
|
|
79
|
+
"APPSIGNAL_HTTP_PROXY" => :http_proxy,
|
|
80
|
+
"APPSIGNAL_LOG" => :log,
|
|
81
|
+
"APPSIGNAL_LOG_LEVEL" => :log_level,
|
|
82
|
+
"APPSIGNAL_LOG_PATH" => :log_path,
|
|
83
|
+
"APPSIGNAL_LOGGING_ENDPOINT" => :logging_endpoint,
|
|
84
|
+
"APPSIGNAL_PUSH_API_ENDPOINT" => :endpoint,
|
|
85
|
+
"APPSIGNAL_PUSH_API_KEY" => :push_api_key,
|
|
86
|
+
"APPSIGNAL_SIDEKIQ_REPORT_ERRORS" => :sidekiq_report_errors,
|
|
87
|
+
"APPSIGNAL_STATSD_PORT" => :statsd_port,
|
|
88
|
+
"APPSIGNAL_WORKING_DIRECTORY_PATH" => :working_directory_path,
|
|
89
|
+
"APPSIGNAL_WORKING_DIR_PATH" => :working_dir_path,
|
|
90
|
+
"APP_REVISION" => :revision
|
|
91
|
+
}.freeze
|
|
92
|
+
# @api private
|
|
93
|
+
ENV_BOOLEAN_KEYS = {
|
|
94
|
+
"APPSIGNAL_ACTIVE" => :active,
|
|
76
95
|
"APPSIGNAL_DEBUG" => :debug,
|
|
77
|
-
"APPSIGNAL_DNS_SERVERS" => :dns_servers,
|
|
78
96
|
"APPSIGNAL_ENABLE_ALLOCATION_TRACKING" => :enable_allocation_tracking,
|
|
79
97
|
"APPSIGNAL_ENABLE_HOST_METRICS" => :enable_host_metrics,
|
|
80
98
|
"APPSIGNAL_ENABLE_MINUTELY_PROBES" => :enable_minutely_probes,
|
|
@@ -83,100 +101,36 @@ module Appsignal
|
|
|
83
101
|
"APPSIGNAL_ENABLE_GVL_GLOBAL_TIMER" => :enable_gvl_global_timer,
|
|
84
102
|
"APPSIGNAL_ENABLE_GVL_WAITING_THREADS" => :enable_gvl_waiting_threads,
|
|
85
103
|
"APPSIGNAL_ENABLE_RAILS_ERROR_REPORTER" => :enable_rails_error_reporter,
|
|
104
|
+
"APPSIGNAL_ENABLE_RAKE_PERFORMANCE_INSTRUMENTATION" =>
|
|
105
|
+
:enable_rake_performance_instrumentation,
|
|
86
106
|
"APPSIGNAL_FILES_WORLD_ACCESSIBLE" => :files_world_accessible,
|
|
87
|
-
"APPSIGNAL_FILTER_METADATA" => :filter_metadata,
|
|
88
|
-
"APPSIGNAL_FILTER_PARAMETERS" => :filter_parameters,
|
|
89
|
-
"APPSIGNAL_FILTER_SESSION_DATA" => :filter_session_data,
|
|
90
|
-
"APPSIGNAL_HOSTNAME" => :hostname,
|
|
91
|
-
"APPSIGNAL_HOST_ROLE" => :host_role,
|
|
92
|
-
"APPSIGNAL_HTTP_PROXY" => :http_proxy,
|
|
93
|
-
"APPSIGNAL_IGNORE_ACTIONS" => :ignore_actions,
|
|
94
|
-
"APPSIGNAL_IGNORE_ERRORS" => :ignore_errors,
|
|
95
|
-
"APPSIGNAL_IGNORE_LOGS" => :ignore_logs,
|
|
96
|
-
"APPSIGNAL_IGNORE_NAMESPACES" => :ignore_namespaces,
|
|
97
107
|
"APPSIGNAL_INSTRUMENT_HTTP_RB" => :instrument_http_rb,
|
|
98
108
|
"APPSIGNAL_INSTRUMENT_NET_HTTP" => :instrument_net_http,
|
|
99
109
|
"APPSIGNAL_INSTRUMENT_REDIS" => :instrument_redis,
|
|
100
110
|
"APPSIGNAL_INSTRUMENT_SEQUEL" => :instrument_sequel,
|
|
101
|
-
"APPSIGNAL_LOG" => :log,
|
|
102
|
-
"APPSIGNAL_LOG_LEVEL" => :log_level,
|
|
103
|
-
"APPSIGNAL_LOG_PATH" => :log_path,
|
|
104
|
-
"APPSIGNAL_LOGGING_ENDPOINT" => :logging_endpoint,
|
|
105
|
-
"APPSIGNAL_PUSH_API_ENDPOINT" => :endpoint,
|
|
106
|
-
"APPSIGNAL_PUSH_API_KEY" => :push_api_key,
|
|
107
|
-
"APPSIGNAL_REQUEST_HEADERS" => :request_headers,
|
|
108
111
|
"APPSIGNAL_RUNNING_IN_CONTAINER" => :running_in_container,
|
|
109
112
|
"APPSIGNAL_SEND_ENVIRONMENT_METADATA" => :send_environment_metadata,
|
|
110
113
|
"APPSIGNAL_SEND_PARAMS" => :send_params,
|
|
111
114
|
"APPSIGNAL_SEND_SESSION_DATA" => :send_session_data,
|
|
112
|
-
"APPSIGNAL_SIDEKIQ_REPORT_ERRORS" => :sidekiq_report_errors,
|
|
113
115
|
"APPSIGNAL_SKIP_SESSION_DATA" => :skip_session_data,
|
|
114
|
-
"
|
|
115
|
-
"APPSIGNAL_TRANSACTION_DEBUG_MODE" => :transaction_debug_mode,
|
|
116
|
-
"APPSIGNAL_WORKING_DIRECTORY_PATH" => :working_directory_path,
|
|
117
|
-
"APPSIGNAL_WORKING_DIR_PATH" => :working_dir_path,
|
|
118
|
-
"APP_REVISION" => :revision
|
|
116
|
+
"APPSIGNAL_TRANSACTION_DEBUG_MODE" => :transaction_debug_mode
|
|
119
117
|
}.freeze
|
|
120
118
|
# @api private
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
APPSIGNAL_LOGGING_ENDPOINT
|
|
133
|
-
APPSIGNAL_PUSH_API_ENDPOINT
|
|
134
|
-
APPSIGNAL_PUSH_API_KEY
|
|
135
|
-
APPSIGNAL_SIDEKIQ_REPORT_ERRORS
|
|
136
|
-
APPSIGNAL_STATSD_PORT
|
|
137
|
-
APPSIGNAL_WORKING_DIRECTORY_PATH
|
|
138
|
-
APPSIGNAL_WORKING_DIR_PATH
|
|
139
|
-
APP_REVISION
|
|
140
|
-
].freeze
|
|
141
|
-
# @api private
|
|
142
|
-
ENV_BOOLEAN_KEYS = %w[
|
|
143
|
-
APPSIGNAL_ACTIVE
|
|
144
|
-
APPSIGNAL_DEBUG
|
|
145
|
-
APPSIGNAL_ENABLE_ALLOCATION_TRACKING
|
|
146
|
-
APPSIGNAL_ENABLE_HOST_METRICS
|
|
147
|
-
APPSIGNAL_ENABLE_MINUTELY_PROBES
|
|
148
|
-
APPSIGNAL_ENABLE_STATSD
|
|
149
|
-
APPSIGNAL_ENABLE_NGINX_METRICS
|
|
150
|
-
APPSIGNAL_ENABLE_GVL_GLOBAL_TIMER
|
|
151
|
-
APPSIGNAL_ENABLE_GVL_WAITING_THREADS
|
|
152
|
-
APPSIGNAL_ENABLE_RAILS_ERROR_REPORTER
|
|
153
|
-
APPSIGNAL_FILES_WORLD_ACCESSIBLE
|
|
154
|
-
APPSIGNAL_INSTRUMENT_HTTP_RB
|
|
155
|
-
APPSIGNAL_INSTRUMENT_NET_HTTP
|
|
156
|
-
APPSIGNAL_INSTRUMENT_REDIS
|
|
157
|
-
APPSIGNAL_INSTRUMENT_SEQUEL
|
|
158
|
-
APPSIGNAL_RUNNING_IN_CONTAINER
|
|
159
|
-
APPSIGNAL_SEND_ENVIRONMENT_METADATA
|
|
160
|
-
APPSIGNAL_SEND_PARAMS
|
|
161
|
-
APPSIGNAL_SEND_SESSION_DATA
|
|
162
|
-
APPSIGNAL_SKIP_SESSION_DATA
|
|
163
|
-
APPSIGNAL_TRANSACTION_DEBUG_MODE
|
|
164
|
-
].freeze
|
|
119
|
+
ENV_ARRAY_KEYS = {
|
|
120
|
+
"APPSIGNAL_DNS_SERVERS" => :dns_servers,
|
|
121
|
+
"APPSIGNAL_FILTER_METADATA" => :filter_metadata,
|
|
122
|
+
"APPSIGNAL_FILTER_PARAMETERS" => :filter_parameters,
|
|
123
|
+
"APPSIGNAL_FILTER_SESSION_DATA" => :filter_session_data,
|
|
124
|
+
"APPSIGNAL_IGNORE_ACTIONS" => :ignore_actions,
|
|
125
|
+
"APPSIGNAL_IGNORE_ERRORS" => :ignore_errors,
|
|
126
|
+
"APPSIGNAL_IGNORE_LOGS" => :ignore_logs,
|
|
127
|
+
"APPSIGNAL_IGNORE_NAMESPACES" => :ignore_namespaces,
|
|
128
|
+
"APPSIGNAL_REQUEST_HEADERS" => :request_headers
|
|
129
|
+
}.freeze
|
|
165
130
|
# @api private
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
APPSIGNAL_FILTER_PARAMETERS
|
|
170
|
-
APPSIGNAL_FILTER_SESSION_DATA
|
|
171
|
-
APPSIGNAL_IGNORE_ACTIONS
|
|
172
|
-
APPSIGNAL_IGNORE_ERRORS
|
|
173
|
-
APPSIGNAL_IGNORE_LOGS
|
|
174
|
-
APPSIGNAL_IGNORE_NAMESPACES
|
|
175
|
-
APPSIGNAL_REQUEST_HEADERS
|
|
176
|
-
].freeze
|
|
177
|
-
ENV_FLOAT_KEYS = %w[
|
|
178
|
-
APPSIGNAL_CPU_COUNT
|
|
179
|
-
].freeze
|
|
131
|
+
ENV_FLOAT_KEYS = {
|
|
132
|
+
"APPSIGNAL_CPU_COUNT" => :cpu_count
|
|
133
|
+
}.freeze
|
|
180
134
|
|
|
181
135
|
# @attribute [r] system_config
|
|
182
136
|
# Config detected on the system level.
|
|
@@ -207,8 +161,10 @@ module Appsignal
|
|
|
207
161
|
# @api private
|
|
208
162
|
# @return [Hash]
|
|
209
163
|
|
|
164
|
+
# @api private
|
|
210
165
|
attr_reader :root_path, :env, :config_hash, :system_config,
|
|
211
166
|
:initial_config, :file_config, :env_config, :override_config
|
|
167
|
+
# @api private
|
|
212
168
|
attr_accessor :logger
|
|
213
169
|
|
|
214
170
|
# Initialize a new configuration object for AppSignal.
|
|
@@ -312,6 +268,7 @@ module Appsignal
|
|
|
312
268
|
config_hash[key] = value
|
|
313
269
|
end
|
|
314
270
|
|
|
271
|
+
# @api private
|
|
315
272
|
def log_level
|
|
316
273
|
level = ::Logger::DEBUG if config_hash[:debug] || config_hash[:transaction_debug_mode]
|
|
317
274
|
option = config_hash[:log_level]
|
|
@@ -322,6 +279,7 @@ module Appsignal
|
|
|
322
279
|
level.nil? ? Appsignal::Config::DEFAULT_LOG_LEVEL : level
|
|
323
280
|
end
|
|
324
281
|
|
|
282
|
+
# @api private
|
|
325
283
|
def log_file_path
|
|
326
284
|
return @log_file_path if defined? @log_file_path
|
|
327
285
|
|
|
@@ -356,6 +314,7 @@ module Appsignal
|
|
|
356
314
|
@valid && config_hash[:active]
|
|
357
315
|
end
|
|
358
316
|
|
|
317
|
+
# @api private
|
|
359
318
|
def write_to_environment # rubocop:disable Metrics/AbcSize
|
|
360
319
|
ENV["_APPSIGNAL_ACTIVE"] = active?.to_s
|
|
361
320
|
ENV["_APPSIGNAL_AGENT_PATH"] = File.expand_path("../../ext", __dir__).to_s
|
|
@@ -401,6 +360,7 @@ module Appsignal
|
|
|
401
360
|
ENV["_APP_REVISION"] = config_hash[:revision].to_s
|
|
402
361
|
end
|
|
403
362
|
|
|
363
|
+
# @api private
|
|
404
364
|
def validate
|
|
405
365
|
# Strip path from endpoint so we're backwards compatible with
|
|
406
366
|
# earlier versions of the gem.
|
|
@@ -499,35 +459,35 @@ module Appsignal
|
|
|
499
459
|
config = {}
|
|
500
460
|
|
|
501
461
|
# Configuration with string type
|
|
502
|
-
ENV_STRING_KEYS.each do |
|
|
503
|
-
env_var = ENV.fetch(
|
|
462
|
+
ENV_STRING_KEYS.each do |env_key, option|
|
|
463
|
+
env_var = ENV.fetch(env_key, nil)
|
|
504
464
|
next unless env_var
|
|
505
465
|
|
|
506
|
-
config[
|
|
466
|
+
config[option] = env_var
|
|
507
467
|
end
|
|
508
468
|
|
|
509
469
|
# Configuration with boolean type
|
|
510
|
-
ENV_BOOLEAN_KEYS.each do |
|
|
511
|
-
env_var = ENV.fetch(
|
|
470
|
+
ENV_BOOLEAN_KEYS.each do |env_key, option|
|
|
471
|
+
env_var = ENV.fetch(env_key, nil)
|
|
512
472
|
next unless env_var
|
|
513
473
|
|
|
514
|
-
config[
|
|
474
|
+
config[option] = env_var.casecmp("true").zero?
|
|
515
475
|
end
|
|
516
476
|
|
|
517
477
|
# Configuration with array of strings type
|
|
518
|
-
ENV_ARRAY_KEYS.each do |
|
|
519
|
-
env_var = ENV.fetch(
|
|
478
|
+
ENV_ARRAY_KEYS.each do |env_key, option|
|
|
479
|
+
env_var = ENV.fetch(env_key, nil)
|
|
520
480
|
next unless env_var
|
|
521
481
|
|
|
522
|
-
config[
|
|
482
|
+
config[option] = env_var.split(",")
|
|
523
483
|
end
|
|
524
484
|
|
|
525
485
|
# Configuration with float type
|
|
526
|
-
ENV_FLOAT_KEYS.each do |
|
|
527
|
-
env_var = ENV.fetch(
|
|
486
|
+
ENV_FLOAT_KEYS.each do |env_key, option|
|
|
487
|
+
env_var = ENV.fetch(env_key, nil)
|
|
528
488
|
next unless env_var
|
|
529
489
|
|
|
530
|
-
config[
|
|
490
|
+
config[option] = env_var.to_f
|
|
531
491
|
end
|
|
532
492
|
|
|
533
493
|
config
|
data/lib/appsignal/demo.rb
CHANGED
|
@@ -39,18 +39,15 @@ module Appsignal
|
|
|
39
39
|
private
|
|
40
40
|
|
|
41
41
|
def create_example_error_request
|
|
42
|
-
transaction = Appsignal::Transaction.create(
|
|
43
|
-
SecureRandom.uuid,
|
|
44
|
-
Appsignal::Transaction::HTTP_REQUEST,
|
|
45
|
-
rack_request
|
|
46
|
-
)
|
|
42
|
+
transaction = Appsignal::Transaction.create(Appsignal::Transaction::HTTP_REQUEST)
|
|
47
43
|
begin
|
|
48
44
|
raise TestError,
|
|
49
45
|
"Hello world! This is an error used for demonstration purposes."
|
|
50
46
|
rescue => error
|
|
51
47
|
Appsignal.set_error(error)
|
|
52
48
|
end
|
|
53
|
-
transaction
|
|
49
|
+
add_params_to(transaction)
|
|
50
|
+
add_headers_to(transaction)
|
|
54
51
|
transaction.set_metadata("path", "/hello")
|
|
55
52
|
transaction.set_metadata("method", "GET")
|
|
56
53
|
transaction.set_action("DemoController#hello")
|
|
@@ -59,16 +56,13 @@ module Appsignal
|
|
|
59
56
|
end
|
|
60
57
|
|
|
61
58
|
def create_example_performance_request
|
|
62
|
-
transaction = Appsignal::Transaction.create(
|
|
63
|
-
SecureRandom.uuid,
|
|
64
|
-
Appsignal::Transaction::HTTP_REQUEST,
|
|
65
|
-
rack_request
|
|
66
|
-
)
|
|
59
|
+
transaction = Appsignal::Transaction.create(Appsignal::Transaction::HTTP_REQUEST)
|
|
67
60
|
Appsignal.instrument "action_view.render", "Render hello.html.erb",
|
|
68
61
|
"<h1>Hello world!</h1>" do
|
|
69
62
|
sleep 2
|
|
70
63
|
end
|
|
71
|
-
transaction
|
|
64
|
+
add_params_to(transaction)
|
|
65
|
+
add_headers_to(transaction)
|
|
72
66
|
transaction.set_metadata("path", "/hello")
|
|
73
67
|
transaction.set_metadata("method", "GET")
|
|
74
68
|
transaction.set_action("DemoController#hello")
|
|
@@ -80,13 +74,15 @@ module Appsignal
|
|
|
80
74
|
transaction.set_metadata("demo_sample", "true")
|
|
81
75
|
end
|
|
82
76
|
|
|
83
|
-
def
|
|
84
|
-
|
|
85
|
-
"
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
77
|
+
def add_params_to(transaction)
|
|
78
|
+
transaction.set_params(
|
|
79
|
+
"controller" => "demo",
|
|
80
|
+
"action" => "hello"
|
|
81
|
+
)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def add_headers_to(transaction)
|
|
85
|
+
transaction.set_headers(
|
|
90
86
|
"REMOTE_ADDR" => "127.0.0.1",
|
|
91
87
|
"REQUEST_METHOD" => "GET",
|
|
92
88
|
"SERVER_NAME" => "localhost",
|
|
@@ -102,7 +98,6 @@ module Appsignal
|
|
|
102
98
|
"HTTP_USER_AGENT" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0)",
|
|
103
99
|
"HTTP_REFERER" => "http://appsignal.com/accounts"
|
|
104
100
|
)
|
|
105
|
-
::Rack::Request.new(env)
|
|
106
101
|
end
|
|
107
102
|
end
|
|
108
103
|
end
|
|
@@ -121,7 +121,12 @@ module Appsignal
|
|
|
121
121
|
def self.report_supported_gems
|
|
122
122
|
return unless defined?(Bundler) # Do nothing if Bundler is not present
|
|
123
123
|
|
|
124
|
-
bundle_gem_specs =
|
|
124
|
+
bundle_gem_specs =
|
|
125
|
+
if ::Bundler.rubygems.respond_to?(:installed_specs)
|
|
126
|
+
::Bundler.rubygems.installed_specs
|
|
127
|
+
else
|
|
128
|
+
::Bundler.rubygems.all_specs
|
|
129
|
+
end
|
|
125
130
|
SUPPORTED_GEMS.each do |gem_name|
|
|
126
131
|
gem_spec = bundle_gem_specs.find { |spec| spec.name == gem_name }
|
|
127
132
|
next unless gem_spec
|
|
@@ -10,14 +10,14 @@ module Appsignal
|
|
|
10
10
|
# event, the same object will be called intermittently in a threaded environment.
|
|
11
11
|
# So only keep global configuration as state and pass the payload around as an
|
|
12
12
|
# argument if you need to use helper methods.
|
|
13
|
-
#
|
|
14
|
-
# @api private
|
|
15
13
|
class EventFormatter
|
|
16
14
|
class << self
|
|
15
|
+
# @api private
|
|
17
16
|
def formatters
|
|
18
17
|
@formatters ||= {}
|
|
19
18
|
end
|
|
20
19
|
|
|
20
|
+
# @api private
|
|
21
21
|
def formatter_classes
|
|
22
22
|
@formatter_classes ||= {}
|
|
23
23
|
end
|
|
@@ -49,6 +49,7 @@ module Appsignal
|
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
+
# @api private
|
|
52
53
|
def format(name, payload)
|
|
53
54
|
formatter = formatters[name]
|
|
54
55
|
formatter&.format(payload)
|