Skip to content

Commit

Permalink
Rework GistFetcher to isolate file fetching within its own background…
Browse files Browse the repository at this point in the history
… job
  • Loading branch information
rwdaigle committed Oct 17, 2012
1 parent 239a044 commit f10e771
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 39 deletions.
2 changes: 1 addition & 1 deletion app/controllers/gists_controller.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def search
end end


def refresh def refresh
QC.enqueue("GistFetcher.fetch_user", current_user.id) QC.enqueue("GistFetcher.fetch_gists", current_user.id)
redirect_to search_gists_path redirect_to search_gists_path
end end


Expand Down
2 changes: 1 addition & 1 deletion app/controllers/sessions_controller.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def create
redirect_to(request.env['omniauth.origin'] || search_gists_path) redirect_to(request.env['omniauth.origin'] || search_gists_path)
else else
log({ns: self.class, fn: __method__, measure: true, at: 'first-login'}, user) log({ns: self.class, fn: __method__, measure: true, at: 'first-login'}, user)
QC.enqueue("GistFetcher.fetch_user", user.id) QC.enqueue("GistFetcher.fetch_gists", user.id)
redirect_to status_gists_path redirect_to status_gists_path
end end
end end
Expand Down
51 changes: 14 additions & 37 deletions app/models/gist_fetcher.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -7,57 +7,34 @@ def fetch
since = period.minutes.ago since = period.minutes.ago
log({ns: self, fn: __method__}, since: since) do log({ns: self, fn: __method__}, since: since) do
User.last_fetched_before(since).pluck(:id).each do |user_id| User.last_fetched_before(since).pluck(:id).each do |user_id|
fetch_user(user_id) QC.enqueue("GistFetcher.fetch_gists", user_id)
end end
end end
end end


def fetch_user(user_id) def fetch_gists(user_id)
user = User.find(user_id)
log({ns: self, fn: __method__}, user) do
gh = gh_client(user)
fetch_gists(gh, user)
fetch_files(gh, user)
update_search_indices(user)
end
user.update_attribute(:last_gh_fetch, Time.now)
end


protected user = User.find(user_id)
gh = gh_client(user)


# Make sure have all gist stubs imported
def fetch_gists(gh, user)
log({ns: self, fn: __method__, measure: true}, user) do log({ns: self, fn: __method__, measure: true}, user) do
begin gh.gists.each do |gh_gist|
gh.gists.each do |gh_gist| Gist.import(gh_gist)
Gist.import(gh_gist)
end
rescue Exception => e
Airbrake.notify(e, parameters: user.to_log)
log({ns: self, fn: __method__, measure: true, at: :exception, message: e.message, exception: e.class}, user)
end end
end
end

# Fetch individual gists from API to get file contents
def fetch_files(gh, user)
log({ns: self, fn: __method__, measure: true}, user) do
user.gists.pluck(:gh_id).each do |gh_gist_id| user.gists.pluck(:gh_id).each do |gh_gist_id|
begin QC.enqueue("GistFetcher.fetch_gist_files", user_id, gh_gist_id)
GistFile.import(gh.gist(gh_gist_id))
rescue Exception => e
Airbrake.notify(e, parameters: user.to_log.merge(gh_gist_id: gh_gist_id))
log({ns: self, fn: __method__, measure: true, gh_gist_id: gh_gist_id, at: :exception, message: e.message, exception: e.class}, user)
end
end end
end end
QC.enqueue("User.refresh_index", user_id)
QC.enqueue("User.fetched!", user_id)
end end


def update_search_indices(user) def fetch_gist_files(user_id, gh_gist_id)
log({ns: self, fn: __method__}, user) do user = User.find(user_id)
user.gists.each { |gist| gist.update_index } log({ns: self, fn: __method__, measure: true, gh_gist_id: gh_gist_id}, user) do
gh = gh_client(user)
GistFile.import(gh.gist(gh_gist_id))
end end
Gist.tire.index.refresh
end end


private private
Expand Down
17 changes: 17 additions & 0 deletions app/models/user.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -26,6 +26,23 @@ def authenticate(auth)
new_user new_user
end end
end end

def refresh_index(user_id)
user = User.find(user_id)
log({ns: self, fn: __method__}, user) do
user.gists.each { |gist| gist.update_index }
end
Gist.tire.index.refresh
end

def fetched!(user_id)
user = User.find(user_id)
user.fetched!
end
end

def fetched!
update_attribute(:last_gh_fetch, Time.now)
end end


def gists_count def gists_count
Expand Down

0 comments on commit f10e771

Please sign in to comment.