mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-21 07:55:00 +00:00
Backups: show free disk space on upload+restore page
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
8cc74bd203
commit
d4d5c15566
@ -32,7 +32,10 @@
|
||||
You can choose the apps you wish to import after uploading a backup file.
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
<br />
|
||||
<div class="alert alert-info" role="alert">
|
||||
{% trans "Free disk space" %}: {{ free_space }}<br />
|
||||
{% trans "Make sure the uploaded file is smaller than that." %}
|
||||
</div>
|
||||
|
||||
<form class="form" enctype="multipart/form-data" method="post">
|
||||
{% csrf_token %}
|
||||
|
||||
@ -21,6 +21,7 @@ Views for the backups app.
|
||||
from datetime import datetime
|
||||
import gzip
|
||||
from io import BytesIO
|
||||
import logging
|
||||
import mimetypes
|
||||
import os
|
||||
import tempfile
|
||||
@ -36,12 +37,15 @@ from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import ugettext_lazy
|
||||
from django.views.generic import View, FormView, TemplateView
|
||||
|
||||
from plinth.modules import backups
|
||||
from plinth import actions
|
||||
from plinth.errors import PlinthError
|
||||
from plinth.modules import backups, storage
|
||||
|
||||
from . import api, forms, SESSION_PATH_VARIABLE
|
||||
from .decorators import delete_tmp_backup_file
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
subsubmenu = [{
|
||||
'url': reverse_lazy('backups:index'),
|
||||
'text': ugettext_lazy('Backups')
|
||||
@ -142,6 +146,13 @@ class UploadArchiveView(SuccessMessageMixin, FormView):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['title'] = _('Upload and restore a backup file')
|
||||
context['subsubmenu'] = subsubmenu
|
||||
try:
|
||||
disk_info = storage.get_disk_info('/', self.request)
|
||||
except (PlinthError, PermissionError):
|
||||
logger.error('Error getting information about root partition.')
|
||||
else:
|
||||
context['free_space'] = storage.format_bytes(
|
||||
disk_info["free_bytes"])
|
||||
return context
|
||||
|
||||
def form_valid(self, form):
|
||||
|
||||
@ -25,8 +25,9 @@ from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from plinth import service as service_module
|
||||
from plinth import action_utils, actions, cfg
|
||||
from plinth.errors import PlinthError
|
||||
from plinth.menu import main_menu
|
||||
from plinth.utils import format_lazy
|
||||
from plinth.utils import format_lazy, is_user_admin
|
||||
|
||||
from .manifest import backup
|
||||
|
||||
@ -77,6 +78,24 @@ def get_disks():
|
||||
return combined_list
|
||||
|
||||
|
||||
def get_disk_info(mountpoint, request):
|
||||
"""Get information about the free space of a drive"""
|
||||
if not is_user_admin(request, cached=True):
|
||||
raise PermissionError
|
||||
disks = get_disks()
|
||||
list_root = [disk for disk in disks if disk['mountpoint'] == mountpoint]
|
||||
if not list_root:
|
||||
raise PlinthError
|
||||
percent_used = list_root[0]['percent_used']
|
||||
free_bytes = list_root[0]['free']
|
||||
free_gib = free_bytes / (1024**3)
|
||||
return {
|
||||
"percent_used": percent_used,
|
||||
"free_bytes": free_bytes,
|
||||
"free_gib": free_gib
|
||||
}
|
||||
|
||||
|
||||
def _get_disks_from_df():
|
||||
"""Return the list of disks and free space available using 'df'."""
|
||||
command = [
|
||||
|
||||
@ -30,10 +30,11 @@ from django.utils.translation import ugettext as _
|
||||
from django.views.decorators.http import require_POST
|
||||
|
||||
from plinth import actions
|
||||
from plinth.errors import PlinthError
|
||||
from plinth.modules import storage
|
||||
from plinth.utils import format_lazy, is_user_admin
|
||||
from plinth.utils import format_lazy
|
||||
|
||||
from . import udisks2
|
||||
from . import udisks2, get_disk_info
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -91,29 +92,22 @@ def expand_partition(request, device):
|
||||
|
||||
def warn_about_low_disk_space(request):
|
||||
"""Warn about insufficient space on root partition."""
|
||||
if not is_user_admin(request, cached=True):
|
||||
return
|
||||
|
||||
disks = storage.get_disks()
|
||||
list_root = [disk for disk in disks if disk['mountpoint'] == '/']
|
||||
if not list_root:
|
||||
try:
|
||||
root_info = get_disk_info('/', request)
|
||||
except (PlinthError, PermissionError):
|
||||
logger.error('Error getting information about root partition.')
|
||||
return
|
||||
|
||||
percent_used = list_root[0]['percent_used']
|
||||
free_bytes = list_root[0]['free']
|
||||
free_gib = free_bytes / (1024**3)
|
||||
|
||||
message = format_lazy(
|
||||
# Translators: xgettext:no-python-format
|
||||
_('Warning: Low space on system partition ({percent_used}% used, '
|
||||
'{free_space} free).'),
|
||||
percent_used=percent_used,
|
||||
free_space=storage.format_bytes(free_bytes))
|
||||
percent_used=root_info["percent_used"],
|
||||
free_space=storage.format_bytes(root_info["free_bytes"]))
|
||||
|
||||
if percent_used > 90 or free_gib < 1:
|
||||
if root_info["percent_used"] > 90 or root_info["free_gib"] < 1:
|
||||
messages.error(request, message)
|
||||
elif percent_used > 75 or free_gib < 2:
|
||||
elif root_info["percent_used"] > 75 or root_info["free_gib"] < 2:
|
||||
messages.warning(request, message)
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user