Class: Sufia::UserStatImporter
- Inherits:
-
Object
- Object
- Sufia::UserStatImporter
- Defined in:
- lib/sufia/models/stats/user_stat_importer.rb
Defined Under Namespace
Classes: UserRecord
Instance Method Summary collapse
- #import ⇒ Object
-
#initialize(options = {}) ⇒ UserStatImporter
constructor
A new instance of UserStatImporter.
-
#sorted_users ⇒ Object
Returns an array of users sorted by the date of their last stats update.
Constructor Details
permalink #initialize(options = {}) ⇒ UserStatImporter
Returns a new instance of UserStatImporter.
5 6 7 8 9 10 |
# File 'lib/sufia/models/stats/user_stat_importer.rb', line 5 def initialize( = {}) @verbose = [:verbose] @logging = [:logging] @delay_secs = [:delay_secs].to_f @number_of_retries = [:number_of_retries].to_i end |
Instance Method Details
permalink #import ⇒ Object
[View source]
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/sufia/models/stats/user_stat_importer.rb', line 12 def import ('Begin import of User stats.') sorted_users.each do |user| start_date = date_since_last_cache(user) # this user has already been processed today continue without delay next if start_date.to_date >= Date.today stats = {} file_ids_for_user(user).each do |file_id| view_stats = rescue_and_retry("Retried FileViewStat on #{user} for file #{file_id} too many times.") { FileViewStat.statistics(file_id, start_date, user.id) } stats = tally_results(view_stats, :views, stats) unless view_stats.blank? delay dl_stats = rescue_and_retry("Retried FileDownloadStat on #{user} for file #{file_id} too many times.") { FileDownloadStat.statistics(file_id, start_date, user.id) } stats = tally_results(dl_stats, :downloads, stats) unless dl_stats.blank? delay end create_or_update_user_stats(stats, user) end ('User stats import complete.') end |
permalink #sorted_users ⇒ Object
Returns an array of users sorted by the date of their last stats update. Users that have not been recently updated will be at the top of the array.
39 40 41 42 43 44 45 |
# File 'lib/sufia/models/stats/user_stat_importer.rb', line 39 def sorted_users users = [] ::User.find_each do |user| users.push(UserRecord.new(user.id, user.user_key, date_since_last_cache(user))) end users.sort { |a, b| a.last_stats_update <=> b.last_stats_update } end |