oneapm_rpm 1.1.2 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|