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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2549e99a228ebc5192a1fa035a985afc7bac2ace
|
4
|
+
data.tar.gz: d52a272c4e52693f21c973c51f8fa3cdd72081c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 786db6b474c198e117000456a33c46538d7a0cf343082556361b04a2b1db2f442f65e2e5f4cbaa7d88772741ee10989f9193bb90ad5c7e2a4493a01a571c380e
|
7
|
+
data.tar.gz: 1d3c27a588fa01c9606cb79ac4120b862b1e453be7e1422eda17fef366fe84362c4f8e92a05312be7e40a9d0cd90bfb05c717303d708c688f89c313ff6653126
|
data/lib/one_apm/agent.rb
CHANGED
@@ -1,245 +1,238 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'socket'
|
4
|
+
require 'net/https'
|
5
|
+
require 'net/http'
|
6
|
+
require 'logger'
|
7
|
+
require 'zlib'
|
8
|
+
require 'stringio'
|
4
9
|
|
5
|
-
require 'one_apm/support/
|
6
|
-
require 'one_apm/
|
7
|
-
require 'one_apm/
|
8
|
-
require 'one_apm/support/chained_call'
|
9
|
-
require 'one_apm/support/rules_engine'
|
10
|
-
require 'one_apm/support/http_clients/uri_util'
|
11
|
-
require 'one_apm/support/system_info'
|
10
|
+
require 'one_apm/support/event_buffer/sampled_buffer'
|
11
|
+
require 'one_apm/configuration/autostart'
|
12
|
+
require 'one_apm/agent/harvester'
|
12
13
|
|
13
|
-
require 'one_apm/
|
14
|
-
require 'one_apm/
|
15
|
-
require 'one_apm/metrics/stats'
|
14
|
+
require 'one_apm/support/hostname'
|
15
|
+
require 'one_apm/support/environment_report'
|
16
16
|
|
17
|
-
require 'one_apm/
|
18
|
-
require 'one_apm/errors/agent_errors'
|
19
|
-
|
20
|
-
require 'one_apm/agent/agent'
|
21
|
-
require 'one_apm/agent/cross_app/cross_app_monitor'
|
22
|
-
require 'one_apm/support/method_tracer'
|
23
|
-
require 'one_apm/agent/event/worker_loop'
|
24
|
-
require 'one_apm/agent/event/event_loop'
|
25
|
-
require 'one_apm/transaction/transaction_sample'
|
17
|
+
require 'one_apm/configuration'
|
26
18
|
|
27
|
-
require 'one_apm/collector/
|
28
|
-
require 'one_apm/collector/containers/
|
29
|
-
require 'one_apm/collector/containers/
|
30
|
-
require 'one_apm/collector/containers/
|
19
|
+
require 'one_apm/collector/collector_service'
|
20
|
+
require 'one_apm/collector/containers/agent_command_router'
|
21
|
+
require 'one_apm/collector/containers/transaction_event_aggregator'
|
22
|
+
require 'one_apm/collector/containers/custom_event_aggregator'
|
23
|
+
require 'one_apm/collector/containers/utilization_data'
|
31
24
|
|
32
|
-
require 'one_apm/
|
25
|
+
require 'one_apm/collector/forked_process_service'
|
33
26
|
require 'one_apm/agent/database'
|
34
|
-
require 'one_apm/
|
35
|
-
|
36
|
-
require 'one_apm/
|
37
|
-
|
38
|
-
require 'one_apm/agent/
|
39
|
-
require 'one_apm/agent/
|
40
|
-
require 'one_apm/
|
41
|
-
|
42
|
-
require 'one_apm/agent/
|
43
|
-
require 'one_apm/agent/
|
27
|
+
require 'one_apm/support/event/event_listener'
|
28
|
+
require 'one_apm/agent/cross_app/cross_app_monitor'
|
29
|
+
require 'one_apm/agent/synthetics_monitor'
|
30
|
+
require 'one_apm/support/event_buffer/synthetics_event_buffer'
|
31
|
+
require 'one_apm/agent/sampler_collection'
|
32
|
+
require 'one_apm/agent/javascript_instrumentor'
|
33
|
+
require 'one_apm/support/vm/monotonic_gc_profiler'
|
34
|
+
|
35
|
+
require 'one_apm/agent/agent/start'
|
36
|
+
require 'one_apm/agent/agent/start_worker_thread'
|
37
|
+
require 'one_apm/agent/agent/connect'
|
38
|
+
require 'one_apm/agent/agent/helpers'
|
39
|
+
require 'one_apm/agent/agent/container_data_manager'
|
40
|
+
require 'one_apm/agent/agent/forkable_dispatcher_functions'
|
44
41
|
|
45
42
|
module OneApm
|
46
43
|
module Agent
|
47
|
-
|
44
|
+
class Agent
|
45
|
+
include OneApm::Agent::Agent::Start
|
46
|
+
include OneApm::Agent::Agent::StartWorkerThread
|
47
|
+
include OneApm::Agent::Agent::Connect
|
48
|
+
include OneApm::Agent::Agent::Helpers
|
49
|
+
include OneApm::Agent::Agent::ContainerDataManager
|
50
|
+
include OneApm::Agent::Agent::ForkableDispatcherFunctions
|
48
51
|
|
49
|
-
|
52
|
+
attr_reader :record_sql
|
53
|
+
attr_reader :javascript_instrumentor
|
50
54
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
OneApm::Agent.logger.warn(caller.join("\n"))
|
55
|
-
nil
|
56
|
-
end
|
55
|
+
attr_reader :cross_process_id
|
56
|
+
attr_reader :cross_app_encoding_bytes
|
57
|
+
attr_reader :cross_app_monitor
|
57
58
|
|
58
|
-
|
59
|
-
@agent = new_instance
|
60
|
-
end
|
59
|
+
attr_accessor :service
|
61
60
|
|
62
|
-
|
63
|
-
raise "Options must be a hash" unless Hash === options
|
64
|
-
OneApm::Agent::PipeChannelManager.listener.start if options[:start_channel_listener]
|
65
|
-
OneApm::Probe.init({:agent_enabled => true, :sync_startup => true}.merge(options))
|
66
|
-
end
|
61
|
+
attr_reader :events
|
67
62
|
|
68
|
-
|
63
|
+
attr_reader :transaction_rules
|
69
64
|
|
70
|
-
|
71
|
-
|
72
|
-
|
65
|
+
attr_reader :harvester
|
66
|
+
attr_reader :harvest_samplers
|
67
|
+
attr_reader :harvest_lock
|
73
68
|
|
74
|
-
|
75
|
-
OneApm::Agent.shutdown
|
76
|
-
OneApm::Agent.instance.harvest_samplers.clear
|
77
|
-
OneApm::Agent.instance.instance_variable_set(:@connect_state, :pending)
|
78
|
-
OneApm::Agent.instance.instance_variable_set(:@worker_thread, nil)
|
79
|
-
OneApm::Agent.instance.harvester.instance_variable_set(:@starting_pid, nil)
|
80
|
-
OneApm::Probe.init({:agent_enabled => true, :sync_startup => true})
|
81
|
-
end
|
82
|
-
|
83
|
-
def logger
|
84
|
-
@logger || StartupLogger.instance
|
85
|
-
end
|
69
|
+
attr_reader :monotonic_gc_profiler
|
86
70
|
|
87
|
-
|
88
|
-
|
89
|
-
|
71
|
+
def self.instance
|
72
|
+
@instance ||= self.new
|
73
|
+
end
|
90
74
|
|
91
|
-
|
92
|
-
|
93
|
-
|
75
|
+
def self.config
|
76
|
+
OneApm::Manager.config
|
77
|
+
end
|
94
78
|
|
95
|
-
|
96
|
-
|
97
|
-
end
|
79
|
+
def initialize
|
80
|
+
start_service
|
98
81
|
|
99
|
-
|
100
|
-
@config.remove_config_type(:manual)
|
101
|
-
@config.remove_config_type(:server)
|
102
|
-
end
|
82
|
+
@events = OneApm::Support::EventListener.new
|
103
83
|
|
104
|
-
|
105
|
-
|
106
|
-
value_to_store = OneApm::Metrics::Stats.create_from_hash(value) if value.is_a?(Hash)
|
107
|
-
instance.stats_engine.tl_record_unscoped_metrics(metric_name, value_to_store)
|
108
|
-
end
|
84
|
+
init_containers @events
|
85
|
+
OneApm::Agent::SyntheticsMonitor.new @events
|
109
86
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
def drop_buffered_data
|
117
|
-
instance.drop_buffered_data
|
118
|
-
end
|
87
|
+
@cross_app_monitor = OneApm::Agent::CrossAppMonitor.new(@events)
|
88
|
+
@transaction_rules = OneApm::Support::RulesEngine.new
|
89
|
+
@harvest_samplers = OneApm::Agent::SamplerCollection.new(@events)
|
90
|
+
@monotonic_gc_profiler = OneApm::Support::VM::MonotonicGCProfiler.new
|
91
|
+
@javascript_instrumentor = OneApm::Agent::JavascriptInstrumentor.new(@events)
|
119
92
|
|
120
|
-
|
121
|
-
|
122
|
-
end
|
93
|
+
@harvester = OneApm::Agent::Harvester.new(@events)
|
94
|
+
@after_fork_lock = Mutex.new
|
123
95
|
|
124
|
-
|
125
|
-
|
126
|
-
|
96
|
+
@connect_state = :pending
|
97
|
+
@connect_attempts = 0
|
98
|
+
@environment_report = nil
|
127
99
|
|
128
|
-
|
129
|
-
state = instance.set_record_sql(false)
|
130
|
-
begin
|
131
|
-
yield
|
132
|
-
ensure
|
133
|
-
instance.set_record_sql(state)
|
100
|
+
@harvest_lock = Mutex.new
|
134
101
|
end
|
135
|
-
end
|
136
102
|
|
137
|
-
|
138
|
-
|
139
|
-
begin
|
140
|
-
yield
|
141
|
-
ensure
|
142
|
-
instance.set_record_tt(state)
|
103
|
+
def probe
|
104
|
+
OneApm::Probe.instance
|
143
105
|
end
|
144
|
-
end
|
145
|
-
|
146
|
-
def ignore_transaction
|
147
|
-
txn = OneApm::Transaction.tl_current
|
148
|
-
txn.ignore! if txn
|
149
|
-
end
|
150
106
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
107
|
+
def start_service
|
108
|
+
if OneApm::Manager.config[:monitor_mode] && !@service
|
109
|
+
@service = OneApm::Collector::CollectorService.new
|
110
|
+
end
|
111
|
+
end
|
155
112
|
|
156
|
-
|
157
|
-
|
158
|
-
txn.ignore_enduser! if txn
|
159
|
-
end
|
113
|
+
def start
|
114
|
+
return unless agent_should_start?
|
160
115
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
ensure
|
165
|
-
instance.pop_trace_execution_flag
|
166
|
-
end
|
116
|
+
log_startup
|
117
|
+
check_config_and_start_agent
|
118
|
+
log_version_and_pid
|
167
119
|
|
168
|
-
|
169
|
-
|
170
|
-
|
120
|
+
events.subscribe(:finished_configuring) do
|
121
|
+
log_ignore_url_regexes
|
122
|
+
end
|
171
123
|
end
|
172
|
-
nil
|
173
|
-
end
|
174
124
|
|
175
|
-
|
176
|
-
|
177
|
-
|
125
|
+
def shutdown(options = {})
|
126
|
+
return if not started?
|
127
|
+
OneApm::Manager.logger.info "Starting Agent shutdown"
|
178
128
|
|
179
|
-
|
180
|
-
|
181
|
-
|
129
|
+
stop_event_loop
|
130
|
+
untraced_graceful_disconnect
|
131
|
+
OneApm::Manager.revert_to_default_configuration
|
182
132
|
|
183
|
-
|
184
|
-
|
185
|
-
end
|
186
|
-
|
187
|
-
def ignore_error_filter(&block)
|
188
|
-
if block
|
189
|
-
OneApm::Collector::ErrorCollector.ignore_error_filter = block
|
190
|
-
else
|
191
|
-
OneApm::Collector::ErrorCollector.ignore_error_filter
|
133
|
+
@started = nil
|
134
|
+
OneApm::Probe.reset
|
192
135
|
end
|
193
|
-
end
|
194
136
|
|
195
|
-
|
196
|
-
|
197
|
-
nil
|
198
|
-
end
|
199
|
-
|
200
|
-
def notice_sql(sql, metric, config, elapsed_time, state, &explainer)
|
201
|
-
instance.transaction_sampler.notice_sql(sql, config, elapsed_time, state, &explainer)
|
202
|
-
instance.sql_sampler.notice_sql(sql, metric, config, elapsed_time, state, &explainer)
|
203
|
-
end
|
137
|
+
def agent_should_start?
|
138
|
+
return false if already_started? || disabled? || defer_for_background_jobs?
|
204
139
|
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
140
|
+
unless app_name_configured?
|
141
|
+
OneApm::Manager.logger.error "No application name configured in #{probe.env} environment"
|
142
|
+
false
|
143
|
+
else
|
144
|
+
true
|
145
|
+
end
|
211
146
|
end
|
212
|
-
end
|
213
147
|
|
214
|
-
|
215
|
-
|
216
|
-
|
148
|
+
def connect(options={})
|
149
|
+
opts = {
|
150
|
+
:keep_retrying => OneApm::Manager.config[:keep_retrying],
|
151
|
+
:force_reconnect => OneApm::Manager.config[:force_reconnect]
|
152
|
+
}.merge(options)
|
153
|
+
|
154
|
+
return unless should_connect?(opts[:force_reconnect])
|
155
|
+
|
156
|
+
OneApm::Manager.logger.debug "Connecting Process to OneApm: #$0"
|
157
|
+
query_server_for_configuration
|
158
|
+
@connected_pid = Process.pid
|
159
|
+
@connect_state = :connected
|
160
|
+
rescue OneApm::ForceDisconnectException => e
|
161
|
+
handle_force_disconnect(e)
|
162
|
+
rescue OneApm::LicenseException => e
|
163
|
+
handle_license_error(e)
|
164
|
+
rescue OneApm::UnrecoverableAgentException => e
|
165
|
+
handle_unrecoverable_agent_error(e)
|
166
|
+
rescue StandardError, Timeout::Error, OneApm::ServerConnectionException => e
|
167
|
+
log_error(e)
|
168
|
+
if opts[:keep_retrying]
|
169
|
+
note_connect_failure
|
170
|
+
OneApm::Manager.logger.info "Will re-attempt in #{connect_retry_period} seconds"
|
171
|
+
sleep connect_retry_period
|
172
|
+
retry
|
173
|
+
else
|
174
|
+
disconnect
|
175
|
+
end
|
176
|
+
rescue Exception => e
|
177
|
+
OneApm::Manager.logger.error "Exception of unexpected type during Agent#connect():", e
|
178
|
+
|
179
|
+
raise
|
180
|
+
end
|
217
181
|
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
182
|
+
def graceful_disconnect
|
183
|
+
if connected?
|
184
|
+
begin
|
185
|
+
@service.request_timeout = 10
|
186
|
+
|
187
|
+
@events.notify(:before_shutdown)
|
188
|
+
transmit_data
|
189
|
+
transmit_event_data
|
190
|
+
transmit_utilization_data if OneApm::Manager.config[:collect_utilization]
|
191
|
+
|
192
|
+
if @connected_pid == $$ && !@service.kind_of?(OneApm::Collector::CollectorService)
|
193
|
+
OneApm::Manager.logger.debug "Sending OneApm service agent run shutdown message"
|
194
|
+
@service.shutdown(Time.now.to_f)
|
195
|
+
else
|
196
|
+
OneApm::Manager.logger.debug "This agent connected from parent process #{@connected_pid}--not sending shutdown"
|
197
|
+
end
|
198
|
+
OneApm::Manager.logger.debug "Graceful disconnect complete"
|
199
|
+
rescue Timeout::Error, StandardError => e
|
200
|
+
OneApm::Manager.logger.debug "Error when disconnecting #{e.class.name}: #{e.message}"
|
201
|
+
end
|
202
|
+
else
|
203
|
+
OneApm::Manager.logger.debug "Bypassing graceful disconnect - agent not connected"
|
204
|
+
end
|
222
205
|
end
|
223
|
-
end
|
224
206
|
|
225
|
-
|
226
|
-
|
207
|
+
def untraced_graceful_disconnect
|
208
|
+
OneApm::Manager.disable_all_tracing do
|
209
|
+
graceful_disconnect
|
210
|
+
end
|
211
|
+
rescue => e
|
212
|
+
OneApm::Manager.logger.error e
|
213
|
+
end
|
227
214
|
end
|
228
215
|
|
229
|
-
|
230
|
-
instance
|
231
|
-
|
232
|
-
|
233
|
-
end
|
216
|
+
class ShimAgent < OneApm::Agent::Agent
|
217
|
+
def self.instance
|
218
|
+
@instance ||= self.new
|
219
|
+
end
|
234
220
|
|
235
|
-
|
236
|
-
|
237
|
-
|
221
|
+
def initialize
|
222
|
+
super
|
223
|
+
@stats_engine.extend OneApm::Collector::StatsEngine::Shim
|
224
|
+
@transaction_sampler.extend OneApm::Collector::TransactionSampler::Shim
|
225
|
+
@sql_sampler.extend OneApm::Collector::SqlSampler::Shim
|
226
|
+
@error_collector.extend OneApm::Collector::ErrorCollector::Shim
|
227
|
+
end
|
238
228
|
|
239
|
-
|
240
|
-
|
241
|
-
|
229
|
+
def after_fork *args; end
|
230
|
+
def start *args; end
|
231
|
+
def shutdown *args; end
|
232
|
+
def merge_data_for_endpoint *args; end
|
233
|
+
def push_trace_execution_flag *args; end
|
234
|
+
def pop_trace_execution_flag *args; end
|
235
|
+
def browser_timing_header; "" end
|
242
236
|
end
|
243
|
-
|
244
237
|
end
|
245
238
|
end
|
@@ -46,7 +46,7 @@ module OneApm
|
|
46
46
|
# to tell the user what happened, since this is not an error
|
47
47
|
# we can handle gracefully.
|
48
48
|
def log_error(error)
|
49
|
-
|
49
|
+
OneApm::Manager.logger.error "Error establishing connection with OneApm Service at #{@service.server}:", error
|
50
50
|
end
|
51
51
|
|
52
52
|
# When the server sends us an error with the license key, we
|
@@ -57,14 +57,14 @@ module OneApm
|
|
57
57
|
# no longer try to connect to the server, saving the
|
58
58
|
# application and the server load
|
59
59
|
def handle_license_error(error)
|
60
|
-
|
60
|
+
OneApm::Manager.logger.error( \
|
61
61
|
error.message, \
|
62
62
|
"Visit oneapm.com to obtain a valid license key, or to upgrade your account.")
|
63
63
|
disconnect
|
64
64
|
end
|
65
65
|
|
66
66
|
def handle_unrecoverable_agent_error(error)
|
67
|
-
|
67
|
+
OneApm::Manager.logger.error(error.message)
|
68
68
|
disconnect
|
69
69
|
shutdown
|
70
70
|
end
|
@@ -79,7 +79,7 @@ module OneApm
|
|
79
79
|
# require calls in Rails environments, so this method should only
|
80
80
|
# be called synchronously from on the main thread.
|
81
81
|
def environment_for_connect
|
82
|
-
|
82
|
+
OneApm::Manager.config[:send_environment_info] ? Array(EnvironmentReport.new) : []
|
83
83
|
end
|
84
84
|
|
85
85
|
# We've seen objects in the environment report (Rails.env in
|
@@ -98,20 +98,20 @@ module OneApm
|
|
98
98
|
{
|
99
99
|
:pid => $$,
|
100
100
|
:host => local_host,
|
101
|
-
:app_name =>
|
101
|
+
:app_name => OneApm::Manager.config.app_names,
|
102
102
|
:language => 'ruby',
|
103
|
-
:labels =>
|
103
|
+
:labels => OneApm::Manager.config.parsed_labels,
|
104
104
|
:agent_version => OneApm::VERSION::STRING,
|
105
105
|
:environment => @environment_report,
|
106
|
-
:settings =>
|
107
|
-
:high_security =>
|
106
|
+
:settings => OneApm::Manager.config.to_collector_hash,
|
107
|
+
:high_security => OneApm::Manager.config[:high_security],
|
108
108
|
:identifier => "ruby:#{local_host}"
|
109
109
|
}
|
110
110
|
end
|
111
111
|
|
112
112
|
# apdex_f is always 4 times the apdex_t
|
113
113
|
def apdex_f
|
114
|
-
(4 *
|
114
|
+
(4 * OneApm::Manager.config[:apdex_t]).to_f
|
115
115
|
end
|
116
116
|
|
117
117
|
# Sets the collector host and connects to the server, then
|
@@ -137,16 +137,16 @@ module OneApm
|
|
137
137
|
|
138
138
|
@service.agent_id = config_data['agent_run_id'] if @service
|
139
139
|
|
140
|
-
|
141
|
-
server_config = OneApm::Configuration::ServerSource.new(config_data,
|
142
|
-
|
140
|
+
OneApm::Manager.logger.debug "Server provided config: #{config_data.inspect}"
|
141
|
+
server_config = OneApm::Configuration::ServerSource.new(config_data, OneApm::Manager.config)
|
142
|
+
OneApm::Manager.config.replace_or_add_config(server_config)
|
143
143
|
log_connection!(config_data) if @service
|
144
144
|
|
145
145
|
@transaction_rules = OneApm::Support::RulesEngine.create_transaction_rules(config_data)
|
146
146
|
@stats_engine.metric_rules = OneApm::Support::RulesEngine.create_metric_rules(config_data)
|
147
147
|
|
148
148
|
# If you're adding something else here to respond to the server-side config,
|
149
|
-
# use
|
149
|
+
# use OneApm::Manager.agent.events.subscribe(:finished_configuring) callback instead!
|
150
150
|
end
|
151
151
|
|
152
152
|
def local_host
|
@@ -156,9 +156,9 @@ module OneApm
|
|
156
156
|
# Logs when we connect to the server, for debugging purposes
|
157
157
|
# - makes sure we know if an agent has not connected
|
158
158
|
def log_connection!(config_data)
|
159
|
-
|
160
|
-
|
161
|
-
|
159
|
+
OneApm::Manager.logger.debug "Connected to OneApm Service at #{@service.collector.name}"
|
160
|
+
OneApm::Manager.logger.debug "Agent Run = #{@service.agent_id}."
|
161
|
+
OneApm::Manager.logger.debug "Connection data = #{config_data.inspect}"
|
162
162
|
if config_data['messages'] && config_data['messages'].any?
|
163
163
|
log_collector_messages(config_data['messages'])
|
164
164
|
end
|
@@ -166,7 +166,7 @@ module OneApm
|
|
166
166
|
|
167
167
|
def log_collector_messages(messages)
|
168
168
|
messages.each do |message|
|
169
|
-
|
169
|
+
OneApm::Manager.logger.send(message['level'].downcase, message['message'])
|
170
170
|
end
|
171
171
|
end
|
172
172
|
end
|