def initialize
@started = false
@event_loop = nil
@service = NewRelicService.new
@events = NewRelic::Agent::EventListener.new
@stats_engine = NewRelic::Agent::StatsEngine.new
@transaction_sampler = NewRelic::Agent::TransactionSampler.new
@sql_sampler = NewRelic::Agent::SqlSampler.new
@agent_command_router = NewRelic::Agent::Commands::AgentCommandRouter.new(@events)
@cross_app_monitor = NewRelic::Agent::CrossAppMonitor.new(@events)
@synthetics_monitor = NewRelic::Agent::SyntheticsMonitor.new(@events)
@error_collector = NewRelic::Agent::ErrorCollector.new
@transaction_rules = NewRelic::Agent::RulesEngine.new
@harvest_samplers = NewRelic::Agent::SamplerCollection.new(@events)
@monotonic_gc_profiler = NewRelic::Agent::VM::MonotonicGCProfiler.new
@javascript_instrumentor = NewRelic::Agent::JavascriptInstrumentor.new(@events)
@harvester = NewRelic::Agent::Harvester.new(@events)
@after_fork_lock = Mutex.new
@transaction_event_recorder = NewRelic::Agent::TransactionEventRecorder.new
@custom_event_aggregator = NewRelic::Agent::CustomEventAggregator.new
@connect_state = :pending
@connect_attempts = 0
@environment_report = nil
@waited_on_connect = nil
@connected_pid = nil
@wait_on_connect_reader, @wait_on_connect_writer = IO.pipe
setup_attribute_filter
end