oneapm_rpm 1.1.2 → 1.1.3
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/lib/one_apm/agent.rb +185 -192
- data/lib/one_apm/agent/agent/connect.rb +17 -17
- data/lib/one_apm/agent/agent/container_data_manager.rb +14 -14
- data/lib/one_apm/agent/agent/forkable_dispatcher_functions.rb +6 -35
- data/lib/one_apm/agent/agent/helpers.rb +6 -17
- data/lib/one_apm/agent/agent/start.rb +27 -27
- data/lib/one_apm/agent/agent/start_worker_thread.rb +19 -51
- data/lib/one_apm/agent/busy_calculator.rb +8 -34
- data/lib/one_apm/agent/cross_app/cross_app_monitor.rb +10 -10
- data/lib/one_apm/agent/cross_app/cross_app_tracing.rb +14 -14
- data/lib/one_apm/agent/database.rb +8 -35
- data/lib/one_apm/agent/database/active_record_helper.rb +1 -1
- data/lib/one_apm/agent/datastores.rb +2 -109
- data/lib/one_apm/agent/datastores/metric_helper.rb +1 -1
- data/lib/one_apm/agent/datastores/mongo/metric_translator.rb +3 -3
- data/lib/one_apm/agent/datastores/mongo/statement_formatter.rb +2 -2
- data/lib/one_apm/agent/harvester.rb +3 -6
- data/lib/one_apm/agent/inbound_request_monitor.rb +2 -2
- data/lib/one_apm/agent/javascript_instrumentor.rb +28 -28
- data/lib/one_apm/agent/sampler.rb +1 -1
- data/lib/one_apm/agent/sampler_collection.rb +6 -9
- data/lib/one_apm/agent/samplers/cpu_sampler.rb +4 -4
- data/lib/one_apm/agent/samplers/delayed_job_sampler.rb +5 -5
- data/lib/one_apm/agent/samplers/memory_sampler.rb +5 -5
- data/lib/one_apm/agent/samplers/object_sampler.rb +1 -1
- data/lib/one_apm/agent/samplers/vm_sampler.rb +6 -6
- data/lib/one_apm/agent/synthetics_monitor.rb +2 -2
- data/lib/one_apm/agent/threading/agent_thread.rb +6 -6
- data/lib/one_apm/agent/threading/backtrace_service.rb +9 -9
- data/lib/one_apm/agent/threading/thread_profile.rb +3 -3
- data/lib/one_apm/collector/collector/helper.rb +10 -10
- data/lib/one_apm/collector/collector/http_connection.rb +14 -14
- data/lib/one_apm/collector/collector/server_methods.rb +12 -12
- data/lib/one_apm/collector/collector_service.rb +8 -8
- data/lib/one_apm/collector/commands/thread_profiler_session.rb +4 -4
- data/lib/one_apm/collector/commands/xray_session.rb +1 -1
- data/lib/one_apm/collector/commands/xray_session_collection.rb +10 -10
- data/lib/one_apm/collector/containers/agent_command_router.rb +7 -7
- data/lib/one_apm/collector/containers/custom_event_aggregator.rb +6 -6
- data/lib/one_apm/collector/containers/error_collector.rb +16 -16
- data/lib/one_apm/collector/containers/sql_sampler.rb +8 -11
- data/lib/one_apm/collector/containers/transaction_event_aggregator.rb +15 -15
- data/lib/one_apm/collector/containers/transaction_sampler.rb +14 -16
- data/lib/one_apm/{agent/pipe/pipe_service.rb → collector/forked_process_service.rb} +3 -3
- data/lib/one_apm/collector/stats_engine/gc_profiler.rb +3 -3
- data/lib/one_apm/collector/stats_engine/metric_stats.rb +4 -4
- data/lib/one_apm/collector/stats_engine/stats_hash.rb +2 -2
- data/lib/one_apm/configuration.rb +16 -16
- data/lib/one_apm/configuration/autostart.rb +4 -4
- data/lib/one_apm/configuration/default_source.rb +9 -9
- data/lib/one_apm/configuration/environment_source.rb +1 -1
- data/lib/one_apm/configuration/high_security_source.rb +1 -1
- data/lib/one_apm/configuration/yaml_source.rb +7 -7
- data/lib/one_apm/errors/noticed_error.rb +2 -2
- data/lib/one_apm/frameworks/external.rb +2 -0
- data/lib/one_apm/frameworks/rails.rb +8 -18
- data/lib/one_apm/frameworks/rails3.rb +1 -0
- data/lib/one_apm/frameworks/rails4.rb +2 -6
- data/lib/one_apm/frameworks/ruby.rb +7 -2
- data/lib/one_apm/frameworks/sinatra.rb +1 -2
- data/lib/one_apm/inst/3rd/active_merchant.rb +1 -1
- data/lib/one_apm/inst/3rd/acts_as_solr.rb +2 -2
- data/lib/one_apm/inst/3rd/authlogic.rb +1 -1
- data/lib/one_apm/inst/3rd/sunspot.rb +1 -1
- data/lib/one_apm/inst/background_job/active_job.rb +1 -1
- data/lib/one_apm/inst/background_job/delayed_job.rb +4 -4
- data/lib/one_apm/inst/background_job/event_machine_standalone.rb +2 -2
- data/lib/one_apm/inst/background_job/resque.rb +11 -11
- data/lib/one_apm/inst/background_job/sidekiq.rb +5 -5
- data/lib/one_apm/inst/dispatcher/passenger.rb +4 -4
- data/lib/one_apm/inst/dispatcher/puma.rb +23 -0
- data/lib/one_apm/inst/dispatcher/rainbows.rb +2 -2
- data/lib/one_apm/inst/framework/grape.rb +4 -4
- data/lib/one_apm/inst/framework/padrino.rb +2 -2
- data/lib/one_apm/inst/framework/sinatra.rb +9 -9
- data/lib/one_apm/inst/framework/sinatra/transaction_namer.rb +1 -1
- data/lib/one_apm/inst/http_clients/curb.rb +6 -6
- data/lib/one_apm/inst/http_clients/excon.rb +4 -4
- data/lib/one_apm/inst/http_clients/excon/middleware.rb +3 -3
- data/lib/one_apm/inst/http_clients/httpclient.rb +1 -1
- data/lib/one_apm/inst/http_clients/net.rb +2 -2
- data/lib/one_apm/inst/http_clients/typhoeus.rb +2 -2
- data/lib/one_apm/inst/nosql/memcache.rb +7 -7
- data/lib/one_apm/inst/nosql/mongo.rb +6 -6
- data/lib/one_apm/inst/nosql/mongo_moped.rb +2 -2
- data/lib/one_apm/inst/nosql/redis.rb +3 -3
- data/lib/one_apm/inst/orm/active_record.rb +4 -4
- data/lib/one_apm/inst/orm/active_record_4.rb +2 -2
- data/lib/one_apm/inst/orm/sequel.rb +4 -4
- data/lib/one_apm/inst/rack.rb +3 -3
- data/lib/one_apm/inst/rack/rack_builder.rb +4 -4
- data/lib/one_apm/inst/rails/action_controller.rb +7 -7
- data/lib/one_apm/inst/rails/action_web_service.rb +1 -1
- data/lib/one_apm/inst/rails/errors.rb +1 -1
- data/lib/one_apm/inst/rails3/action_controller.rb +6 -6
- data/lib/one_apm/inst/rails3/errors.rb +1 -1
- data/lib/one_apm/inst/rails4/action_controller.rb +1 -1
- data/lib/one_apm/inst/rails4/action_controller_subscriber.rb +4 -4
- data/lib/one_apm/inst/rails4/action_view.rb +2 -2
- data/lib/one_apm/inst/rails4/action_view_subscriber.rb +4 -4
- data/lib/one_apm/inst/rails4/active_record_subscriber.rb +7 -7
- data/lib/one_apm/inst/rails4/errors.rb +1 -1
- data/lib/one_apm/inst/rails_middleware.rb +2 -2
- data/lib/one_apm/inst/support/evented_subscriber.rb +2 -2
- data/lib/one_apm/inst/support/queue_time.rb +1 -1
- data/lib/one_apm/inst/transaction_base.rb +6 -6
- data/lib/one_apm/logger/agent_logger.rb +8 -8
- data/lib/one_apm/logger/audit_logger.rb +8 -8
- data/lib/one_apm/logger/memory_logger.rb +1 -1
- data/lib/one_apm/logger/null_logger.rb +1 -3
- data/lib/one_apm/manager.rb +249 -0
- data/lib/one_apm/metrics/metric_spec.rb +1 -1
- data/lib/one_apm/metrics/stats.rb +1 -1
- data/lib/one_apm/probe.rb +1 -1
- data/lib/one_apm/probe/framework_loader.rb +2 -2
- data/lib/one_apm/probe/instance_methods.rb +19 -19
- data/lib/one_apm/probe/instrumentation.rb +5 -5
- data/lib/one_apm/rack/browser_monitoring.rb +6 -6
- data/lib/one_apm/rack/middleware_hooks.rb +1 -1
- data/lib/one_apm/rack/middleware_tracing.rb +2 -2
- data/lib/one_apm/support/chained_call.rb +1 -1
- data/lib/one_apm/support/coerce.rb +1 -1
- data/lib/one_apm/support/collection_helper.rb +1 -1
- data/lib/one_apm/support/encoders.rb +1 -1
- data/lib/one_apm/support/environment_report.rb +10 -10
- data/lib/one_apm/{agent → support}/event/event_listener.rb +3 -3
- data/lib/one_apm/{agent → support}/event/event_loop.rb +8 -8
- data/lib/one_apm/{agent → support}/event/timer.rb +1 -1
- data/lib/one_apm/{agent → support}/event/worker_loop.rb +5 -19
- data/lib/one_apm/{agent/pipe/pipe_channel_manager.rb → support/forked_process_channel.rb} +13 -51
- data/lib/one_apm/support/json_marshaller.rb +6 -6
- data/lib/one_apm/support/json_wrapper.rb +2 -2
- data/lib/one_apm/support/language_support.rb +1 -1
- data/lib/one_apm/support/library_detection.rb +5 -5
- data/lib/one_apm/support/marshaller.rb +1 -1
- data/lib/one_apm/support/method_tracer.rb +12 -12
- data/lib/one_apm/support/method_tracer/helpers.rb +6 -6
- data/lib/one_apm/support/system_info.rb +2 -2
- data/lib/one_apm/support/traced_method_stack.rb +4 -4
- data/lib/one_apm/support/vm/monotonic_gc_profiler.rb +1 -1
- data/lib/one_apm/support/vm/mri_vm.rb +1 -1
- data/lib/one_apm/transaction.rb +3 -3
- data/lib/one_apm/transaction/class_methods.rb +3 -3
- data/lib/one_apm/transaction/instance_helpers.rb +3 -3
- data/lib/one_apm/transaction/sample_buffer/synthetics_sample_buffer.rb +1 -1
- data/lib/one_apm/transaction/sample_buffer/xray_sample_buffer.rb +5 -5
- data/lib/one_apm/transaction/thread_local_access.rb +2 -2
- data/lib/one_apm/transaction/transaction_apdex.rb +2 -2
- data/lib/one_apm/transaction/transaction_finish_append.rb +1 -1
- data/lib/one_apm/transaction/transaction_jruby_functions.rb +2 -2
- data/lib/one_apm/transaction/transaction_name.rb +2 -2
- data/lib/one_apm/transaction/transaction_sample.rb +1 -1
- data/lib/one_apm/transaction/transaction_sample_builder.rb +7 -7
- data/lib/one_apm/transaction/transaction_state.rb +1 -1
- data/lib/one_apm/version.rb +1 -1
- data/lib/sequel/extensions/oneapm_instrumentation.rb +7 -7
- data/oneapm.yml +6 -7
- metadata +10 -9
- data/lib/one_apm/agent/agent.rb +0 -283
@@ -22,7 +22,7 @@ module OneApm
|
|
22
22
|
@thread_profiler_session = OneApm::Collector::Commands::ThreadProfilerSession.new(@backtrace_service)
|
23
23
|
@xray_session_collection = OneApm::Collector::Commands::XraySessionCollection.new(@backtrace_service, event_listener)
|
24
24
|
|
25
|
-
@handlers['restart'] = Proc.new { OneApm::
|
25
|
+
@handlers['restart'] = Proc.new { OneApm::Manager.restart }
|
26
26
|
@handlers['start_profiler'] = Proc.new { |cmd| thread_profiler_session.handle_start_command(cmd) }
|
27
27
|
@handlers['stop_profiler'] = Proc.new { |cmd| thread_profiler_session.handle_stop_command(cmd) }
|
28
28
|
@handlers['active_xray_sessions'] = Proc.new { |cmd| xray_session_collection.handle_active_xray_sessions(cmd) }
|
@@ -33,7 +33,7 @@ module OneApm
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def one_apm_service
|
36
|
-
OneApm::
|
36
|
+
OneApm::Manager.agent.service
|
37
37
|
end
|
38
38
|
|
39
39
|
def check_for_and_handle_agent_commands
|
@@ -89,16 +89,16 @@ module OneApm
|
|
89
89
|
|
90
90
|
def log_profiles(profiles)
|
91
91
|
if profiles.empty?
|
92
|
-
|
92
|
+
OneApm::Manager.logger.debug "No thread profiles with data found to send."
|
93
93
|
else
|
94
94
|
profile_descriptions = profiles.map { |p| p.to_log_description }
|
95
|
-
|
95
|
+
OneApm::Manager.logger.debug "Sending thread profiles [#{profile_descriptions.join(", ")}]"
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
99
99
|
def get_agent_commands
|
100
100
|
commands = one_apm_service.get_agent_commands
|
101
|
-
OneApm::
|
101
|
+
OneApm::Manager.logger.info "Received get_agent_commands = #{commands.inspect}" if commands.any?
|
102
102
|
commands.map {|collector_command| OneApm::Collector::Commands::AgentCommand.new(collector_command)}
|
103
103
|
end
|
104
104
|
|
@@ -120,7 +120,7 @@ module OneApm
|
|
120
120
|
call_handler_for(agent_command)
|
121
121
|
return success
|
122
122
|
rescue AgentCommandError => e
|
123
|
-
OneApm::
|
123
|
+
OneApm::Manager.logger.debug(e)
|
124
124
|
error(e)
|
125
125
|
end
|
126
126
|
end
|
@@ -146,7 +146,7 @@ module OneApm
|
|
146
146
|
end
|
147
147
|
|
148
148
|
def unrecognized_agent_command(agent_command)
|
149
|
-
OneApm::
|
149
|
+
OneApm::Manager.logger.debug("Unrecognized agent command #{agent_command.inspect}")
|
150
150
|
end
|
151
151
|
end
|
152
152
|
end
|
@@ -16,14 +16,14 @@ module OneApm
|
|
16
16
|
|
17
17
|
def initialize
|
18
18
|
@lock = Mutex.new
|
19
|
-
@buffer = OneApm::Agent::SampledBuffer.new(OneApm::
|
19
|
+
@buffer = OneApm::Agent::SampledBuffer.new(OneApm::Manager.config[DEFAULT_CAPACITY_KEY])
|
20
20
|
@type_strings = Hash.new { |hash, key| hash[key] = key.to_s.freeze }
|
21
21
|
register_config_callbacks
|
22
22
|
end
|
23
23
|
|
24
24
|
def register_config_callbacks
|
25
|
-
OneApm::
|
26
|
-
OneApm::
|
25
|
+
OneApm::Manager.config.register_callback(DEFAULT_CAPACITY_KEY) do |max_samples|
|
26
|
+
OneApm::Manager.logger.debug "CustomEventAggregator max_samples set to #{max_samples}"
|
27
27
|
@lock.synchronize do
|
28
28
|
@buffer.capacity = max_samples
|
29
29
|
end
|
@@ -63,9 +63,9 @@ module OneApm
|
|
63
63
|
def note_dropped_events(captured_count, dropped_count)
|
64
64
|
total_count = captured_count + dropped_count
|
65
65
|
if dropped_count > 0
|
66
|
-
OneApm::
|
66
|
+
OneApm::Manager.logger.warn("Dropped #{dropped_count} custom events out of #{total_count}.")
|
67
67
|
end
|
68
|
-
engine = OneApm::
|
68
|
+
engine = OneApm::Manager.agent.stats_engine
|
69
69
|
engine.tl_record_supportability_metric_count("Events/Customer/Seen" , total_count)
|
70
70
|
engine.tl_record_supportability_metric_count("Events/Customer/Sent" , captured_count)
|
71
71
|
engine.tl_record_supportability_metric_count("Events/Customer/Dropped", dropped_count)
|
@@ -84,7 +84,7 @@ module OneApm
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def note_dropped_event(type)
|
87
|
-
|
87
|
+
OneApm::Manager.logger.log_once(:warn, "dropping_event_of_type:#{type}",
|
88
88
|
"Invalid event type name '#{type}', not recording.")
|
89
89
|
@buffer.note_dropped
|
90
90
|
end
|
@@ -24,13 +24,13 @@ module OneApm
|
|
24
24
|
# lookup of exception class names to ignore. Hash for fast access
|
25
25
|
@ignore = {}
|
26
26
|
|
27
|
-
initialize_ignored_errors(
|
27
|
+
initialize_ignored_errors(Manager.config[:'error_collector.ignore_errors'])
|
28
28
|
@lock = Mutex.new
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
OneApm::Manager.config.register_callback(:'error_collector.enabled') do |config_enabled|
|
31
|
+
OneApm::Manager.logger.debug "Errors will #{config_enabled ? '' : 'not '}be sent to the OneApm service."
|
32
32
|
end
|
33
|
-
|
33
|
+
OneApm::Manager.config.register_callback(:'error_collector.ignore_errors') do |ignore_errors|
|
34
34
|
initialize_ignored_errors(ignore_errors)
|
35
35
|
end
|
36
36
|
end
|
@@ -43,7 +43,7 @@ module OneApm
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def enabled?
|
46
|
-
|
46
|
+
OneApm::Manager.config[:'error_collector.enabled']
|
47
47
|
end
|
48
48
|
|
49
49
|
def disabled?
|
@@ -83,7 +83,7 @@ module OneApm
|
|
83
83
|
def ignore(errors)
|
84
84
|
errors.each do |error|
|
85
85
|
@ignore[error] = true
|
86
|
-
|
86
|
+
OneApm::Manager.logger.debug("Ignoring errors of type '#{error}'")
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
@@ -106,7 +106,7 @@ module OneApm
|
|
106
106
|
def error_is_ignored?(error)
|
107
107
|
error && filtered_error?(error)
|
108
108
|
rescue => e
|
109
|
-
OneApm::
|
109
|
+
OneApm::Manager.logger.error("Error '#{error}' will NOT be ignored. Exception '#{e}' while determining whether to ignore or not.", e)
|
110
110
|
false
|
111
111
|
end
|
112
112
|
|
@@ -149,7 +149,7 @@ module OneApm
|
|
149
149
|
blamed_metric = blamed_metric_name(txn, options)
|
150
150
|
metric_names << blamed_metric if blamed_metric
|
151
151
|
|
152
|
-
stats_engine = OneApm::
|
152
|
+
stats_engine = OneApm::Manager.agent.stats_engine
|
153
153
|
stats_engine.record_unscoped_metrics(state, metric_names) do |stats|
|
154
154
|
stats.increment_count
|
155
155
|
end
|
@@ -180,7 +180,7 @@ module OneApm
|
|
180
180
|
# If anything else is left over, we treat it like a custom param
|
181
181
|
def custom_params_from_opts(options)
|
182
182
|
# If anything else is left over, treat it like a custom param:
|
183
|
-
if
|
183
|
+
if OneApm::Manager.config[:'error_collector.capture_attributes']
|
184
184
|
fetch_from_options(options, :custom_params, {}).merge(options)
|
185
185
|
else
|
186
186
|
{}
|
@@ -192,7 +192,7 @@ module OneApm
|
|
192
192
|
# returns nil
|
193
193
|
def request_params_from_opts(options)
|
194
194
|
value = options.delete(:request_params)
|
195
|
-
if
|
195
|
+
if OneApm::Manager.config[:capture_params]
|
196
196
|
value
|
197
197
|
else
|
198
198
|
nil
|
@@ -247,7 +247,7 @@ module OneApm
|
|
247
247
|
# the maximum limit, and logs a warning if we are over the limit.
|
248
248
|
def over_queue_limit?(message)
|
249
249
|
over_limit = (@errors.reject{|err| err.is_internal}.length >= MAX_ERROR_QUEUE_LENGTH)
|
250
|
-
|
250
|
+
OneApm::Manager.logger.warn("The error reporting queue has reached #{MAX_ERROR_QUEUE_LENGTH}. The error detail for this and subsequent errors will not be transmitted to OneApm until the queued errors have been sent: #{message}") if over_limit
|
251
251
|
over_limit
|
252
252
|
end
|
253
253
|
|
@@ -276,14 +276,14 @@ module OneApm
|
|
276
276
|
#
|
277
277
|
# If anything is left over, it's added to custom params
|
278
278
|
# If exception is nil, the error count is bumped and no traced error is recorded
|
279
|
-
def notice_error(exception, options={})
|
279
|
+
def notice_error(exception, options={})
|
280
280
|
state = ::OneApm::TransactionState.tl_get
|
281
281
|
|
282
282
|
return if skip_notice_error?(state, exception)
|
283
283
|
tag_as_seen(state, exception)
|
284
284
|
|
285
285
|
increment_error_count!(state, exception, options)
|
286
|
-
OneApm::
|
286
|
+
OneApm::Manager.agent.events.notify(:notice_error, exception, options)
|
287
287
|
|
288
288
|
action_path = fetch_from_options(options, :metric, "")
|
289
289
|
exception_options = error_params_from_options(options).merge(exception_info(exception))
|
@@ -291,7 +291,7 @@ module OneApm
|
|
291
291
|
|
292
292
|
exception
|
293
293
|
rescue => e
|
294
|
-
|
294
|
+
OneApm::Manager.logger.warn("Failure when capturing error '#{exception}':", e)
|
295
295
|
end
|
296
296
|
|
297
297
|
# *Use sparingly for difficult to track bugs.*
|
@@ -307,7 +307,7 @@ module OneApm
|
|
307
307
|
return unless exception.class < OneApm::Agent::InternalAgentError
|
308
308
|
|
309
309
|
# Log 'em all!
|
310
|
-
OneApm::
|
310
|
+
OneApm::Manager.logger.info(exception)
|
311
311
|
|
312
312
|
@lock.synchronize do
|
313
313
|
# Already seen this class once? Bail!
|
@@ -320,7 +320,7 @@ module OneApm
|
|
320
320
|
@errors << noticed_error
|
321
321
|
end
|
322
322
|
rescue => e
|
323
|
-
OneApm::
|
323
|
+
OneApm::Manager.logger.info("Unable to capture internal agent error due to an exception:", e)
|
324
324
|
end
|
325
325
|
|
326
326
|
def merge!(errors)
|
@@ -4,9 +4,6 @@ require 'zlib'
|
|
4
4
|
require 'base64'
|
5
5
|
require 'digest/md5'
|
6
6
|
|
7
|
-
require 'one_apm/agent'
|
8
|
-
require 'one_apm/probe'
|
9
|
-
|
10
7
|
module OneApm
|
11
8
|
module Collector
|
12
9
|
# This class contains the logic of recording slow SQL traces, which may
|
@@ -49,8 +46,8 @@ module OneApm
|
|
49
46
|
end
|
50
47
|
|
51
48
|
def enabled?
|
52
|
-
|
53
|
-
|
49
|
+
OneApm::Manager.config[:'slow_sql.enabled'] &&
|
50
|
+
OneApm::Manager.config[:'transaction_tracer.enabled'] &&
|
54
51
|
OneApm::Agent::Database.should_record_sql?(:slow_sql)
|
55
52
|
end
|
56
53
|
|
@@ -63,7 +60,7 @@ module OneApm
|
|
63
60
|
guid = state.transaction_sample_builder.sample.guid
|
64
61
|
end
|
65
62
|
|
66
|
-
if
|
63
|
+
if OneApm::Manager.config[:'slow_sql.enabled'] && state.sql_sampler_transaction_data
|
67
64
|
state.sql_sampler_transaction_data.set_transaction_info(uri, guid)
|
68
65
|
end
|
69
66
|
end
|
@@ -82,7 +79,7 @@ module OneApm
|
|
82
79
|
data.set_transaction_name(name)
|
83
80
|
if data.sql_data.size > 0
|
84
81
|
@samples_lock.synchronize do
|
85
|
-
|
82
|
+
OneApm::Manager.logger.debug "Examining #{data.sql_data.size} slow transaction sql statement(s)"
|
86
83
|
save_slow_sql data
|
87
84
|
end
|
88
85
|
end
|
@@ -147,13 +144,13 @@ module OneApm
|
|
147
144
|
#
|
148
145
|
# @api public
|
149
146
|
#
|
150
|
-
def notice_sql(sql, metric_name, config, duration, state=nil, &explainer)
|
147
|
+
def notice_sql(sql, metric_name, config, duration, state=nil, &explainer)
|
151
148
|
state ||= OneApm::TransactionState.tl_get
|
152
149
|
data = state.sql_sampler_transaction_data
|
153
150
|
return unless data
|
154
151
|
|
155
152
|
if state.is_sql_recorded?
|
156
|
-
if duration >
|
153
|
+
if duration > OneApm::Manager.config[:'slow_sql.explain_threshold']
|
157
154
|
backtrace = caller
|
158
155
|
backtrace.reject! { |t| t.include?('one_apm') }
|
159
156
|
data.sql_data << SlowSql.new(OneApm::Agent::Database.capture_query(sql),
|
@@ -297,11 +294,11 @@ module OneApm
|
|
297
294
|
end
|
298
295
|
|
299
296
|
def need_to_obfuscate?
|
300
|
-
|
297
|
+
OneApm::Manager.config[:'slow_sql.record_sql'].to_s == 'obfuscated'
|
301
298
|
end
|
302
299
|
|
303
300
|
def need_to_explain?
|
304
|
-
|
301
|
+
OneApm::Manager.config[:'slow_sql.explain_enabled']
|
305
302
|
end
|
306
303
|
|
307
304
|
include OneApm::Coerce
|
@@ -31,8 +31,8 @@ class OneApm::Collector::TransactionEventAggregator
|
|
31
31
|
@enabled = false
|
32
32
|
@notified_full = false
|
33
33
|
|
34
|
-
@samples = ::OneApm::Agent::SampledBuffer.new(OneApm::
|
35
|
-
@synthetics_samples = ::OneApm::Agent::SyntheticsEventBuffer.new(OneApm::
|
34
|
+
@samples = ::OneApm::Agent::SampledBuffer.new(OneApm::Manager.config[:'analytics_events.max_samples_stored'])
|
35
|
+
@synthetics_samples = ::OneApm::Agent::SyntheticsEventBuffer.new(OneApm::Manager.config[:'synthetics.events_limit'])
|
36
36
|
|
37
37
|
event_listener.subscribe(:transaction_finished, &method(:on_transaction_finished))
|
38
38
|
self.register_config_callbacks
|
@@ -80,10 +80,10 @@ class OneApm::Collector::TransactionEventAggregator
|
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
|
-
def record_sampling_rate(request_count, sample_count)
|
83
|
+
def record_sampling_rate(request_count, sample_count)
|
84
84
|
request_count_lifetime = @samples.seen_lifetime
|
85
85
|
sample_count_lifetime = @samples.captured_lifetime
|
86
|
-
OneApm::
|
86
|
+
OneApm::Manager.logger.debug("Sampled %d / %d (%.1f %%) requests this cycle, %d / %d (%.1f %%) since startup" % [
|
87
87
|
sample_count,
|
88
88
|
request_count,
|
89
89
|
(sample_count.to_f / request_count * 100.0),
|
@@ -92,7 +92,7 @@ class OneApm::Collector::TransactionEventAggregator
|
|
92
92
|
(sample_count_lifetime.to_f / request_count_lifetime * 100.0)
|
93
93
|
])
|
94
94
|
|
95
|
-
engine = OneApm::
|
95
|
+
engine = OneApm::Manager.agent.stats_engine
|
96
96
|
engine.tl_record_supportability_metric_count("TransactionEventAggregator/requests", request_count)
|
97
97
|
engine.tl_record_supportability_metric_count("TransactionEventAggregator/samples", sample_count)
|
98
98
|
end
|
@@ -100,30 +100,30 @@ class OneApm::Collector::TransactionEventAggregator
|
|
100
100
|
def record_dropped_synthetics(synthetics_dropped)
|
101
101
|
return unless synthetics_dropped > 0
|
102
102
|
|
103
|
-
OneApm::
|
103
|
+
OneApm::Manager.logger.debug("Synthetics transaction event limit (#{@samples.capacity}) reached. Further synthetics events this harvest period dropped.")
|
104
104
|
|
105
|
-
engine = OneApm::
|
105
|
+
engine = OneApm::Manager.agent.stats_engine
|
106
106
|
engine.tl_record_supportability_metric_count("TransactionEventAggregator/synthetics_events_dropped", synthetics_dropped)
|
107
107
|
end
|
108
108
|
|
109
109
|
def register_config_callbacks
|
110
|
-
OneApm::
|
111
|
-
OneApm::
|
110
|
+
OneApm::Manager.config.register_callback(:'analytics_events.max_samples_stored') do |max_samples|
|
111
|
+
OneApm::Manager.logger.debug "TransactionEventAggregator max_samples set to #{max_samples}"
|
112
112
|
self.synchronize { @samples.capacity = max_samples }
|
113
113
|
end
|
114
114
|
|
115
|
-
OneApm::
|
116
|
-
OneApm::
|
115
|
+
OneApm::Manager.config.register_callback(:'synthetics.events_limit') do |max_samples|
|
116
|
+
OneApm::Manager.logger.debug "TransactionEventAggregator limit for synthetics events set to #{max_samples}"
|
117
117
|
self.synchronize { @synthetics_samples.capacity = max_samples }
|
118
118
|
end
|
119
119
|
|
120
|
-
OneApm::
|
120
|
+
OneApm::Manager.config.register_callback(:'analytics_events.enabled') do |enabled|
|
121
121
|
@enabled = enabled
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
125
|
def notify_full
|
126
|
-
OneApm::
|
126
|
+
OneApm::Manager.logger.debug "Transaction event capacity of #{@samples.capacity} reached, beginning sampling"
|
127
127
|
@notified_full = true
|
128
128
|
end
|
129
129
|
|
@@ -221,7 +221,7 @@ class OneApm::Collector::TransactionEventAggregator
|
|
221
221
|
end
|
222
222
|
|
223
223
|
def append_http_response_code(sample, payload)
|
224
|
-
unless OneApm::
|
224
|
+
unless OneApm::Manager.config[:disable_rack_middleware]
|
225
225
|
optionally_append(HTTP_RESPONSE_CODE_KEY, :http_response_code, sample, payload)
|
226
226
|
end
|
227
227
|
end
|
@@ -240,7 +240,7 @@ class OneApm::Collector::TransactionEventAggregator
|
|
240
240
|
|
241
241
|
def create_custom_parameters(payload)
|
242
242
|
custom_params = {}
|
243
|
-
if
|
243
|
+
if OneApm::Manager.config[:'analytics_events.capture_attributes']
|
244
244
|
custom_params.merge!(event_params(payload[:custom_params] || {}))
|
245
245
|
end
|
246
246
|
custom_params
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require 'one_apm/agent'
|
4
|
-
require 'one_apm/probe'
|
5
3
|
require 'one_apm/transaction/transaction_sample_builder'
|
6
4
|
require 'one_apm/transaction/sample_buffer/force_persist_sample_buffer'
|
7
5
|
require 'one_apm/transaction/sample_buffer/slowest_sample_buffer'
|
@@ -45,24 +43,24 @@ module OneApm
|
|
45
43
|
# any 'honest-to-god'-multithreaded system
|
46
44
|
@samples_lock = Mutex.new
|
47
45
|
|
48
|
-
|
46
|
+
OneApm::Manager.config.register_callback(:'transaction_tracer.enabled') do |enabled|
|
49
47
|
if enabled
|
50
|
-
threshold =
|
51
|
-
|
48
|
+
threshold = OneApm::Manager.config[:'transaction_tracer.transaction_threshold']
|
49
|
+
OneApm::Manager.logger.debug "Transaction tracing threshold is #{threshold} seconds."
|
52
50
|
else
|
53
|
-
|
51
|
+
OneApm::Manager.logger.debug "Transaction traces will not be sent to the OneApm service."
|
54
52
|
end
|
55
53
|
end
|
56
54
|
|
57
|
-
|
55
|
+
OneApm::Manager.config.register_callback(:'transaction_tracer.record_sql') do |config|
|
58
56
|
if config == 'raw'
|
59
|
-
|
57
|
+
OneApm::Manager.logger.warn("Agent is configured to send raw SQL to the service")
|
60
58
|
end
|
61
59
|
end
|
62
60
|
end
|
63
61
|
|
64
62
|
def enabled?
|
65
|
-
|
63
|
+
OneApm::Manager.config[:'transaction_tracer.enabled']
|
66
64
|
end
|
67
65
|
|
68
66
|
def on_start_transaction(state, start_time, uri=nil)
|
@@ -95,7 +93,7 @@ module OneApm
|
|
95
93
|
end
|
96
94
|
|
97
95
|
def custom_parameters_from_transaction(txn)
|
98
|
-
if
|
96
|
+
if OneApm::Manager.config[:'transaction_tracer.capture_attributes']
|
99
97
|
txn.custom_parameters
|
100
98
|
else
|
101
99
|
{}
|
@@ -200,7 +198,7 @@ module OneApm
|
|
200
198
|
# Appends a backtrace to a segment if that segment took longer
|
201
199
|
# than the specified duration
|
202
200
|
def append_backtrace(segment, duration)
|
203
|
-
if duration >=
|
201
|
+
if duration >= OneApm::Manager.config[:'transaction_tracer.stack_trace_threshold']
|
204
202
|
segment[:backtrace] = caller.join("\n")
|
205
203
|
end
|
206
204
|
end
|
@@ -219,7 +217,7 @@ module OneApm
|
|
219
217
|
#
|
220
218
|
# @api public
|
221
219
|
#
|
222
|
-
def notice_sql(sql, config, duration, state=nil, &explainer)
|
220
|
+
def notice_sql(sql, config, duration, state=nil, &explainer)
|
223
221
|
# some statements (particularly INSERTS with large BLOBS
|
224
222
|
# may be very large; we should trim them to a maximum usable length
|
225
223
|
state ||= OneApm::TransactionState.tl_get
|
@@ -256,18 +254,18 @@ module OneApm
|
|
256
254
|
#
|
257
255
|
# @api public
|
258
256
|
#
|
259
|
-
def notice_nosql(key, duration)
|
257
|
+
def notice_nosql(key, duration)
|
260
258
|
builder = tl_builder
|
261
259
|
notice_extra_data(builder, key, duration, :key)
|
262
260
|
end
|
263
261
|
|
264
|
-
def notice_nosql_statement(statement, duration)
|
262
|
+
def notice_nosql_statement(statement, duration)
|
265
263
|
builder = tl_builder
|
266
264
|
notice_extra_data(builder, statement, duration, :statement)
|
267
265
|
end
|
268
266
|
|
269
267
|
# Set parameters on the current segment.
|
270
|
-
def add_segment_parameters(params)
|
268
|
+
def add_segment_parameters(params)
|
271
269
|
builder = tl_builder
|
272
270
|
return unless builder
|
273
271
|
params.each { |k,v| builder.current_segment[k] = v }
|
@@ -289,7 +287,7 @@ module OneApm
|
|
289
287
|
begin
|
290
288
|
sample.prepare_to_send!
|
291
289
|
rescue => e
|
292
|
-
OneApm::
|
290
|
+
OneApm::Manager.logger.error("Failed to prepare transaction trace. Error: ", e)
|
293
291
|
false
|
294
292
|
else
|
295
293
|
true
|