diff --git a/app/static/app/css/sb-admin-2.css b/app/static/app/css/sb-admin-2.css index 8103ba6b..2d19dd0c 100644 --- a/app/static/app/css/sb-admin-2.css +++ b/app/static/app/css/sb-admin-2.css @@ -61,7 +61,7 @@ body { } .navbar-top-links .dropdown-menu li div.info-item.quotas{ - min-width: 190px; + min-width: 232px; } .navbar-top-links .dropdown-menu li .progress{ diff --git a/app/templatetags/settings.py b/app/templatetags/settings.py index 8ed581fa..a540ae5e 100644 --- a/app/templatetags/settings.py +++ b/app/templatetags/settings.py @@ -41,7 +41,7 @@ def quota_exceeded_grace_period(context): return _("within %(num)s days") % {"num": math.ceil(diff / (60*60*24))} elif diff >= 60*60: return _("within %(num)s hours") % {"num": math.ceil(diff / (60*60))} - elif diff > 0: + elif diff > 1: return _("within %(num)s minutes") % {"num": math.ceil(diff / 60)} else: return _("very soon") diff --git a/worker/tasks.py b/worker/tasks.py index 7b8ef84e..3cafcdbd 100644 --- a/worker/tasks.py +++ b/worker/tasks.py @@ -208,12 +208,26 @@ def export_pointcloud(self, input, **opts): @app.task def check_quotas(): profiles = Profile.objects.filter(quota__gt=-1) - # for p in profiles: - # deadline_key = "%s_quota_exceeded_deadline" % p.user.id + for p in profiles: + if p.has_exceeded_quota(): + deadline = p.get_quota_deadline() + if deadline is None: + deadline = p.set_quota_deadline(settings.QUOTA_EXCEEDED_GRACE_PERIOD) + now = time.time() + if now > deadline: + # deadline passed, delete tasks until quota is met + logger.info("Quota deadline expired for %s, deleting tasks" % str(p.user.username)) + + while p.has_exceeded_quota(): + try: + last_task = Task.objects.filter(project__owner=p.user).order_by("-created_at").first() + if last_task is None: + break + logger.info("Deleting %s" % last_task) + last_task.delete() + except Exception as e: + logger.warn("Cannot delete %s for %s: %s" % (str(last_task), str(p.user.username), str(e))) + break + else: + p.clear_quota_deadline() - # if p.has_exceeded_quota(): - # now = time.time() - # deadline = redis_client.getset(deadline_key, now + (settings.QUOTA_EXCEEDED_GRACE_PERIOD * 60 * 60)) - # # if deadline < now: TODO.. - # else: - # redis_client.delete(deadline_key)