Changing premium expiration tasks to not get bogged down by re-downloading all premium history beforehand.

This commit is contained in:
Samuel Clay 2015-05-18 14:13:48 -07:00
parent cd485bc05d
commit 89089ddbc2
2 changed files with 32 additions and 23 deletions

View file

@ -279,9 +279,12 @@ class Profile(models.Model):
oldest_recent_payment_date = payment.payment_date
if oldest_recent_payment_date:
self.premium_expire = (oldest_recent_payment_date +
datetime.timedelta(days=365*recent_payments_count))
self.save()
new_premium_expire = (oldest_recent_payment_date +
datetime.timedelta(days=365*recent_payments_count))
# Only move premium expire forward, never earlier. Also set expiration if not premium.
if (not self.is_premium and not self.premium_expire) or new_premium_expire > self.premium_expire:
self.premium_expire = new_premium_expire
self.save()
logging.user(self.user, "~BY~SN~FWFound ~SB~FB%s paypal~FW~SN and ~SB~FC%s stripe~FW~SN payments (~SB%s payments expire: ~SN~FB%s~FW)" % (
len(paypal_payments), len(stripe_payments), len(payment_history), self.premium_expire))
@ -647,21 +650,26 @@ NewsBlur""" % {'user': self.user.username, 'feeds': subs.count()}
msg.send(fail_silently=True)
logging.user(self.user, "~BB~FM~SBSending launch social email for user: %s months, %s" % (months_ago, self.user.email))
def send_premium_expire_grace_period_email(self, force=False):
if not self.user.email:
logging.user(self.user, "~FM~SB~FRNot~FM~SN sending premium expire grace for user: %s" % (self.user))
return
def grace_period_email_sent(self, force=False):
emails_sent = MSentEmail.objects.filter(receiver_user_id=self.user.pk,
email_type='premium_expire_grace')
day_ago = datetime.datetime.now() - datetime.timedelta(days=360)
for email in emails_sent:
if email.date_sent > day_ago and not force:
logging.user(self.user, "~SN~FMNot sending premium expire grace email, already sent before.")
return
return True
self.premium_expire = datetime.datetime.now()
def send_premium_expire_grace_period_email(self, force=False):
if not self.user.email:
logging.user(self.user, "~FM~SB~FRNot~FM~SN sending premium expire grace for user: %s" % (self.user))
return
if self.grace_period_email_sent(force=force):
return
if self.premium_expire < datetime.datetime.now():
self.premium_expire = datetime.datetime.now()
self.save()
delta = datetime.datetime.now() - self.last_seen_on

View file

@ -22,27 +22,28 @@ class PremiumExpire(Task):
def run(self, **kwargs):
# Get expired but grace period users
five_days_ago = datetime.datetime.now() - datetime.timedelta(days=5)
two_days_ago = datetime.datetime.now() - datetime.timedelta(days=2)
thirty_days_ago = datetime.datetime.now() - datetime.timedelta(days=30)
expired_profiles = Profile.objects.filter(is_premium=True,
premium_expire__lte=five_days_ago)
logging.debug(" ---> %s users have expired premiums, syncing payments..." % expired_profiles.count())
for profile in expired_profiles:
profile.setup_premium_history()
expired_profiles = Profile.objects.filter(is_premium=True,
premium_expire__lte=five_days_ago)
premium_expire__lte=two_days_ago,
premium_expire__gt=thirty_days_ago)
logging.debug(" ---> %s users have expired premiums, emailing grace..." % expired_profiles.count())
for profile in expired_profiles:
profile.send_premium_expire_grace_period_email()
if profile.grace_period_email_sent():
continue
profile.setup_premium_history()
if profile.premium_expire < two_days_ago:
profile.send_premium_expire_grace_period_email()
# Get fully expired users
thirty_days_ago = datetime.datetime.now() - datetime.timedelta(days=30)
expired_profiles = Profile.objects.filter(is_premium=True,
premium_expire__lte=thirty_days_ago)
logging.debug(" ---> %s users have expired premiums, deactivating and emailing..." % expired_profiles.count())
for profile in expired_profiles:
profile.send_premium_expire_email()
profile.deactivate_premium()
profile.setup_premium_history()
if profile.premium_expire < thirty_days_ago:
profile.send_premium_expire_email()
profile.deactivate_premium()
class ActivateNextNewUser(Task):