Commit b2d2b3432fa45bc20302a9f8f3925377d6338612

Authored by Luke Baker
1 parent 6d2cf16a

add namespaces for question / choices

remove generate_densities from api test and move to prune_db
Showing 2 changed files with 65 additions and 59 deletions   Show diff stats
lib/tasks/prune_db.rake
@@ -17,6 +17,38 @@ namespace :prune_db do @@ -17,6 +17,38 @@ namespace :prune_db do
17 end 17 end
18 end 18 end
19 19
  20 + desc "Generate density information for each question - should be run nightly"
  21 + task(:generate_density_information => :environment) do
  22 +
  23 + # calculating densities is expensive, so only do it for questions with new data
  24 + question_ids = Vote.count(:conditions => ['date(created_at) = ?', Date.yesterday], :group => 'question_id').keys()
  25 +
  26 + Question.find(:all, :conditions => {:id => question_ids}).each do |q|
  27 + q.save_densities!
  28 + end
  29 +
  30 + # we can just copy the previous night's data for remaining questions
  31 +
  32 + Question.find(:all, :conditions => ['id NOT IN (?)', question_ids]).each do |q|
  33 + densities = q.densities.find(:all, :conditions => ['date(created_at) = ?', Date.yesterday])
  34 +
  35 +
  36 + densities.each do |d|
  37 + new_d = d.clone
  38 + new_d.created_at = new_d.updated_at = Time.now
  39 + new_d.save!
  40 + end
  41 +
  42 + if densities.blank?
  43 + #fallback in case there wasn't a successful run yesterday
  44 + q.save_densities!
  45 +
  46 + end
  47 +
  48 + end
  49 + end
  50 +
  51 +
20 desc "Generate appearances for any votes that have no current appearance, should only need to be run once" 52 desc "Generate appearances for any votes that have no current appearance, should only need to be run once"
21 task(:generate_appearances_for_existing_votes => :environment) do 53 task(:generate_appearances_for_existing_votes => :environment) do
22 votes = Vote.all 54 votes = Vote.all
lib/tasks/test_api.rake
1 namespace :test_api do 1 namespace :test_api do
2 2
3 desc "Run all API tests" 3 desc "Run all API tests"
4 - task :all => [:question_vote_consistency,:generate_density_information] 4 + task :all => [:question_vote_consistency]
5 5
6 desc "Ensure all appearance and votes have matching prompt_ids" 6 desc "Ensure all appearance and votes have matching prompt_ids"
7 task :verify_appearance_vote_prompt_ids => :environment do 7 task :verify_appearance_vote_prompt_ids => :environment do
@@ -37,66 +37,36 @@ namespace :test_api do @@ -37,66 +37,36 @@ namespace :test_api do
37 return error_message.blank? ? [success_message, false] : [error_message, true] 37 return error_message.blank? ? [success_message, false] : [error_message, true]
38 end 38 end
39 39
40 - desc "Ensure that cached prompt counts are valid for a choice"  
41 - task :verify_cached_prompt_counts, [:choice_id] => :environment do |t, args|  
42 - choice = Choice.find(args[:choice_id])  
43 - puts verify_cached_prompt_counts(choice).inspect  
44 - end  
45 -  
46 - def verify_cached_prompt_counts(choice)  
47 - success_message = "Choice has accurate prompt cache count"  
48 - if choice.prompts_on_the_left.count != choice.prompts_on_the_left_count || choice.prompts_on_the_right.count != choice.prompts_on_the_right_count  
49 - error_message = "Choice #{choice.id} in Question ##{choice.question_id} has inaccurate prompt count cache" 40 + namespace :choice do
  41 + desc "Ensure that cached prompt counts are valid for a choice"
  42 + task :verify_cached_prompt_counts, [:choice_id] => :environment do |t, args|
  43 + choice = Choice.find(args[:choice_id])
  44 + puts verify_cached_prompt_counts(choice).inspect
