From ceb80611d65c683b97a6618bee09af6ef8891ed3 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 3 Mar 2014 15:16:10 +1100 Subject: [PATCH] PERF: defer last_ip_address and last_seen updates --- app/jobs/regular/update_user_info.rb | 12 ++++++++++++ lib/auth/default_current_user_provider.rb | 7 +++++-- 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 app/jobs/regular/update_user_info.rb diff --git a/app/jobs/regular/update_user_info.rb b/app/jobs/regular/update_user_info.rb new file mode 100644 index 00000000000..7809b6dd4d1 --- /dev/null +++ b/app/jobs/regular/update_user_info.rb @@ -0,0 +1,12 @@ +module Jobs + + # Asynchronously send an email to a user + class UpdateUserInfo < Jobs::Base + + def execute(args) + user = User.where(id: args[:user_id]).first + user.update_last_seen! + user.update_ip_address!(args[:ip_address]) + end + end +end diff --git a/lib/auth/default_current_user_provider.rb b/lib/auth/default_current_user_provider.rb index 0f047da6a42..b48472e91af 100644 --- a/lib/auth/default_current_user_provider.rb +++ b/lib/auth/default_current_user_provider.rb @@ -12,6 +12,7 @@ class Auth::DefaultCurrentUserProvider @request = Rack::Request.new(env) end + # our current user, return nil if none is found def current_user return @env[CURRENT_USER_KEY] if @env.key?(CURRENT_USER_KEY) @@ -31,8 +32,10 @@ class Auth::DefaultCurrentUserProvider end if current_user - current_user.update_last_seen! - current_user.update_ip_address!(request.ip) + + Jobs.enqueue(:update_user_info, + user_id: current_user.id, + ip: request.ip) end # possible we have an api call, impersonate