diff --git a/lib/middleware/request_tracker.rb b/lib/middleware/request_tracker.rb index 3922dd193a0..ee8c25f9621 100644 --- a/lib/middleware/request_tracker.rb +++ b/lib/middleware/request_tracker.rb @@ -51,12 +51,18 @@ class Middleware::RequestTracker helper = Middleware::AnonymousCache::Helper.new(env) request = Rack::Request.new(env) + + env_track_view = env[TRACK_VIEW] + track_view = status == 200 + track_view &&= env_track_view != "0".freeze && env_track_view != "false".freeze + track_view &&= env_track_view || (request.get? && !request.xhr? && headers[CONTENT_TYPE] =~ /text\/html/) + { status: status, is_crawler: helper.is_crawler?, has_auth_cookie: helper.has_auth_cookie?, is_background: request.path =~ /^\/message-bus\// || request.path == /\/topics\/timings/, - track_view: (env[TRACK_VIEW] || (request.get? && !request.xhr? && headers[CONTENT_TYPE] =~ /text\/html/)) && status == 200 + track_view: track_view } end diff --git a/spec/components/middleware/request_tracker_spec.rb b/spec/components/middleware/request_tracker_spec.rb index c8064be052f..2799082bfab 100644 --- a/spec/components/middleware/request_tracker_spec.rb +++ b/spec/components/middleware/request_tracker_spec.rb @@ -13,10 +13,30 @@ describe Middleware::RequestTracker do end context "log_request" do - it "can log requests correctly" do + before do freeze_time Time.now - ApplicationRequest.clear_cache! + end + + def log_tracked_view(val) + data = Middleware::RequestTracker.get_data(env( + "HTTP_DISCOURSE_TRACK_VIEW" => val + ), ["200",{"Content-Type" => 'text/html'}]) + + Middleware::RequestTracker.log_request(data) + end + + it "can exclude/include based on custom header" do + log_tracked_view("true") + log_tracked_view("1") + log_tracked_view("false") + log_tracked_view("0") + ApplicationRequest.write_cache! + + ApplicationRequest.page_view_anon.first.count.should == 2 + end + + it "can log requests correctly" do data = Middleware::RequestTracker.get_data(env( "HTTP_USER_AGENT" => "AdsBot-Google (+http://www.google.com/adsbot.html)"