aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/info_request.rb
diff options
context:
space:
mode:
authorLouise Crow <louise.crow@gmail.com>2012-09-11 09:27:14 +0100
committerLouise Crow <louise.crow@gmail.com>2012-09-11 09:27:14 +0100
commitf3a87e7f438178cdada23f9ac1471477bd83aab3 (patch)
treea13ad7af956ce83ef5bf7ea867f62e88be497a36 /app/models/info_request.rb
parentaf4b246ce537170f94bfe8be5f1bbde914f60155 (diff)
Add some more efficient methods for getting old unclassified request counts, and random sets of small numbers of old unclassified requests.
Diffstat (limited to 'app/models/info_request.rb')
-rw-r--r--app/models/info_request.rb45
1 files changed, 36 insertions, 9 deletions
diff --git a/app/models/info_request.rb b/app/models/info_request.rb
index 6f472c290..f2d8929bc 100644
--- a/app/models/info_request.rb
+++ b/app/models/info_request.rb
@@ -223,7 +223,7 @@ class InfoRequest < ActiveRecord::Base
incoming_message.clear_in_database_caches!
end
end
-
+
# For debugging
def InfoRequest.profile_search(query)
t = Time.now.usec
@@ -939,17 +939,44 @@ public
# Used to find when event last changed
def InfoRequest.last_event_time_clause(event_type=nil)
event_type_clause = ''
- event_type_clause = " and info_request_events.event_type = '#{event_type}'" if event_type
- "(select created_at from info_request_events where info_request_events.info_request_id = info_requests.id#{event_type_clause} order by created_at desc limit 1)"
+ event_type_clause = " AND info_request_events.event_type = '#{event_type}'" if event_type
+ "(SELECT created_at
+ FROM info_request_events
+ WHERE info_request_events.info_request_id = info_requests.id
+ #{event_type_clause}
+ ORDER BY created_at desc
+ LIMIT 1)"
end
- def InfoRequest.find_old_unclassified(extra_params={})
+ def InfoRequest.old_unclassified_params(extra_params, include_last_response_time=false)
last_response_created_at = last_event_time_clause('response')
age = extra_params[:age_in_days] ? extra_params[:age_in_days].days : OLD_AGE_IN_DAYS
- params = {:select => "*, #{last_response_created_at} as last_response_time",
- :conditions => ["awaiting_description = ? and #{last_response_created_at} < ? and url_title != 'holding_pen' and user_id is not null",
- true, Time.now() - age],
- :order => "last_response_time"}
+ params = { :conditions => ["awaiting_description = ?
+ AND #{last_response_created_at} < ?
+ AND url_title != 'holding_pen'
+ AND user_id IS NOT NULL",
+ true, Time.now() - age] }
+ if include_last_response_time
+ params[:select] = "*, #{last_response_created_at} AS last_response_time"
+ params[:order] = 'last_response_time'
+ end
+ return params
+ end
+
+ def InfoRequest.count_old_unclassified(extra_params={})
+ params = old_unclassified_params(extra_params)
+ count(:all, params)
+ end
+
+ def InfoRequest.get_random_old_unclassified(limit)
+ params = old_unclassified_params({})
+ params[:limit] = limit
+ params[:order] = "random()"
+ find(:all, params)
+ end
+
+ def InfoRequest.find_old_unclassified(extra_params={})
+ params = old_unclassified_params(extra_params, include_last_response_time=true)
params[:limit] = extra_params[:limit] if extra_params[:limit]
params[:include] = extra_params[:include] if extra_params[:include]
if extra_params[:order]
@@ -958,7 +985,7 @@ public
end
if extra_params[:conditions]
condition_string = extra_params[:conditions].shift
- params[:conditions][0] += " and #{condition_string}"
+ params[:conditions][0] += " AND #{condition_string}"
params[:conditions] += extra_params[:conditions]
end
find(:all, params)