diff --git a/lib/middleware/anonymous_cache.rb b/lib/middleware/anonymous_cache.rb index 559605c69a2..8c4ccc6afeb 100644 --- a/lib/middleware/anonymous_cache.rb +++ b/lib/middleware/anonymous_cache.rb @@ -66,7 +66,7 @@ module Middleware if @env[DISCOURSE_RENDER] == "crawler" || CrawlerDetection.crawler?(user_agent, @env["HTTP_VIA"]) :true else - user_agent.downcase.include?("discourse") ? :true : :false + user_agent.downcase.include?("discourse") && !user_agent.downcase.include?("mobile") ? :true : :false end end @is_crawler == :true diff --git a/spec/components/middleware/request_tracker_spec.rb b/spec/components/middleware/request_tracker_spec.rb index b7433f4af6e..22fad3addc5 100644 --- a/spec/components/middleware/request_tracker_spec.rb +++ b/spec/components/middleware/request_tracker_spec.rb @@ -68,17 +68,30 @@ describe Middleware::RequestTracker do expect(ApplicationRequest.page_view_crawler.first.count).to eq(1) expect(ApplicationRequest.page_view_anon_mobile.first.count).to eq(1) - # log discourse User Agent requests as crawler for page views + expect(ApplicationRequest.page_view_crawler.first.count).to eq(1) + end + + it "can log Discourse user agent requests correctly" do + # log discourse api agents as crawlers for page view stats... data = Middleware::RequestTracker.get_data(env( "HTTP_USER_AGENT" => "DiscourseAPI Ruby Gem 0.19.0" ), ["200", { "Content-Type" => 'text/html' }], 0.1) Middleware::RequestTracker.log_request(data) ApplicationRequest.write_cache! + expect(ApplicationRequest.page_view_crawler.first.count).to eq(1) - expect(ApplicationRequest.page_view_crawler.first.count).to eq(2) + # ...but count our mobile app user agents as regular visits + data = Middleware::RequestTracker.get_data(env( + "HTTP_USER_AGENT" => "Mozilla/5.0 AppleWebKit/605.1.15 Mobile/15E148 DiscourseHub)" + ), ["200", { "Content-Type" => 'text/html' }], 0.1) + + Middleware::RequestTracker.log_request(data) + ApplicationRequest.write_cache! + + expect(ApplicationRequest.page_view_crawler.first.count).to eq(1) + expect(ApplicationRequest.page_view_anon.first.count).to eq(1) end - end context "rate limiting" do