diff --git a/db/manifest b/db/manifest index 21feab3b6..01413c3db 100755 --- a/db/manifest +++ b/db/manifest @@ -379,3 +379,4 @@ youtube_broadcast.sql amazon_v1.sql sms_index_optimize.sql amazon_signup.sql +age_out_sessions.sql diff --git a/db/up/age_out_sessions.sql b/db/up/age_out_sessions.sql new file mode 100644 index 000000000..548a8b8fc --- /dev/null +++ b/db/up/age_out_sessions.sql @@ -0,0 +1,2 @@ +ALTER TABLE music_sessions ADD COLUMN old BOOLEAN NOT NULL DEFAULT FALSE; +CREATE INDEX index_music_sessions_on_old ON music_sessions USING btree(old); diff --git a/db/up/sms_index_optimize.sql b/db/up/sms_index_optimize.sql index 715bb9f36..9f013d902 100644 --- a/db/up/sms_index_optimize.sql +++ b/db/up/sms_index_optimize.sql @@ -184,26 +184,25 @@ CREATE OR REPLACE FUNCTION sms_index_test (my_user_id VARCHAR, my_locidispid BIG $$ LANGUAGE plpgsql; -- XXXX TODO: TURN THESE ON AFTER PRODUCTION IS UPDATED --- CREATE INDEX index_rsvp_requests_rsvp_slots_on_rsvp_request_id ON rsvp_requests_rsvp_slots USING btree(rsvp_request_id); --- CREATE INDEX index_rsvp_requests_rsvp_slots_on_rsvp_slot_id ON rsvp_requests_rsvp_slots USING btree(rsvp_slot_id); --- CREATE INDEX index_rsvp_requests_rsvp_slots_on_chosen ON rsvp_requests_rsvp_slots USING btree(chosen); --- CREATE INDEX index_rsvp_slots_on_music_session_id ON rsvp_slots USING btree(music_session_id); --- CREATE INDEX index_rsvp_requests_user_id ON rsvp_requests USING btree(user_id); --- CREATE INDEX index_rsvp_requests_canceled ON rsvp_requests USING btree(canceled); --- CREATE INDEX index_invitations_on_receiver_id ON invitations USING btree(receiver_id); --- CREATE INDEX index_invitations_on_music_session_id ON invitations USING btree(music_session_id); --- select sms_index_test('062deeba-b917-46e2-bfa3-e829405ca602'::varchar, 26880045373::bigint, 18.911563873291::integer, 'any'::varchar, false::boolean) +CREATE INDEX index_rsvp_requests_rsvp_slots_on_rsvp_request_id ON rsvp_requests_rsvp_slots USING btree(rsvp_request_id); +CREATE INDEX index_rsvp_requests_rsvp_slots_on_rsvp_slot_id ON rsvp_requests_rsvp_slots USING btree(rsvp_slot_id); +CREATE INDEX index_rsvp_requests_rsvp_slots_on_chosen ON rsvp_requests_rsvp_slots USING btree(chosen); +CREATE INDEX index_rsvp_slots_on_music_session_id ON rsvp_slots USING btree(music_session_id); +CREATE INDEX index_rsvp_requests_user_id ON rsvp_requests USING btree(user_id); +CREATE INDEX index_rsvp_requests_canceled ON rsvp_requests USING btree(canceled); +CREATE INDEX index_invitations_on_receiver_id ON invitations USING btree(receiver_id); +CREATE INDEX index_invitations_on_music_session_id ON invitations USING btree(music_session_id); --- CREATE INDEX index_affiliate_traffic_totals_on_day ON affiliate_traffic_totals USING btree(day); --- CREATE INDEX index_affiliate_traffic_totals_on_affiliate_partner_id ON affiliate_traffic_totals USING btree(affiliate_partner_id); --- CREATE INDEX index_users_on_affiliate_referral_id ON users USING btree(affiliate_referral_id); --- CREATE INDEX index_users_on_created_at ON users USING btree(created_at); --- CREATE INDEX index_share_tokens_on_shareable_id ON share_tokens USING btree(shareable_id); --- CREATE INDEX index_music_sessions_on_create_type ON music_sessions USING btree(create_type); --- CREATE INDEX index_music_sessions_on_scheduled_start ON music_sessions USING btree(scheduled_start); --- CREATE INDEX index_music_sessions_on_canceled ON music_sessions USING btree(canceled); --- CREATE INDEX index_music_sessions_on_session_removed_at ON music_sessions USING btree(session_removed_at); --- CREATE INDEX index_music_sessions_on_started_at ON music_sessions USING btree(started_at); +CREATE INDEX index_affiliate_traffic_totals_on_day ON affiliate_traffic_totals USING btree(day); +CREATE INDEX index_affiliate_traffic_totals_on_affiliate_partner_id ON affiliate_traffic_totals USING btree(affiliate_partner_id); +CREATE INDEX index_users_on_affiliate_referral_id ON users USING btree(affiliate_referral_id); +CREATE INDEX index_users_on_created_at ON users USING btree(created_at); +CREATE INDEX index_share_tokens_on_shareable_id ON share_tokens USING btree(shareable_id); +CREATE INDEX index_music_sessions_on_create_type ON music_sessions USING btree(create_type); +CREATE INDEX index_music_sessions_on_scheduled_start ON music_sessions USING btree(scheduled_start); +CREATE INDEX index_music_sessions_on_canceled ON music_sessions USING btree(canceled); +CREATE INDEX index_music_sessions_on_session_removed_at ON music_sessions USING btree(session_removed_at); +CREATE INDEX index_music_sessions_on_started_at ON music_sessions USING btree(started_at); -- update music_sessions set canceled = true WHERE (scheduled_start IS NULL OR scheduled_start > (NOW() - (interval '15 minute'))) AND canceled = FALSE AND description != 'Jam Track Session' AND id NOT IN (SELECT id FROM active_music_sessions) AND id NOT IN (select distinct on(name, user_id) id FROM music_sessions WHERE (scheduled_start IS NULL OR scheduled_start > (NOW() - (interval '15 minute'))) AND canceled = FALSE AND description != 'Jam Track Session' AND id NOT IN (SELECT id FROM active_music_sessions) order by name, user_id); @@ -213,27 +212,4 @@ $$ LANGUAGE plpgsql; -- select distinct on(name, user_id) name, description, scheduled_start FROM music_sessions WHERE (scheduled_start IS NULL OR scheduled_start > (NOW() - (interval '15 minute'))) AND canceled = FALSE AND description != 'Jam Track Session' AND id NOT IN (SELECT id FROM active_music_sessions) order by name, user_id; -- get count --- SELECT count(id) FROM music_sessions WHERE (scheduled_start IS NULL OR scheduled_start > (NOW() - (interval '15 minute'))) AND canceled = FALSE AND description != 'Jam Track Session' AND id NOT IN (SELECT id FROM active_music_sessions) - - -SELECT distinct music_sessions.* FROM "music_sessions" LEFT OUTER JOIN - rsvp_slots - ON - music_sessions.id = rsvp_slots.music_session_id AND (music_sessions.canceled = FALSE) - - LEFT OUTER JOIN - rsvp_requests_rsvp_slots - ON - rsvp_requests_rsvp_slots.rsvp_slot_id = rsvp_slots.id - LEFT OUTER JOIN - rsvp_requests - ON rsvp_requests.id = rsvp_requests_rsvp_slots.rsvp_request_id - LEFT OUTER JOIN - invitations - ON - music_sessions.id = invitations.music_session_id AND invitations.receiver_id = 'aedab51a-14cd-46d1-9828-29eadddd1f53' - - - WHERE - (music_sessions.scheduled_start IS NULL OR (music_sessions.scheduled_start > NOW() - '12 hour'::INTERVAL AND music_sessions.started_at IS NULL) OR (music_sessions.session_removed_at > NOW() - '2 hour'::INTERVAL) OR (music_sessions.started_at IS NOT NULL AND music_sessions.session_removed_at IS NULL)) AND (music_sessions.create_type IS NULL OR (music_sessions.create_type != 'quick-start' AND music_sessions.create_type != 'quick-public')) AND - ((rsvp_requests.id IS NOT NULL AND rsvp_requests_rsvp_slots.id IS NOT NULL AND rsvp_requests.user_id = 'aedab51a-14cd-46d1-9828-29eadddd1f53' AND rsvp_requests_rsvp_slots.chosen = true) OR (invitations.id IS NOT NULL) OR (music_sessions.user_id = 'aedab51a-14cd-46d1-9828-29eadddd1f53') ) ORDER BY music_sessions.scheduled_start ASC; \ No newline at end of file +-- SELECT count(id) FROM music_sessions WHERE (scheduled_start IS NULL OR scheduled_start > (NOW() - (interval '15 minute'))) AND canceled = FALSE AND description != 'Jam Track Session' AND id NOT IN (SELECT id FROM active_music_sessions) \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index e7c6cece2..6cdc07b8b 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -900,15 +900,14 @@ module JamRuby end def self.cleanup_old_sessions - session__started = "(music_sessions.scheduled_start > NOW() - '12 hour'::INTERVAL AND music_sessions.started_at IS NULL)" - - # keep started sessions that are not finished yet - session_started_not_finished = "(music_sessions.started_at IS NOT NULL AND music_sessions.session_removed_at IS NULL)" + old_scheduled_start = "(create_type is NOT NULL AND music_sessions.scheduled_start < NOW() - '24 hour'::INTERVAL)" # let session be restarted for up to 2 hours after finishing - session_not_finished = "(music_sessions.session_removed_at > NOW() - '2 hour'::INTERVAL)" + session_not_finished = "(create_type IS NOT NULL AND music_sessions.session_removed_at < NOW() - '24 hour'::INTERVAL)" - MusicSession.where() + old_adhoc_sessions = "(create_type IS NULL and music_sessions.created_at < NOW() - '24 hour'::INTERVAL)" + + MusicSession.where("#{old_scheduled_start} OR #{session_not_finished} OR #{old_adhoc_sessions}").update_all(old: true) end def end_history diff --git a/ruby/lib/jam_ruby/resque/scheduled/daily_job.rb b/ruby/lib/jam_ruby/resque/scheduled/daily_job.rb index 485baad04..286285b4b 100644 --- a/ruby/lib/jam_ruby/resque/scheduled/daily_job.rb +++ b/ruby/lib/jam_ruby/resque/scheduled/daily_job.rb @@ -13,6 +13,8 @@ module JamRuby calendar_manager = CalendarManager.new calendar_manager.cleanup() + MusicSession.cleanup_old_sessions + @@log.debug("done") end