From cbe18eb0dfb8063251d2b3f18d4a326464ef3e1b Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 26 Feb 2015 11:40:57 +1100 Subject: [PATCH] FEATURE: allow view exclusion using custom header Set Discourse-Track-View to either "0" or "false" to exclude request --- lib/middleware/request_tracker.rb | 8 ++++++- .../middleware/request_tracker_spec.rb | 24 +++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/lib/middleware/request_tracker.rb b/lib/middleware/request_tracker.rb index 3922dd193a..ee8c25f962 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 c8064be052..2799082bfa 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)"