Compare commits

...

7 commits
0.15.0 ... main

Author SHA1 Message Date
Jan Dittberner 11c04df074 Add flatpage URL for /issues/
Jira has been decommissioned and replaced with a flatpage
2024-02-11 13:12:54 +01:00
Jan Dittberner 7c57b4cc94 Update docker setup 2024-02-11 13:12:26 +01:00
Jan Dittberner 78e06dd2b9 Update dependencies
- updated minimum version of several dependencies in pyproject.toml
- update of django-allauth required to add
  allauth.account.middleware.AccountMiddleware to MIDDLEWARE setting
2024-01-13 13:38:03 +01:00
Jan Dittberner 90795375e7 Update dependencies 2024-01-13 13:22:50 +01:00
Jan Dittberner c1b226e5a1 Update dependency versions 2023-08-03 09:24:42 +02:00
Jan Dittberner 5e527ef10d Release 0.15.1 2023-07-23 11:24:46 +02:00
Jan Dittberner 3b6d50a62a Remove stale disk usage stats 2023-07-23 11:24:10 +02:00
9 changed files with 846 additions and 776 deletions

View file

@ -1,8 +1,8 @@
ARG DEBIAN_RELEASE=buster
ARG DEBIAN_RELEASE=bookworm
FROM debian:$DEBIAN_RELEASE AS builder
ARG GVAAPP=gva
ARG POETRY_VERSION=1.3.1
ARG POETRY_VERSION=1.7.1
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
@ -26,7 +26,7 @@ WORKDIR /srv/$GVAAPP
COPY poetry.lock pyproject.toml /srv/$GVAAPP/
RUN /root/.local/bin/poetry install --only=main
RUN /root/.local/bin/poetry install --only=main --no-root
FROM debian:$DEBIAN_RELEASE
LABEL maintainer="Jan Dittberner <jan@dittberner.info>"

View file

@ -19,7 +19,7 @@ services:
volumes:
- "redis_data:/var/lib/redis"
gva:
image: gnuviech/gva:buster
image: gnuviech/gva:bookworm
build:
context: .
args:
@ -67,7 +67,7 @@ services:
volumes:
- "../gvaldap/gvaldap:/srv/gvaldap/gvaldap"
file:
image: gnuviech/gvafile:buster
image: gnuviech/gvafile:bookworm
build:
context: ../gvafile
args:

View file

@ -1,6 +1,9 @@
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>
* :feature:`10` add disk usage details for mail and web

View file

@ -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"

View file

@ -161,6 +161,7 @@ MIDDLEWARE = [
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"allauth.account.middleware.AccountMiddleware",
"django.middleware.locale.LocaleMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
# uncomment next line to enable translation to browser locale

View file

@ -38,6 +38,7 @@ urlpatterns = [
path("contact/", include("contact_form.urls")),
path("impressum/", views.flatpage, {"url": "/impressum/"}, name="imprint"),
path("datenschutz/", views.flatpage, {"url": "/datenschutz/"}, name="privacy"),
path("issues/", views.flatpage, {"url": "/issues/"}, name="support"),
]
# Uncomment the next line to serve media files in dev.

View file

@ -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

1572
poetry.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,29 +1,29 @@
[tool.poetry]
name = "gva"
version = "0.15.0"
version = "0.15.1"
description = "gnuviechadmin web interface"
authors = ["Jan Dittberner <jan@dittberner.info>"]
license = "AGPL-3+"
readme = "README.md"
readme = "README.rst"
[tool.poetry.dependencies]
python = "^3.8"
django = "^4.2"
psycopg2-binary = "^2.9"
celery = "^5.2.7"
django-allauth = "^0.52.0"
django-allauth = "^0.60.0"
django-crispy-forms = "^2.0"
django-debug-toolbar = "^3.8"
django-debug-toolbar = "^4.2"
django-model-utils = "^4.1"
gvacommon = {version = "^0.7.0", source = "gnuviech"}
passlib = "^1.7.4"
redis = "^4.5.1"
redis = "^5.0.1"
requests-oauthlib = "^1.3.1"
django-impersonate = "^1.9.1"
djangorestframework = "^3.14.0"
markdown = "^3.4.3"
django-filter = "^23.1"
crispy-bootstrap5 = "^0.7"
crispy-bootstrap5 = "^2023.10"
python-magic = "^0.4.27"
isort = "^5.12.0"