From 0ee4b3c1cf3310009a093f9e99bc85ef35ce33d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Illi-Zuberb=C3=BChler?= Date: Sat, 10 Dec 2016 22:02:21 +0100 Subject: [PATCH] refactor config_backup code: extract backup logic from view as preparation for #1382 --- .../storageadmin/views/config_backup.py | 30 +--------- src/rockstor/system/config_backup.py | 55 +++++++++++++++++++ 2 files changed, 57 insertions(+), 28 deletions(-) create mode 100644 src/rockstor/system/config_backup.py diff --git a/src/rockstor/storageadmin/views/config_backup.py b/src/rockstor/storageadmin/views/config_backup.py index 7f562e98c..855bba6f4 100644 --- a/src/rockstor/storageadmin/views/config_backup.py +++ b/src/rockstor/storageadmin/views/config_backup.py @@ -184,35 +184,9 @@ def get_queryset(self, *args, **kwargs): @transaction.atomic def post(self, request): - models = {'storageadmin': - ['user', 'group', 'sambashare', 'netatalkshare', 'nfsexport', - 'nfsexportgroup', 'advancednfsexport', ], - 'smart_manager': - ['service', ], } - model_list = [] - for a in models: - for m in models[a]: - model_list.append('%s.%s' % (a, m)) - logger.debug('model list = %s' % model_list) + logger.debug('backing up config...') with self._handle_exception(request): - filename = ('backup-%s.json' % - datetime.now().strftime('%Y-%m-%d-%H%M%S')) - if (not os.path.isdir(self.cb_dir)): - os.mkdir(self.cb_dir) - fp = os.path.join(self.cb_dir, filename) - with open(fp, 'w') as dfo: - call_command('dumpdata', *model_list, stdout=dfo) - dfo.write('\n') - call_command('dumpdata', database='smart_manager', *model_list, - stdout=dfo) - run_command(['/usr/bin/gzip', fp]) - gz_name = ('%s.gz' % filename) - fp = os.path.join(self.cb_dir, gz_name) - md5sum = self._md5sum(fp) - size = os.stat(fp).st_size - cbo = ConfigBackup(filename=gz_name, md5sum=md5sum, size=size) - cbo.save() - return Response(ConfigBackupSerializer(cbo).data) + return Response(backup_config(self.cb_dir, self._md5sum)) class ConfigBackupDetailView(ConfigBackupMixin, rfc.GenericView): diff --git a/src/rockstor/system/config_backup.py b/src/rockstor/system/config_backup.py new file mode 100644 index 000000000..62f29c36d --- /dev/null +++ b/src/rockstor/system/config_backup.py @@ -0,0 +1,55 @@ +""" +Copyright (c) 2012-2016 RockStor, Inc. +This file is part of RockStor. + +RockStor is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published +by the Free Software Foundation; either version 2 of the License, +or (at your option) any later version. + +RockStor is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import os +from django.core.management import call_command +from system.osi import run_command +from storageadmin.models import ConfigBackup +from storageadmin.serializers import ConfigBackupSerializer +from datetime import datetime +import logging +logger = logging.getLogger(__name__) + +def backup_config(cb_dir, _md5sum): + models = {'storageadmin': + ['user', 'group', 'sambashare', 'netatalkshare', 'nfsexport', + 'nfsexportgroup', 'advancednfsexport', ], + 'smart_manager': + ['service', ], } + model_list = [] + for a in models: + for m in models[a]: + model_list.append('%s.%s' % (a, m)) + logger.debug('model list = %s' % model_list) + + filename = ('backup-%s.json' % datetime.now().strftime('%Y-%m-%d-%H%M%S')) + if (not os.path.isdir(cb_dir)): + os.mkdir(cb_dir) + fp = os.path.join(cb_dir, filename) + with open(fp, 'w') as dfo: + call_command('dumpdata', *model_list, stdout=dfo) + dfo.write('\n') + call_command('dumpdata', database='smart_manager', *model_list, stdout=dfo) + run_command(['/usr/bin/gzip', fp]) + gz_name = ('%s.gz' % filename) + fp = os.path.join(cb_dir, gz_name) + md5sum = _md5sum(fp) + size = os.stat(fp).st_size + cbo = ConfigBackup(filename=gz_name, md5sum=md5sum, size=size) + cbo.save() + return ConfigBackupSerializer(cbo).data