50 end 45 end
51 - return error_message.blank? ? [success_message, false] : [error_message, true]  
52 - end  
53 -  
54 - desc "Ensure that an idea: appearances on left + appearances on right >= (wins + losses + skips)"  
55 - task :verify_choice_appearances_and_votes, [:choice_id] => :environment do |t, args|  
56 - choice = Choice.find(args[:choice_id])  
57 - puts verify_choice_appearances_and_votes(choice).inspect  
58 - end  
59 46
60 - def verify_choice_appearances_and_votes(choice)  
61 - success_message = "Choice has more appearances than votes and skips"  
62 - all_appearances = choice.appearances_on_the_left.count + choice.appearances_on_the_right.count  
63 - skips = choice.skips_on_the_left.count + choice.skips_on_the_right.count  
64 -  
65 - if all_appearances < choice.wins + choice.losses + skips  
66 - error_message = "Choice #{choice.id} in Question ##{choice.question_id} has fewer appearances than wins + losses + skips" 47 + def verify_cached_prompt_counts(choice)
  48 + success_message = "Choice has accurate prompt cache count"
  49 + if choice.prompts_on_the_left.count != choice.prompts_on_the_left_count || choice.prompts_on_the_right.count != choice.prompts_on_the_right_count
  50 + error_message = "Choice #{choice.id} in Question ##{choice.question_id} has inaccurate prompt count cache"
  51 + end
  52 + return error_message.blank? ? [success_message, false] : [error_message, true]
67 end 53 end
68 - return error_message.blank? ? [success_message, false] : [error_message, true]  
69 - end  
70 -  
71 -  
72 - desc "Generate density information for each question - should be run nightly"  
73 - task(:generate_density_information => :environment) do  
74 54
75 - # calculating densities is expensive, so only do it for questions with new data  
76 - question_ids = Vote.count(:conditions => ['date(created_at) = ?', Date.yesterday], :group => 'question_id').keys()  
77 -  
78 - Question.find(:all, :conditions => {:id => question_ids}).each do |q|  
79 - q.save_densities! 55 + desc "Ensure that an idea: appearances on left + appearances on right >= (wins + losses + skips)"
  56 + task :verify_choice_appearances_and_votes, [:choice_id] => :environment do |t, args|
  57 + choice = Choice.find(args[:choice_id])
  58 + puts verify_choice_appearances_and_votes(choice).inspect
80 end 59 end
81 60
82 - # we can just copy the previous night's data for remaining questions  
83 -  
84 - Question.find(:all, :conditions => ['id NOT IN (?)', question_ids]).each do |q|  
85 - densities = q.densities.find(:all, :conditions => ['date(created_at) = ?', Date.yesterday])  
86 -  
87 -  
88 - densities.each do |d|  
89 - new_d = d.clone  
90 - new_d.created_at = new_d.updated_at = Time.now  
91 - new_d.save!  
92 - end  
93 -  
94 - if densities.blank?  
95 - #fallback in case there wasn't a successful run yesterday  
96 - q.save_densities! 61 + def verify_choice_appearances_and_votes(choice)
  62 + success_message = "Choice has more appearances than votes and skips"
  63 + all_appearances = choice.appearances_on_the_left.count + choice.appearances_on_the_right.count
  64 + skips = choice.skips_on_the_left.count + choice.skips_on_the_right.count
97 65
  66 + if all_appearances < choice.wins + choice.losses + skips
  67 + error_message = "Choice #{choice.id} in Question ##{choice.question_id} has fewer appearances than wins + losses + skips"
98 end 68 end
99 - 69 + return error_message.blank? ? [success_message, false] : [error_message, true]
100 end 70 end
101 end 71 end
102 72
@@ -444,13 +414,17 @@ namespace :test_api do @@ -444,13 +414,17 @@ namespace :test_api do
444 return error_message.blank? ? [success_message, false] : [error_message, true] 414 return error_message.blank? ? [success_message, false] : [error_message, true]
445 end 415 end
446 416
447 - desc "Ensure that a question has: answered_appearances == votes + skips"  
448 - task :answered_appearances_equals_votes_and_skips, [:question_id] => :environment do |t, args|  
449 - a = cleanup_args(args)  
450 - questions = Question.find(a[:question_id])  
451 - questions.each do |question|  
452 - puts answered_appearances_equals_votes_and_skips(question).inspect 417 + namespace :question do
  418 +
  419 + desc "Ensure that a question has: answered_appearances == votes + skips"
  420 + task :answered_appearances_equals_votes_and_skips, [:question_id] => :environment do |t, args|
  421 + a = cleanup_args(args)
  422 + questions = Question.find(a[:question_id])
  423 + questions.each do |question|
  424 + puts answered_appearances_equals_votes_and_skips(question).inspect
  425 + end
453 end 426 end
  427 +
454 end 428 end
455 429
456 def answered_appearances_equals_votes_and_skips(question) 430 def answered_appearances_equals_votes_and_skips(question)