From 3de5eed58e1825b10264c9f9d00db24340db808d Mon Sep 17 00:00:00 2001 From: Doug Youch Date: Thu, 9 Sep 2010 14:45:46 +0000 Subject: [PATCH] Started hooking in the experiments with in coming requests. --- app/controllers/module_app_controller.rb | 17 +++++++++++++---- app/models/domain_log_visitor.rb | 4 ++++ app/models/experiment.rb | 9 ++++++--- app/models/site_node.rb | 2 +- lib/webiva_monkey_patches.rb | 7 ++++++- 5 files changed, 30 insertions(+), 9 deletions(-) diff --git a/app/controllers/module_app_controller.rb b/app/controllers/module_app_controller.rb index 22de86ca..00496c54 100644 --- a/app/controllers/module_app_controller.rb +++ b/app/controllers/module_app_controller.rb @@ -121,6 +121,11 @@ def handle_page @revision = @page.page_revisions.find_by_identifier_hash(params['__VER__']) return display_missing_page unless @revision return render :inline => 'Invalid version' unless @revision.revision_type == 'real' || @revision.revision_type == 'temp' + elsif @page.is_running_an_experiment? + self.log_visitor + if session[:domain_log_visitor] && session[:domain_log_visitor][:id] + @revision = @page.experiment_page_revision session[:domain_log_visitor], session[:cms_language] + end end engine = SiteNodeEngine.new(@page,:display => session[:cms_language], :path => path_args, :revision => @revision) @@ -133,9 +138,7 @@ def handle_page end # Add a new visitor in - if Configuration.logging - @capture_location = DomainLogVisitor.log_visitor(cookies,myself,session,request) - end + self.log_visitor # If it's a redirect, just redirect if @output.redirect? @@ -172,7 +175,13 @@ def include_stat_capture @output.includes[:js] << "http#{'s' if request.ssl?}://www.google.com/jsapi" @output.includes[:js] << "/javascripts/webalytics.js" end - + + def log_visitor + if Configuration.logging + @capture_location = DomainLogVisitor.log_visitor(cookies,myself,session,request) + end + end + def process_logging #:nodoc: if Configuration.logging unless request.bot? diff --git a/app/models/domain_log_visitor.rb b/app/models/domain_log_visitor.rb index a04c6cdf..843c39d5 100644 --- a/app/models/domain_log_visitor.rb +++ b/app/models/domain_log_visitor.rb @@ -6,6 +6,7 @@ class DomainLogVisitor < DomainModel before_create :generate_hash has_many :domain_log_sessions, :order => 'domain_log_sessions.created_at DESC' + has_many :experiment_users def last_session self.domain_log_sessions[0] @@ -55,6 +56,9 @@ def self.log_visitor(cookies,user,session,request) else cookies[:v] = nil end + elsif cookies[:v] && session[:domain_log_visitor].is_a?(Integer) + div = DomainLogVisitor.find_by_id session[:domain_log_visitor] + session[:domain_log_visitor] = { :id => dlv.id, :loc => dlv.country, :end_user_id => user.id } if div end if !cookies[:v] diff --git a/app/models/experiment.rb b/app/models/experiment.rb index 8e9098d7..1ceb3d45 100644 --- a/app/models/experiment.rb +++ b/app/models/experiment.rb @@ -126,14 +126,16 @@ def after_save end def get_user(domain_log_visitor, language) - user = self.experiment_users.find_by_domain_log_visitor_id_and_language(domain_log_visitor.id, language) - user.update_attribute(:end_user_id, domain_log_visitor.end_user_id) if user && user.end_user_id.nil? && domain_log_visitor.end_user_id + user = self.experiment_users.find_by_domain_log_visitor_id_and_language(domain_log_visitor[:id], language) + user.update_attribute(:end_user_id, domain_log_visitor[:end_user_id]) if user && user.end_user_id.nil? && domain_log_visitor[:end_user_id] user end def get_version(domain_log_visitor, language) return nil unless self.is_running? + domain_log_visitor = domain_log_visitor.attributes.symbolize_keys if domain_log_visitor.is_a?(DomainModel) + user = self.get_user(domain_log_visitor, language) return user.experiment_version if user @@ -149,7 +151,7 @@ def get_version(domain_log_visitor, language) return nil unless version - self.experiment_users.create :experiment_version_id => version.id, :domain_log_visitor_id => domain_log_visitor.id, :language => language, :end_user_id => domain_log_visitor.end_user_id + self.experiment_users.create :experiment_version_id => version.id, :domain_log_visitor_id => domain_log_visitor[:id], :language => language, :end_user_id => domain_log_visitor[:end_user_id] version end @@ -159,6 +161,7 @@ def success!(domain_log_visitor, language) end def self.success!(experiment_id, domain_log_visitor, language) + domain_log_visitor = domain_log_visitor.attributes.symbolize_keys if domain_log_visitor.is_a?(DomainModel) exp = Experiment.find_by_id experiment_id exp.success!(domain_log_visitor, language) if exp end diff --git a/app/models/site_node.rb b/app/models/site_node.rb index f3d8620f..51cdf104 100644 --- a/app/models/site_node.rb +++ b/app/models/site_node.rb @@ -48,7 +48,7 @@ class SiteNode < DomainModel expires_site def is_running_an_experiment? - self.experiment_id && self.experiment && self.experiment.is_running? + self.experiment_id && self.experiment && self.experiment.is_running? && self.experiment.active? end def experiment_version(domain_log_visitor, language) diff --git a/lib/webiva_monkey_patches.rb b/lib/webiva_monkey_patches.rb index 9e2218f1..595f30ed 100644 --- a/lib/webiva_monkey_patches.rb +++ b/lib/webiva_monkey_patches.rb @@ -14,10 +14,15 @@ def data end class Request #:nodoc: + @@bots = ["google", "bot", "yahoo", "spider", "archiver", "curl", "python", "nambu", "twitt", "perl", "sphere", "pear", "java", "wordpress", "radian", "crawl", "yandex", "eventbox", "monitor", "mechanize", "facebook", "slurp", "msnbot", "nutch", "search", "wget"] + def self.bots + @@bots + end + def bot? return @is_bot if ! @is_bot.nil? agent = user_agent.to_s.downcase - @is_bot = ['msnbot','yahoo! slurp','googlebot','bot','spider','crawler'].detect { |b| agent.include?(b) } + @is_bot = self.class.bots.detect { |b| agent.include?(b) } ? true : false end end end