VRFS-2282 first pass purging stale sessions
This commit is contained in:
parent
55957e7551
commit
26b124dde8
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue