VRFS-2282 first pass purging stale sessions

This commit is contained in:
Jonathan Kolyer 2014-10-12 07:49:31 +00:00
parent 55957e7551
commit 26b124dde8
4 changed files with 73 additions and 1 deletions

View File

@ -12,6 +12,10 @@ module JamRuby
RECURRING_MODES = [NO_RECURRING, RECURRING_WEEKLY]
UNSTARTED_INTERVAL_DAYS_SKIP = '14' # days past scheduled start to skip in query
UNSTARTED_INTERVAL_DAYS_PURGE = '28' # days past scheduled start to purge session
UNSTARTED_INTERVAL_DAYS_PURGE_RECUR = '56' # days past scheduled start to purge recurddingsession
attr_accessor :legal_terms, :language_description, :access_description, :scheduling_info_changed
attr_accessor :approved_rsvps, :open_slots, :pending_invitations
@ -723,8 +727,9 @@ module JamRuby
# do nothing. bad date probably
@@log.warn("unable to parse day=#{day}, timezone_offset=#{timezone_offset}, e=#{e}")
end
else
query = query.where("music_sessions.scheduled_start IS NULL OR (music_sessions.scheduled_start > NOW() - interval '#{UNSTARTED_INTERVAL_DAYS_SKIP} days')")
end
return query
end
@ -911,6 +916,21 @@ module JamRuby
end
def self.purgeable_sessions
sessions = []
sql =<<SQL
(recurring_mode = '#{RECURRING_WEEKLY}' AND
scheduled_start <= NOW() - interval '#{UNSTARTED_INTERVAL_DAYS_PURGE_RECUR} days')
OR
(recurring_mode = '#{NO_RECURRING}' AND
scheduled_start <= NOW() - interval '#{UNSTARTED_INTERVAL_DAYS_PURGE} days')
SQL
self.where("started_at IS NULL").where(sql).find_each do |ms|
block_given? ? yield(ms) : sessions << ms
end
sessions
end
private
def generate_share_token

View File

@ -0,0 +1,18 @@
module JamRuby
class ScheduledMusicSessionCleaner
extend Resque::Plugins::LonelyJob
@queue = :scheduled_music_session_cleaner
@@log = Logging.logger[ScheduledMusicSessionCleaner]
def self.perform
@@log.debug("waking up")
MusicSession.purgeable_sessions do |session|
session.destroy
end
@@log.debug("done")
end
end
end

View File

@ -483,6 +483,18 @@ describe MusicSession do
music_sessions.length.should == 1
end
it "skip session with past due scheduled_start time" do
creator.last_jam_locidispid = conn.locidispid
creator.save!
music_session = FactoryGirl.create(:music_session,
creator: creator,
scheduled_start: Time.now - (MusicSession::UNSTARTED_INTERVAL_DAYS_SKIP.to_i + 1).days)
msess = FactoryGirl.create(:music_session, scheduled_start: Time.now - 1.day)
music_sessions, user_scores = sms(searcher, default_opts)
expect(music_sessions.length).to be(1)
end
it "one session, one RSVP (creator)" do
creator.last_jam_locidispid = conn.locidispid
creator.save!
@ -868,5 +880,22 @@ describe MusicSession do
music_session1.description.should == 'cat'
end
end
describe "purgeable sessions " do
it 'selects recurring and non-recurring sessions past due date' do
[MusicSession::UNSTARTED_INTERVAL_DAYS_PURGE,
MusicSession::UNSTARTED_INTERVAL_DAYS_PURGE_RECUR].each do |interval|
dd = Time.now - (interval.to_i + 1).days
Timecop.travel(dd)
msess = FactoryGirl.create(:music_session, scheduled_start: Time.now)
Timecop.return
msess = FactoryGirl.create(:music_session, scheduled_start: Time.now)
purging = MusicSession.purgeable_sessions
expect(purging.size).to be(1)
MusicSession.delete_all
end
end
end
end

View File

@ -34,6 +34,11 @@ DailySessionEmailer:
class: "JamRuby::DailySessionEmailer"
description: "Sends daily scheduled session emails"
ScheduledMusicSessionCleaner:
cron: "0 3 * * *"
class: "JamRuby::ScheduledMusicSessionCleaner"
description: "Purges old, forgotten sessions that have not been started for >4 weeks"
NewMusicianEmailer:
cron: "0 1 * * 1"
class: "JamRuby::NewMusicianEmailer"