Prune old field tests for ongoing tests (#6540) [deploy]

This commit is contained in:
Ben Halpern 2020-03-09 16:22:42 -04:00 committed by GitHub
parent b096b19897
commit 5bd042e7d6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 0 deletions

View file

@ -0,0 +1,13 @@
module FieldTests
class PruneOldExperimentsWorker
include Sidekiq::Worker
sidekiq_options queue: :low_priority, retry: 10
def perform
five_precent_membership_count = FieldTest::Membership.count / 20
memberships = FieldTest::Membership.first(five_precent_membership_count)
FieldTest::Event.where(field_test_membership_id: memberships.pluck(:id)).delete_all
memberships.map(&:delete)
end
end
end

View file

@ -98,6 +98,13 @@ task award_contributor_badges_from_github: :environment do
BadgeRewarder.award_contributor_badges_from_github
end
# This task is meant to be scheduled daily
task prune_old_field_tests: :environment do
# For rolling ongoing experiemnts, we remove old experiment memberships
# So that they can be re-tested.
FieldTests::PruneOldExperimentsWorker.perform_async
end
task remove_old_html_variant_data: :environment do
HtmlVariantTrial.where("created_at < ?", 2.weeks.ago).destroy_all
HtmlVariantSuccess.where("created_at < ?", 2.weeks.ago).destroy_all

View file

@ -0,0 +1,8 @@
FactoryBot.define do
factory :field_test_memberships, class: "FieldTest::Membership" do
converted { false }
experiment { :user_home_feed }
participant_type { "User" }
variant { "base" }
end
end

View file

@ -0,0 +1,22 @@
require "rails_helper"
RSpec.describe FieldTests::PruneOldExperimentsWorker, type: :worker do
include_examples "#enqueues_on_correct_queue", "low_priority", 1
include FieldTest::Helpers
describe "#perform" do
let(:worker) { subject }
it "prunes first 5% of memberships and events" do
create_list(:user, 40)
User.all.each do |user|
create(:field_test_memberships, participant_id: user.id.to_s)
field_test_converted(:user_home_feed, participant: user, goal: "user_creates_comment")
end
worker.perform
expect(FieldTest::Membership.count).to be(38)
expect(FieldTest::Event.count).to be(38)
expect(FieldTest::Event.pluck(:field_test_membership_id).sort).to eq(FieldTest::Membership.pluck(:id).sort)
end
end
end