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
@@ -6,17 +6,17 @@ module OneApm
|
|
6
6
|
class AgentThread
|
7
7
|
|
8
8
|
def self.create(label, &blk)
|
9
|
-
|
9
|
+
OneApm::Manager.logger.debug("Creating OneApm thread: #{label}")
|
10
10
|
wrapped_blk = Proc.new do
|
11
11
|
begin
|
12
12
|
blk.call
|
13
13
|
rescue => e
|
14
|
-
|
14
|
+
OneApm::Manager.logger.error("Thread #{label} exited with error", e)
|
15
15
|
rescue Exception => e
|
16
|
-
|
16
|
+
OneApm::Manager.logger.error("Thread #{label} exited with exception. Re-raising in case of interupt.", e)
|
17
17
|
raise
|
18
18
|
ensure
|
19
|
-
|
19
|
+
OneApm::Manager.logger.debug("Exiting OneApm thread: #{label}")
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -31,7 +31,7 @@ module OneApm
|
|
31
31
|
backing_thread_class.list
|
32
32
|
end
|
33
33
|
|
34
|
-
def self.bucket_thread(thread, profile_agent_code)
|
34
|
+
def self.bucket_thread(thread, profile_agent_code)
|
35
35
|
if thread.key?(:oneapm_label)
|
36
36
|
profile_agent_code ? :agent : :ignore
|
37
37
|
else
|
@@ -50,7 +50,7 @@ module OneApm
|
|
50
50
|
begin
|
51
51
|
bt = thread.backtrace
|
52
52
|
rescue Exception => e
|
53
|
-
|
53
|
+
OneApm::Manager.logger.debug("Failed to backtrace #{thread.inspect}: #{e.class.name}: #{e.to_s}")
|
54
54
|
end
|
55
55
|
return nil unless bt
|
56
56
|
bt.reject! { |t| t.include?('one_apm') } unless profile_agent_code
|
@@ -24,11 +24,11 @@ module OneApm
|
|
24
24
|
|
25
25
|
@running = false
|
26
26
|
@profile_agent_code = false
|
27
|
-
@worker_loop = OneApm::
|
27
|
+
@worker_loop = OneApm::Support::WorkerLoop.new
|
28
28
|
|
29
29
|
# Memoize overhead % to avoid getting stale OR looked up every poll
|
30
|
-
@overhead_percent_threshold = OneApm::
|
31
|
-
OneApm::
|
30
|
+
@overhead_percent_threshold = OneApm::Manager.config[:'xray_session.max_profile_overhead']
|
31
|
+
OneApm::Manager.config.register_callback(:'xray_session.max_profile_overhead') do |new_value|
|
32
32
|
@overhead_percent_threshold = new_value
|
33
33
|
end
|
34
34
|
|
@@ -45,11 +45,11 @@ module OneApm
|
|
45
45
|
|
46
46
|
def subscribe(transaction_name, command_arguments={})
|
47
47
|
if !self.class.is_supported?
|
48
|
-
OneApm::
|
48
|
+
OneApm::Manager.logger.debug("Backtracing not supported, so not subscribing transaction '#{transaction_name}'")
|
49
49
|
return
|
50
50
|
end
|
51
51
|
|
52
|
-
OneApm::
|
52
|
+
OneApm::Manager.logger.debug("Backtrace Service subscribing transaction '#{transaction_name}'")
|
53
53
|
|
54
54
|
profile = ThreadProfile.new(command_arguments)
|
55
55
|
|
@@ -65,7 +65,7 @@ module OneApm
|
|
65
65
|
def unsubscribe(transaction_name)
|
66
66
|
return unless self.class.is_supported?
|
67
67
|
|
68
|
-
OneApm::
|
68
|
+
OneApm::Manager.logger.debug("Backtrace Service unsubscribing transaction '#{transaction_name}'")
|
69
69
|
@lock.synchronize do
|
70
70
|
@profiles.delete(transaction_name)
|
71
71
|
if @profiles.empty?
|
@@ -188,7 +188,7 @@ module OneApm
|
|
188
188
|
if @buffer[thread].length < MAX_BUFFER_LENGTH
|
189
189
|
@buffer[thread] << [timestamp, backtrace]
|
190
190
|
else
|
191
|
-
OneApm::
|
191
|
+
OneApm::Manager.increment_metric('Supportability/XraySessions/DroppedBacktraces')
|
192
192
|
end
|
193
193
|
end
|
194
194
|
end
|
@@ -242,13 +242,13 @@ module OneApm
|
|
242
242
|
end
|
243
243
|
|
244
244
|
def record_polling_time(now, poll_start)
|
245
|
-
OneApm::
|
245
|
+
OneApm::Manager.record_metric('Supportability/ThreadProfiler/PollingTime', now - poll_start)
|
246
246
|
end
|
247
247
|
|
248
248
|
def record_skew(poll_start)
|
249
249
|
if @last_poll
|
250
250
|
skew = poll_start - @last_poll - worker_loop.period
|
251
|
-
OneApm::
|
251
|
+
OneApm::Manager.record_metric('Supportability/ThreadProfiler/Skew', skew)
|
252
252
|
end
|
253
253
|
@last_poll = poll_start
|
254
254
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'set'
|
4
|
-
require 'one_apm/
|
4
|
+
require 'one_apm/support/event/worker_loop'
|
5
5
|
require 'one_apm/agent/threading/backtrace_node'
|
6
6
|
|
7
7
|
# Data structure for representing a thread profile
|
@@ -84,10 +84,10 @@ module OneApm
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
-
def convert_N_trace_nodes_to_arrays(count_to_keep)
|
87
|
+
def convert_N_trace_nodes_to_arrays(count_to_keep)
|
88
88
|
all_nodes = @traces.values.map { |n| n.flattened }.flatten
|
89
89
|
|
90
|
-
OneApm::
|
90
|
+
OneApm::Manager.agent.stats_engine.
|
91
91
|
tl_record_supportability_metric_count("ThreadProfiler/NodeCount", all_nodes.size)
|
92
92
|
|
93
93
|
all_nodes.sort! do |a, b|
|
@@ -4,8 +4,8 @@ module OneApm
|
|
4
4
|
module Helper
|
5
5
|
|
6
6
|
def handle_serialization_error(method, e)
|
7
|
-
OneApm::
|
8
|
-
OneApm::
|
7
|
+
OneApm::Manager.increment_metric("Supportability/serialization_failure")
|
8
|
+
OneApm::Manager.increment_metric("Supportability/serialization_failure/#{method}")
|
9
9
|
msg = "Failed to serialize #{method} data using #{@marshaller.class.to_s}: #{e.inspect}"
|
10
10
|
error = SerializationError.new(msg)
|
11
11
|
error.set_backtrace(e.backtrace)
|
@@ -15,11 +15,11 @@ module OneApm
|
|
15
15
|
def record_timing_supportability_metrics(method, start_ts, serialize_finish_ts)
|
16
16
|
serialize_time = serialize_finish_ts && (serialize_finish_ts - start_ts)
|
17
17
|
duration = (Time.now - start_ts).to_f
|
18
|
-
OneApm::
|
19
|
-
OneApm::
|
18
|
+
OneApm::Manager.record_metric("Supportability/invoke_remote", duration)
|
19
|
+
OneApm::Manager.record_metric("Supportability/invoke_remote/#{method.to_s}", duration)
|
20
20
|
if serialize_time
|
21
|
-
OneApm::
|
22
|
-
OneApm::
|
21
|
+
OneApm::Manager.record_metric("Supportability/invoke_remote_serialize", serialize_time)
|
22
|
+
OneApm::Manager.record_metric("Supportability/invoke_remote_serialize/#{method.to_s}", serialize_time)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -38,11 +38,11 @@ module OneApm
|
|
38
38
|
]
|
39
39
|
# we may not have an item count, in which case, just record 0 for the exclusive time
|
40
40
|
item_count ||= 0
|
41
|
-
OneApm::
|
41
|
+
OneApm::Manager.agent.stats_engine.tl_record_unscoped_metrics(metrics, size_bytes, item_count)
|
42
42
|
end
|
43
43
|
|
44
44
|
def log_and_return_response(response)
|
45
|
-
|
45
|
+
OneApm::Manager.logger.debug "Received response, status: #{response.code}, encoding: '#{response['content-encoding']}'"
|
46
46
|
|
47
47
|
case response
|
48
48
|
when Net::HTTPSuccess
|
@@ -82,7 +82,7 @@ module OneApm
|
|
82
82
|
# If we've gotten this far, we don't want this error to propagate and
|
83
83
|
# make this post appear to have been non-successful, which would trigger
|
84
84
|
# re-aggregation of the same metric data into the next post, so just log
|
85
|
-
OneApm::
|
85
|
+
OneApm::Manager.logger.error("Failed to fill metric ID cache from response, error details follow ", e)
|
86
86
|
end
|
87
87
|
|
88
88
|
# The collector wants to recieve metric data in a format that's different
|
@@ -109,7 +109,7 @@ module OneApm
|
|
109
109
|
@marshaller.dump(data)
|
110
110
|
true
|
111
111
|
rescue StandardError, SystemStackError => e
|
112
|
-
OneApm::
|
112
|
+
OneApm::Manager.logger.warn("Unable to marshal environment report on connect.", e)
|
113
113
|
false
|
114
114
|
end
|
115
115
|
|
@@ -74,14 +74,14 @@ module OneApm
|
|
74
74
|
begin
|
75
75
|
attempts += 1
|
76
76
|
conn = http_connection
|
77
|
-
|
77
|
+
OneApm::Manager.logger.debug "Sending request to #{opts[:collector]}#{opts[:uri]}"
|
78
78
|
OneApm::TimerLib.timeout(@request_timeout) do
|
79
79
|
response = conn.request(request)
|
80
80
|
end
|
81
81
|
rescue *CONNECTION_ERRORS => e
|
82
82
|
close_shared_connection
|
83
83
|
if attempts < max_attempts
|
84
|
-
|
84
|
+
OneApm::Manager.logger.debug("Retrying request to #{opts[:collector]}#{opts[:uri]} after #{e}")
|
85
85
|
retry
|
86
86
|
else
|
87
87
|
raise ServerConnectionException, "Recoverable error talking to #{@collector} after #{attempts} attempts: #{e}"
|
@@ -97,7 +97,7 @@ module OneApm
|
|
97
97
|
begin
|
98
98
|
t0 = Time.now
|
99
99
|
@in_session = true
|
100
|
-
if OneApm::
|
100
|
+
if OneApm::Manager.config[:aggressive_keepalive]
|
101
101
|
session_with_keepalive(&block)
|
102
102
|
else
|
103
103
|
session_without_keepalive(&block)
|
@@ -141,7 +141,7 @@ module OneApm
|
|
141
141
|
|
142
142
|
def close_shared_connection
|
143
143
|
if @shared_tcp_connection
|
144
|
-
|
144
|
+
OneApm::Manager.logger.debug("Closing shared TCP connection to #{@shared_tcp_connection.address}:#{@shared_tcp_connection.port}")
|
145
145
|
@shared_tcp_connection.finish if @shared_tcp_connection.started?
|
146
146
|
@shared_tcp_connection = nil
|
147
147
|
end
|
@@ -151,8 +151,8 @@ module OneApm
|
|
151
151
|
# We use Timeout explicitly instead of this
|
152
152
|
conn.read_timeout = nil
|
153
153
|
|
154
|
-
if conn.respond_to?(:keep_alive_timeout) && OneApm::
|
155
|
-
conn.keep_alive_timeout = OneApm::
|
154
|
+
if conn.respond_to?(:keep_alive_timeout) && OneApm::Manager.config[:aggressive_keepalive]
|
155
|
+
conn.keep_alive_timeout = OneApm::Manager.config[:keep_alive_timeout]
|
156
156
|
end
|
157
157
|
end
|
158
158
|
|
@@ -163,7 +163,7 @@ module OneApm
|
|
163
163
|
end
|
164
164
|
|
165
165
|
def start_connection(conn)
|
166
|
-
OneApm::
|
166
|
+
OneApm::Manager.logger.debug("Opening TCP connection to #{conn.address}:#{conn.port}")
|
167
167
|
OneApm::TimerLib.timeout(@request_timeout) { conn.start }
|
168
168
|
conn
|
169
169
|
end
|
@@ -175,10 +175,10 @@ module OneApm
|
|
175
175
|
proxy_server.user, proxy_server.password)
|
176
176
|
|
177
177
|
conn = http_class.new((@collector.ip || @collector.name), @collector.port)
|
178
|
-
setup_connection_for_ssl(conn) if
|
178
|
+
setup_connection_for_ssl(conn) if OneApm::Manager.config[:ssl]
|
179
179
|
setup_connection_timeouts(conn)
|
180
180
|
|
181
|
-
|
181
|
+
OneApm::Manager.logger.debug("Created net/http handle to #{conn.address}:#{conn.port}")
|
182
182
|
conn
|
183
183
|
end
|
184
184
|
|
@@ -198,7 +198,7 @@ module OneApm
|
|
198
198
|
def ssl_cert_store
|
199
199
|
path = cert_file_path
|
200
200
|
if !@ssl_cert_store || path != @cached_cert_store_path
|
201
|
-
|
201
|
+
OneApm::Manager.logger.debug("Creating SSL certificate store from file at #{path}")
|
202
202
|
@ssl_cert_store = OpenSSL::X509::Store.new
|
203
203
|
@ssl_cert_store.add_file(path)
|
204
204
|
@cached_cert_store_path = path
|
@@ -209,8 +209,8 @@ module OneApm
|
|
209
209
|
# The path to the certificate file used to verify the SSL
|
210
210
|
# connection if verify_peer is enabled
|
211
211
|
def cert_file_path
|
212
|
-
if path_override = OneApm::
|
213
|
-
OneApm::
|
212
|
+
if path_override = OneApm::Manager.config[:ca_bundle_path]
|
213
|
+
OneApm::Manager.logger.warn("Couldn't find CA bundle from configured ca_bundle_path: #{path_override}") unless File.exists? path_override
|
214
214
|
path_override
|
215
215
|
else
|
216
216
|
File.expand_path(File.join(probe.oneapm_root, 'config', 'cert', 'cacert.pem'))
|
@@ -243,8 +243,8 @@ module OneApm
|
|
243
243
|
# Raises an UnrecoverableServerException if the post_string is longer
|
244
244
|
# than the limit configured in the probe object
|
245
245
|
def check_post_size(post_string)
|
246
|
-
return if post_string.size <
|
247
|
-
|
246
|
+
return if post_string.size < OneApm::Manager.config[:post_size_limit]
|
247
|
+
OneApm::Manager.logger.debug "Tried to send too much data: #{post_string.size} bytes"
|
248
248
|
raise UnrecoverableServerException.new('413 Request Entity Too Large')
|
249
249
|
end
|
250
250
|
|
@@ -16,19 +16,19 @@ module OneApm
|
|
16
16
|
# there is no proxy, otherwise it has proxy configuration
|
17
17
|
# information pulled from the config file
|
18
18
|
def proxy_server
|
19
|
-
@proxy_server ||= OneApm::Support::ProxyServer.new(
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
@proxy_server ||= OneApm::Support::ProxyServer.new(Manager.config[:proxy_host],
|
20
|
+
OneApm::Manager.config[:proxy_port],
|
21
|
+
OneApm::Manager.config[:proxy_user],
|
22
|
+
OneApm::Manager.config[:proxy_pass])
|
23
23
|
end
|
24
24
|
|
25
25
|
# turns a hostname into an ip address and returns a
|
26
26
|
# OneApm::Support::Server that contains the configuration info
|
27
27
|
def server_from_host(hostname=nil)
|
28
|
-
host = hostname ||
|
28
|
+
host = hostname || OneApm::Manager.config[:host]
|
29
29
|
|
30
30
|
# if the host is not an IP address, turn it into one
|
31
|
-
OneApm::Support::Server.new(host,
|
31
|
+
OneApm::Support::Server.new(host, OneApm::Manager.config[:port], convert_to_ip_address(host))
|
32
32
|
end
|
33
33
|
|
34
34
|
# Check to see if we need to look up the IP address
|
@@ -38,13 +38,13 @@ module OneApm
|
|
38
38
|
def convert_to_ip_address(host)
|
39
39
|
# here we leave it as a host name since the cert verification
|
40
40
|
# needs it in host form
|
41
|
-
return host if
|
41
|
+
return host if OneApm::Manager.config[:ssl]
|
42
42
|
# We won't talk directly to the host, so no need to resolve if proxy configured
|
43
|
-
return host if
|
43
|
+
return host if OneApm::Manager.config[:proxy_host]
|
44
44
|
return nil if host.nil? || host.downcase == "localhost"
|
45
45
|
ip = resolve_ip_address(host)
|
46
46
|
|
47
|
-
OneApm::
|
47
|
+
OneApm::Manager.logger.debug "Resolved #{host} to #{ip}"
|
48
48
|
ip
|
49
49
|
end
|
50
50
|
|
@@ -55,12 +55,12 @@ module OneApm
|
|
55
55
|
def resolve_ip_address(host)
|
56
56
|
Resolv.getaddress(host)
|
57
57
|
rescue => e
|
58
|
-
OneApm::
|
58
|
+
OneApm::Manager.logger.warn("DNS Error caching IP address:", e)
|
59
59
|
begin
|
60
|
-
OneApm::
|
60
|
+
OneApm::Manager.logger.debug("Trying native DNS lookup since Resolv failed")
|
61
61
|
IPSocket.getaddress(host)
|
62
62
|
rescue => e
|
63
|
-
OneApm::
|
63
|
+
OneApm::Manager.logger.error("Could not look up server address: #{e}")
|
64
64
|
nil
|
65
65
|
end
|
66
66
|
end
|
@@ -22,25 +22,25 @@ module OneApm
|
|
22
22
|
attr_reader :collector,:marshaller, :metric_id_cache
|
23
23
|
|
24
24
|
def initialize(license_key = nil, collector = nil)
|
25
|
-
@license_key = license_key ||
|
25
|
+
@license_key = license_key || OneApm::Manager.config[:license_key]
|
26
26
|
@collector = collector || server
|
27
|
-
@request_timeout =
|
27
|
+
@request_timeout = OneApm::Manager.config[:timeout]
|
28
28
|
@metric_id_cache = {}
|
29
|
-
@audit_logger = ::OneApm::
|
29
|
+
@audit_logger = ::OneApm::Logger::AuditLogger.new
|
30
30
|
|
31
|
-
|
31
|
+
OneApm::Manager.config.register_callback(:'audit_log.enabled') do |enabled|
|
32
32
|
@audit_logger.enabled = enabled
|
33
33
|
end
|
34
34
|
|
35
|
-
|
35
|
+
OneApm::Manager.config.register_callback(:ssl) do |ssl|
|
36
36
|
if !ssl
|
37
|
-
OneApm::
|
37
|
+
OneApm::Manager.logger.warn("Agent is configured not to use SSL when communicating with OneApm's servers")
|
38
38
|
else
|
39
|
-
OneApm::
|
39
|
+
OneApm::Manager.logger.debug("Agent is configured to use SSL")
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
|
43
|
+
OneApm::Manager.config.register_callback(:marshaller) do |marshaller|
|
44
44
|
@marshaller = OneApm::Support::JsonMarshaller.new
|
45
45
|
end
|
46
46
|
end
|
@@ -27,7 +27,7 @@ module OneApm
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def start(agent_command)
|
30
|
-
OneApm::
|
30
|
+
OneApm::Manager.logger.debug("Starting Thread Profiler.")
|
31
31
|
profile = @backtrace_service.subscribe(
|
32
32
|
OneApm::Agent::Threading::BacktraceService::ALL_TRANSACTIONS,
|
33
33
|
agent_command.arguments
|
@@ -39,14 +39,14 @@ module OneApm
|
|
39
39
|
|
40
40
|
def stop(report_data)
|
41
41
|
return unless running?
|
42
|
-
OneApm::
|
42
|
+
OneApm::Manager.logger.debug("Stopping Thread Profiler.")
|
43
43
|
@finished_profile = @backtrace_service.harvest(OneApm::Agent::Threading::BacktraceService::ALL_TRANSACTIONS)
|
44
44
|
@backtrace_service.unsubscribe(OneApm::Agent::Threading::BacktraceService::ALL_TRANSACTIONS)
|
45
45
|
@finished_profile = nil if !report_data
|
46
46
|
end
|
47
47
|
|
48
48
|
def harvest
|
49
|
-
OneApm::
|
49
|
+
OneApm::Manager.logger.debug("Harvesting from Thread Profiler #{@finished_profile.to_log_description unless @finished_profile.nil?}")
|
50
50
|
profile = @finished_profile
|
51
51
|
@backtrace_service.profile_agent_code = false
|
52
52
|
@finished_profile = nil
|
@@ -55,7 +55,7 @@ module OneApm
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def enabled?
|
58
|
-
OneApm::
|
58
|
+
OneApm::Manager.config[:'thread_profiler.enabled']
|
59
59
|
end
|
60
60
|
|
61
61
|
def running?
|
@@ -29,8 +29,8 @@ module OneApm
|
|
29
29
|
# If X-Rays are disabled, just be quiet about it and don't start the
|
30
30
|
# command. Other hosts might be running the X-Ray, so we don't need
|
31
31
|
# to bark on every get_agent_commands.
|
32
|
-
if !OneApm::
|
33
|
-
OneApm::
|
32
|
+
if !OneApm::Manager.config[:'xray_session.enabled']
|
33
|
+
OneApm::Manager.logger.debug("Not responding to X-Ray command because of config 'xray_session.enabled' = #{OneApm::Manager.config[:'xray_session.enabled']}")
|
34
34
|
return
|
35
35
|
end
|
36
36
|
|
@@ -51,7 +51,7 @@ module OneApm
|
|
51
51
|
return NO_PROFILES unless OneApm::Agent::Threading::BacktraceService.is_supported?
|
52
52
|
|
53
53
|
profiles = active_thread_profiling_sessions.map do |session|
|
54
|
-
OneApm::
|
54
|
+
OneApm::Manager.logger.debug("Harvesting profile for X-Ray session #{session.inspect}")
|
55
55
|
@backtrace_service.harvest(session.key_transaction_name)
|
56
56
|
end
|
57
57
|
profiles.reject! {|p| p.empty?}
|
@@ -64,7 +64,7 @@ module OneApm
|
|
64
64
|
|
65
65
|
def cleanup_finished_sessions
|
66
66
|
finished_session_ids.each do |id|
|
67
|
-
OneApm::
|
67
|
+
OneApm::Manager.logger.debug("Finished X-Ray session #{id} by duration. Removing it from active sessions.")
|
68
68
|
remove_session_by_id(id)
|
69
69
|
end
|
70
70
|
end
|
@@ -73,7 +73,7 @@ module OneApm
|
|
73
73
|
### Internals
|
74
74
|
|
75
75
|
def one_apm_service
|
76
|
-
OneApm::
|
76
|
+
OneApm::Manager.agent.service
|
77
77
|
end
|
78
78
|
|
79
79
|
# These are unsynchonized and should only be used for testing
|
@@ -102,13 +102,13 @@ module OneApm
|
|
102
102
|
def lookup_metadata_for(ids_to_activate)
|
103
103
|
return [] if ids_to_activate.empty?
|
104
104
|
|
105
|
-
OneApm::
|
105
|
+
OneApm::Manager.logger.debug("Retrieving metadata for X-Ray sessions #{ids_to_activate.inspect}")
|
106
106
|
one_apm_service.get_xray_metadata(ids_to_activate)
|
107
107
|
end
|
108
108
|
|
109
109
|
def add_session(session)
|
110
|
-
OneApm::
|
111
|
-
OneApm::
|
110
|
+
OneApm::Manager.logger.debug("Adding X-Ray session #{session.inspect}")
|
111
|
+
OneApm::Manager.increment_metric("Supportability/XraySessions/Starts")
|
112
112
|
|
113
113
|
@sessions_lock.synchronize { @sessions[session.id] = session }
|
114
114
|
|
@@ -134,8 +134,8 @@ module OneApm
|
|
134
134
|
session = @sessions_lock.synchronize { @sessions.delete(id) }
|
135
135
|
|
136
136
|
if session
|
137
|
-
OneApm::
|
138
|
-
OneApm::
|
137
|
+
OneApm::Manager.logger.debug("Removing X-Ray session #{session.inspect}")
|
138
|
+
OneApm::Manager.increment_metric("Supportability/XraySessions/Stops")
|
139
139
|
|
140
140
|
if session.run_profiler?
|
141
141
|
@backtrace_service.unsubscribe(session.key_transaction_name)
|