module PhusionPassenger::ClassicRailsExtensions::AnalyticsLogging

def self.install!(options)

def self.install!(options)
	@@analytics_logger = options["analytics_logger"]
	# If the Ruby interpreter supports GC statistics then turn it on
	# so that the info can be logged.
	GC.enable_stats if GC.respond_to?(:enable_stats)
	
	if defined?(ActionController)
		require 'phusion_passenger/classic_rails_extensions/analytics_logging/ac_base_extension'
		ActionController::Base.class_eval do
			include ACBaseExtension
			alias_method_chain :perform_action, :passenger
			alias_method_chain :render, :passenger
		end
		
		require 'phusion_passenger/classic_rails_extensions/analytics_logging/ac_benchmarking_extension'
		ActionController::Benchmarking::ClassMethods.class_eval do
			include ACBenchmarkingExtension
			alias_method_chain :benchmark, :passenger
		end
		
		require 'phusion_passenger/classic_rails_extensions/analytics_logging/ac_rescue_extension'
		ActionController::Rescue.class_eval do
			include ACRescueExtension
			alias_method_chain :rescue_action, :passenger
		end
	end
	
	if defined?(ActionView)
		require 'phusion_passenger/classic_rails_extensions/analytics_logging/av_benchmark_helper_extension'
		ActionView::Helpers::BenchmarkHelper.class_eval do
			include AVBenchmarkHelperExtension
			alias_method_chain :benchmark, :passenger
		end
	end
	
	if defined?(ActiveRecord)
		require 'phusion_passenger/classic_rails_extensions/analytics_logging/ar_abstract_adapter_extension'
		ActiveRecord::ConnectionAdapters::AbstractAdapter.class_eval do
			include ARAbstractAdapterExtension
			alias_method_chain :log, :passenger
		end
	end
	
	if defined?(ActiveSupport::Cache::Store) && Rails.cache
		require 'phusion_passenger/classic_rails_extensions/analytics_logging/as_cache_extension'
		ActiveSupport::Cache::Store.class_eval do
			include CacheStoreExtension
			case Rails::VERSION::MINOR
			when 1
				# Rails 2.1
				alias_method :fetch, :fetch_2_1
			when 2
				# Rails 2.2
				alias_method :fetch, :fetch_2_2
			when 3
				# Rails 2.3
				alias_method :fetch, :fetch_2_3
			end
		end
		Rails.cache.extend(ConcreteCacheStoreExtension)
	end
end

def self.new_transaction_log(env, category = :requests)

def self.new_transaction_log(env, category = :requests)
	if env[PASSENGER_TXN_ID]
		group_name = env[PASSENGER_GROUP_NAME]
		union_station_key = env[PASSENGER_UNION_STATION_KEY]
		log = @@analytics_logger.new_transaction(group_name, category,
			union_station_key)
		begin
			yield log
		ensure
			log.close
		end
	end
end