From 3b6d50a62a6d14ead36d53ea9017bdd8ccdb4683 Mon Sep 17 00:00:00 2001 From: Jan Dittberner Date: Sun, 23 Jul 2023 11:24:10 +0200 Subject: [PATCH 1/2] Remove stale disk usage stats --- docs/changelog.rst | 2 ++ gnuviechadmin/hostingpackages/views.py | 21 +++++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 89721cb..6e19cff 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,6 +1,8 @@ Changelog ========= +* :bug:`-` remove stale disk usage stats older than 30 minutes + * :release:`0.15.0 <2023-07-23> * :feature:`10` add disk usage details for mail and web diff --git a/gnuviechadmin/hostingpackages/views.py b/gnuviechadmin/hostingpackages/views.py index ea5b4ac..37cd749 100644 --- a/gnuviechadmin/hostingpackages/views.py +++ b/gnuviechadmin/hostingpackages/views.py @@ -6,6 +6,7 @@ from __future__ import absolute_import import http import logging +from datetime import timedelta from django.conf import settings from django.contrib import messages @@ -13,6 +14,7 @@ from django.contrib.auth import get_user_model from django.contrib.auth.mixins import PermissionRequiredMixin, UserPassesTestMixin from django.http import Http404 from django.shortcuts import get_object_or_404, redirect +from django.utils import timezone from django.utils.translation import gettext as _ from django.views.generic import DetailView, ListView from django.views.generic.edit import CreateView, FormView @@ -278,8 +280,8 @@ class AddHostingOption(StaffUserRequiredMixin, FormView): class HasDiskUsageUploadPermission(BasePermission): def has_permission(self, request, view): return ( - request.user.has_perm("hostingpackages.add_customerpackagediskusage") - and request.method == "POST" + request.user.has_perm("hostingpackages.add_customerpackagediskusage") + and request.method == "POST" ) @@ -292,12 +294,15 @@ class UploadCustomerPackageDiskUsage(APIView): if request.content_type != "application/json": return Response("Unacceptable", status=http.HTTPStatus.BAD_REQUEST) + submitted_sources = set() + for row in request.data: user = row["user"] for key in row: if key == "user": continue else: + submitted_sources.add(key) for item, size in row[key].items(): try: package = CustomerHostingPackage.objects.get( @@ -315,7 +320,9 @@ class UploadCustomerPackageDiskUsage(APIView): if key == "mail": try: - ma_mb = package.mailboxes.get(username=item).mailaddressmailbox_set.first() + ma_mb = package.mailboxes.get( + username=item + ).mailaddressmailbox_set.first() if ma_mb: metric.email_address_id = ma_mb.mailaddress_id except Mailbox.DoesNotExist: @@ -327,6 +334,12 @@ class UploadCustomerPackageDiskUsage(APIView): "hosting package for user %s does not exist", user ) + if submitted_sources: + CustomerPackageDiskUsage.objects.filter( + source__in=submitted_sources, + modified__lt=timezone.now() - timedelta(minutes=30), + ).delete() + logger.info("usage data submitted by %s", request.user) return Response("Accepted", status=http.HTTPStatus.ACCEPTED) @@ -356,7 +369,7 @@ class CustomerHostingPackageDiskUsageDetails(StaffOrSelfLoginRequiredMixin, Deta mail_usage, web_usage, mysql_usage, pgsql_usage = [], [], [], [] for usage in self.get_object().customerpackagediskusage_set.order_by( - "-used_kb" + "-used_kb" ): if usage.used_kb <= 0: continue From 5e527ef10d0230ab8c54df01755f31a5839b92d1 Mon Sep 17 00:00:00 2001 From: Jan Dittberner Date: Sun, 23 Jul 2023 11:24:46 +0200 Subject: [PATCH 2/2] Release 0.15.1 --- docs/changelog.rst | 1 + gnuviechadmin/gnuviechadmin/__init__.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 6e19cff..c8a6893 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,6 +1,7 @@ Changelog ========= +* :release:`0.15.1 <2023-07-23> * :bug:`-` remove stale disk usage stats older than 30 minutes * :release:`0.15.0 <2023-07-23> diff --git a/gnuviechadmin/gnuviechadmin/__init__.py b/gnuviechadmin/gnuviechadmin/__init__.py index d1d1bd2..b31a146 100644 --- a/gnuviechadmin/gnuviechadmin/__init__.py +++ b/gnuviechadmin/gnuviechadmin/__init__.py @@ -1,4 +1,4 @@ # import celery_app to initialize it from gnuviechadmin.celery import app as celery_app # NOQA -__version__ = "0.15.0" +__version__ = "0.15.1" diff --git a/pyproject.toml b/pyproject.toml index 48a9242..2bde72f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "gva" -version = "0.15.0" +version = "0.15.1" description = "gnuviechadmin web interface" authors = ["Jan Dittberner "] license = "AGPL-3+"