예제 #1
0
 def test_multiple_refunds_same_user(self):
     self._purchase(self.user1)
     self._refund(self.user1)
     self._refund(self.user1)
     eq_(Refund.recent_refund_ratio(
         self.app.id, datetime.datetime.now() - datetime.timedelta(days=1)),
         1.0)
예제 #2
0
 def test_multiple_refunds_same_user(self):
     self._purchase(self.user1)
     self._refund(self.user1)
     self._refund(self.user1)
     eq_(
         Refund.recent_refund_ratio(
             self.app.id,
             datetime.datetime.now() - datetime.timedelta(days=1)), 1.0)
예제 #3
0
def find_refund_escalations(addon_id, **kw):
    try:
        addon = Addon.objects.get(pk=addon_id)
    except Addon.DoesNotExist:
        log.info(u'[addon:%s] Task called but no addon found.' % addon_id)
        return

    refund_threshold = 0.05
    weekago = datetime.date.today() - datetime.timedelta(days=7)
    add_to_queue = True

    ratio = Refund.recent_refund_ratio(addon.id, weekago)
    if ratio > refund_threshold:
        if EscalationQueue.objects.filter(addon=addon).exists():
            # App is already in the queue, no need to re-add it.
            log.info(u'[addon:%s] High refunds, but already escalated' % addon)
            add_to_queue = False

        # High refunds... has it been detected and dealt with already?
        logs = (AppLog.objects.filter(
            activity_log__action=amo.LOG.ESCALATED_HIGH_REFUNDS.id,
            addon=addon).order_by('-created', '-id'))
        if logs:
            since_ratio = Refund.recent_refund_ratio(addon.id, logs[0].created)
            # If not high enough ratio since the last logged, do not add to
            # the queue.
            if not since_ratio > refund_threshold:
                log.info(u'[addon:%s] High refunds, but not enough since last '
                         u'escalation. Ratio: %.0f%%' %
                         (addon, since_ratio * 100))
                return

        # If we haven't bailed out yet, escalate this app.
        msg = u'High number of refund requests (%.0f%%) detected.' % (
            (ratio * 100), )
        if add_to_queue:
            EscalationQueue.objects.create(addon=addon)
        amo.log(amo.LOG.ESCALATED_HIGH_REFUNDS,
                addon,
                addon.current_version,
                details={'comments': msg})
        log.info(u'[addon:%s] %s' % (addon, msg))
예제 #4
0
def find_refund_escalations(addon_id, **kw):
    try:
        addon = Addon.objects.get(pk=addon_id)
    except Addon.DoesNotExist:
        log.info(u'[addon:%s] Task called but no addon found.' % addon_id)
        return

    refund_threshold = 0.05
    weekago = datetime.date.today() - datetime.timedelta(days=7)
    add_to_queue = True

    ratio = Refund.recent_refund_ratio(addon.id, weekago)
    if ratio > refund_threshold:
        if EscalationQueue.objects.filter(addon=addon).exists():
            # App is already in the queue, no need to re-add it.
            log.info(u'[addon:%s] High refunds, but already escalated' % addon)
            add_to_queue = False

        # High refunds... has it been detected and dealt with already?
        logs = (AppLog.objects.filter(
            activity_log__action=amo.LOG.ESCALATED_HIGH_REFUNDS.id,
            addon=addon).order_by('-created', '-id'))
        if logs:
            since_ratio = Refund.recent_refund_ratio(addon.id, logs[0].created)
            # If not high enough ratio since the last logged, do not add to
            # the queue.
            if not since_ratio > refund_threshold:
                log.info(u'[addon:%s] High refunds, but not enough since last '
                         u'escalation. Ratio: %.0f%%' % (addon,
                                                         since_ratio * 100))
                return

        # If we haven't bailed out yet, escalate this app.
        msg = u'High number of refund requests (%.0f%%) detected.' % (
            (ratio * 100),)
        if add_to_queue:
            EscalationQueue.objects.create(addon=addon)
        amo.log(amo.LOG.ESCALATED_HIGH_REFUNDS, addon,
                addon.current_version, details={'comments': msg})
        log.info(u'[addon:%s] %s' % (addon, msg))