mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
improve metrics gathered using in our traffic section
this also pulls out the middleware into its own home and inserts in front
This commit is contained in:
@@ -114,29 +114,6 @@ module Middleware
|
||||
@app = app
|
||||
end
|
||||
|
||||
def self.log_request_on_site(env, helper=nil)
|
||||
host = RailsMultisite::ConnectionManagement.host(env)
|
||||
RailsMultisite::ConnectionManagement.with_hostname(host) do
|
||||
log_request(env,helper)
|
||||
end
|
||||
end
|
||||
|
||||
def self.log_request(env,helper=nil)
|
||||
|
||||
helper ||= Helper.new(env)
|
||||
|
||||
type =
|
||||
if helper.is_crawler?
|
||||
:crawler
|
||||
elsif helper.has_auth_cookie?
|
||||
:logged_in
|
||||
else
|
||||
:anon
|
||||
end
|
||||
|
||||
ApplicationRequest.increment!(type)
|
||||
end
|
||||
|
||||
def call(env)
|
||||
helper = Helper.new(env)
|
||||
|
||||
@@ -146,10 +123,6 @@ module Middleware
|
||||
@app.call(env)
|
||||
end
|
||||
|
||||
ensure
|
||||
Scheduler::Defer.later "Track view" do
|
||||
self.class.log_request_on_site(env,helper)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
66
lib/middleware/request_tracker.rb
Normal file
66
lib/middleware/request_tracker.rb
Normal file
@@ -0,0 +1,66 @@
|
||||
require_dependency 'middleware/anonymous_cache'
|
||||
|
||||
class Middleware::RequestTracker
|
||||
|
||||
def initialize(app, settings={})
|
||||
@app = app
|
||||
end
|
||||
|
||||
def self.log_request_on_site(result, env, helper=nil)
|
||||
host = RailsMultisite::ConnectionManagement.host(env)
|
||||
RailsMultisite::ConnectionManagement.with_hostname(host) do
|
||||
log_request(result,env,helper)
|
||||
end
|
||||
end
|
||||
|
||||
PATH_PARAMS = "action_dispatch.request.path_parameters".freeze
|
||||
|
||||
def self.log_request(result,env,helper=nil)
|
||||
|
||||
helper ||= Middleware::AnonymousCache::Helper.new(env)
|
||||
params = env[PATH_PARAMS]
|
||||
request = Rack::Request.new(env)
|
||||
|
||||
ApplicationRequest.increment!(:total)
|
||||
|
||||
status,_ = result
|
||||
status = status.to_i
|
||||
|
||||
if status >= 500
|
||||
ApplicationRequest.increment!(:server_error)
|
||||
elsif status >= 400
|
||||
ApplicationRequest.increment!(:client_error)
|
||||
elsif status >= 300
|
||||
ApplicationRequest.increment!(:redirect)
|
||||
end
|
||||
|
||||
if request.path =~ /^\/message-bus\// || request.path == /\/topics\/timings/
|
||||
ApplicationRequest.increment!(:background)
|
||||
elsif status >= 200 && status < 300
|
||||
ApplicationRequest.increment!(:success)
|
||||
end
|
||||
|
||||
if params && params[:controller] == "topics" && params[:action] == "show"
|
||||
if helper.is_crawler?
|
||||
ApplicationRequest.increment!(:topic_crawler)
|
||||
elsif helper.has_auth_cookie?
|
||||
ApplicationRequest.increment!(:topic_logged_in)
|
||||
else
|
||||
ApplicationRequest.increment!(:topic_anon)
|
||||
end
|
||||
end
|
||||
|
||||
rescue => ex
|
||||
Discourse.handle_exception(ex, {message: "Failed to log request"})
|
||||
end
|
||||
|
||||
|
||||
def call(env)
|
||||
result = @app.call(env)
|
||||
ensure
|
||||
Scheduler::Defer.later("Track view", _db=nil) do
|
||||
self.class.log_request_on_site(result,env)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -14,10 +14,10 @@ module Scheduler
|
||||
@async = val
|
||||
end
|
||||
|
||||
def later(desc = nil, &blk)
|
||||
def later(desc = nil, db=RailsMultisite::ConnectionManagement.current_db, &blk)
|
||||
if @async
|
||||
start_thread unless @thread.alive?
|
||||
@queue << [RailsMultisite::ConnectionManagement.current_db, blk, desc]
|
||||
@queue << [db, blk, desc]
|
||||
else
|
||||
blk.call
|
||||
end
|
||||
@@ -48,7 +48,7 @@ module Scheduler
|
||||
def do_work
|
||||
db, job, desc = @queue.deq
|
||||
begin
|
||||
RailsMultisite::ConnectionManagement.establish_connection(db: db)
|
||||
RailsMultisite::ConnectionManagement.establish_connection(db: db) if db
|
||||
job.call
|
||||
rescue => ex
|
||||
Discourse.handle_exception(ex, {message: "Running deferred code '#{desc}'"})
|
||||
|
||||
Reference in New Issue
Block a user