mirror of
https://github.com/netinvent/npbackup.git
synced 2024-09-21 15:26:24 +08:00
Merge pull request #42 from netinvent/urgent-fixes
Urgent fixes for v2.2.2
This commit is contained in:
commit
5fa2319085
|
@ -88,7 +88,11 @@ def execution_logs(start_time: datetime) -> None:
|
|||
10 = debug, 20 = info, 30 = warning, 40 = error, 50 = critical
|
||||
so "if 30 in logger._cache" checks if warning has been triggered
|
||||
ATTENTION: logger._cache does only contain cache of current main, not modules, deprecated in favor of
|
||||
ofunctions.ContextFilterWorstLevel
|
||||
ofunctions.logger_utils.ContextFilterWorstLevel
|
||||
|
||||
ATTENTION: For ofunctions.logger_utils.ContextFilterWorstLevel will only check current logger instance
|
||||
So using logger = getLogger("anotherinstance") will create a separate instance from the one we can inspect
|
||||
Makes sense ;)
|
||||
"""
|
||||
end_time = datetime.utcnow()
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ except ImportError:
|
|||
sys.exit(1)
|
||||
|
||||
|
||||
logger = getLogger(__name__)
|
||||
logger = getLogger()
|
||||
|
||||
# NPF-SEC-00003: Avoid password command divulgation
|
||||
ENCRYPTED_OPTIONS = [
|
||||
|
|
|
@ -17,7 +17,7 @@ import i18n
|
|||
from npbackup.path_helper import BASEDIR
|
||||
|
||||
|
||||
logger = getLogger(__intname__)
|
||||
logger = getLogger()
|
||||
|
||||
|
||||
TRANSLATIONS_DIR = os.path.join(BASEDIR, "translations")
|
||||
|
|
|
@ -26,7 +26,7 @@ from npbackup.__main__ import __intname__ as NAME, __version__ as VERSION
|
|||
from npbackup import configuration
|
||||
|
||||
|
||||
logger = logging.getLogger(__intname__)
|
||||
logger = logging.getLogger()
|
||||
|
||||
|
||||
def metric_writer(
|
||||
|
@ -347,6 +347,15 @@ class NPBackupRunner:
|
|||
except ValueError:
|
||||
logger.warning("Bogus ignore_cloud_files value given")
|
||||
|
||||
try:
|
||||
if self.config_dict["backup"]["additional_parameters"]:
|
||||
self.restic_runner.additional_parameters = self.config_dict["backup"][
|
||||
"additional_parameters"
|
||||
]
|
||||
except KeyError:
|
||||
pass
|
||||
except ValueError:
|
||||
logger.warning("Bogus additional parameters given")
|
||||
self.restic_runner.stdout = self.stdout
|
||||
|
||||
try:
|
||||
|
@ -564,14 +573,18 @@ class NPBackupRunner:
|
|||
tags = None
|
||||
|
||||
try:
|
||||
additional_parameters = self.config_dict["backup"]["additional_parameters"]
|
||||
additional_backup_only_parameters = self.config_dict["backup"][
|
||||
"additional_backup_only_parameters"
|
||||
]
|
||||
except KeyError:
|
||||
additional_parameters = None
|
||||
additional_backup_only_parameters = None
|
||||
|
||||
# Check if backup is required
|
||||
self.restic_runner.verbose = False
|
||||
if not self.restic_runner.is_init:
|
||||
self.restic_runner.init()
|
||||
if not self.restic_runner.init():
|
||||
logger.error("Cannot continue.")
|
||||
return False
|
||||
if self.check_recent_backups() and not force:
|
||||
logger.info("No backup necessary.")
|
||||
return True
|
||||
|
@ -596,8 +609,8 @@ class NPBackupRunner:
|
|||
if pre_exec_failure_is_fatal:
|
||||
return False
|
||||
else:
|
||||
logger.debug(
|
||||
"Pre-execution of command {} success with\n{}.".format(
|
||||
logger.info(
|
||||
"Pre-execution of command {} success with:\n{}.".format(
|
||||
pre_exec_command, output
|
||||
)
|
||||
)
|
||||
|
@ -613,7 +626,7 @@ class NPBackupRunner:
|
|||
one_file_system=one_file_system,
|
||||
use_fs_snapshot=use_fs_snapshot,
|
||||
tags=tags,
|
||||
additional_parameters=additional_parameters,
|
||||
additional_backup_only_parameters=additional_backup_only_parameters,
|
||||
)
|
||||
logger.debug("Restic output:\n{}".format(result_string))
|
||||
metric_writer(
|
||||
|
@ -633,8 +646,8 @@ class NPBackupRunner:
|
|||
if post_exec_failure_is_fatal:
|
||||
return False
|
||||
else:
|
||||
logger.debug(
|
||||
"Post-execution of command {} success with\n{}.".format(
|
||||
logger.info(
|
||||
"Post-execution of command {} success with:\n{}.".format(
|
||||
post_exec_command, output
|
||||
)
|
||||
)
|
||||
|
|
|
@ -16,7 +16,7 @@ from npbackup.upgrade_client.upgrader import auto_upgrader, _check_new_version
|
|||
from npbackup.__main__ import __version__ as npbackup_version
|
||||
|
||||
|
||||
logger = getLogger(__intname__)
|
||||
logger = getLogger()
|
||||
|
||||
|
||||
def check_new_version(config_dict: dict) -> bool:
|
||||
|
|
|
@ -22,7 +22,7 @@ from npbackup.core.nuitka_helper import IS_COMPILED
|
|||
if os.name == "nt":
|
||||
from npbackup.windows.task import create_scheduled_task
|
||||
|
||||
logger = getLogger(__intname__)
|
||||
logger = getLogger()
|
||||
|
||||
|
||||
def ask_backup_admin_password(config_dict) -> bool:
|
||||
|
@ -285,6 +285,10 @@ def config_gui(config_dict: dict, config_file: str):
|
|||
sg.Text(_t("config_gui.additional_parameters"), size=(40, 1)),
|
||||
sg.Input(key="backup---additional_parameters", size=(50, 1)),
|
||||
],
|
||||
[
|
||||
sg.Text(_t("config_gui.additional_backup_only_parameters"), size=(40, 1)),
|
||||
sg.Input(key="backup---additional_backup_only_parameters", size=(50, 1)),
|
||||
],
|
||||
]
|
||||
|
||||
repo_col = [
|
||||
|
|
|
@ -42,7 +42,7 @@ from npbackup.core.i18n_helper import _t
|
|||
from npbackup.core.upgrade_runner import run_upgrade, check_new_version
|
||||
|
||||
|
||||
logger = getLogger(__intname__)
|
||||
logger = getLogger()
|
||||
|
||||
# Let's use mutable to get a cheap way of transfering data from thread to main program
|
||||
# There are no possible race conditions since we don't modifiy the data from anywhere outside the thread
|
||||
|
|
|
@ -7,8 +7,8 @@ __intname__ = "npbackup.restic_wrapper"
|
|||
__author__ = "Orsiris de Jong"
|
||||
__copyright__ = "Copyright (C) 2022-2023 NetInvent"
|
||||
__license__ = "GPL-3.0-only"
|
||||
__build__ = "2023082801"
|
||||
__version__ = "1.7.2"
|
||||
__build__ = "2023112901"
|
||||
__version__ = "1.7.3"
|
||||
|
||||
|
||||
from typing import Tuple, List, Optional, Callable, Union
|
||||
|
@ -22,7 +22,7 @@ import queue
|
|||
from command_runner import command_runner
|
||||
|
||||
|
||||
logger = getLogger(__intname__)
|
||||
logger = getLogger()
|
||||
|
||||
# Arbitrary timeout for init / init checks.
|
||||
# If init takes more than a minute, we really have a problem
|
||||
|
@ -70,7 +70,7 @@ class ResticRunner:
|
|||
except AttributeError:
|
||||
self._backend_type = None
|
||||
self._ignore_cloud_files = True
|
||||
self._addition_parameters = None
|
||||
self._additional_parameters = None
|
||||
self._environment_variables = {}
|
||||
|
||||
self._stop_on = (
|
||||
|
@ -201,7 +201,12 @@ class ResticRunner:
|
|||
"""
|
||||
start_time = datetime.utcnow()
|
||||
self._executor_finished = False
|
||||
_cmd = '"{}" {}{}'.format(self._binary, cmd, self.generic_arguments)
|
||||
additional_parameters = (
|
||||
f" {self.additional_parameters.strip()} "
|
||||
if self.additional_parameters
|
||||
else ""
|
||||
)
|
||||
_cmd = f'"{self._binary}" {additional_parameters}{cmd}{self.generic_arguments}'
|
||||
if self.dry_run:
|
||||
_cmd += " --dry-run"
|
||||
logger.debug("Running command: [{}]".format(_cmd))
|
||||
|
@ -352,11 +357,11 @@ class ResticRunner:
|
|||
|
||||
@property
|
||||
def additional_parameters(self):
|
||||
return self._addition_parameters
|
||||
return self._additional_parameters
|
||||
|
||||
@additional_parameters.setter
|
||||
def additional_parameters(self, value: str):
|
||||
self._addition_parameters = value
|
||||
self._additional_parameters = value
|
||||
|
||||
@property
|
||||
def priority(self):
|
||||
|
@ -442,11 +447,17 @@ class ResticRunner:
|
|||
if re.search(
|
||||
r"created restic repository ([a-z0-9]+) at .+", output, re.IGNORECASE
|
||||
):
|
||||
self.is_init = True
|
||||
return True
|
||||
else:
|
||||
if re.search(".*already exists", output, re.IGNORECASE):
|
||||
logger.info("Repo already initialized.")
|
||||
self.is_init = True
|
||||
return True
|
||||
logger.error(f"Cannot contact repo: {output}")
|
||||
self.is_init = False
|
||||
return False
|
||||
self.is_init = False
|
||||
return False
|
||||
|
||||
@property
|
||||
|
@ -536,7 +547,7 @@ class ResticRunner:
|
|||
use_fs_snapshot: bool = False,
|
||||
tags: List[str] = [],
|
||||
one_file_system: bool = False,
|
||||
additional_parameters: str = None,
|
||||
additional_backup_only_parameters: str = None,
|
||||
) -> Tuple[bool, str]:
|
||||
"""
|
||||
Executes restic backup after interpreting all arguments
|
||||
|
@ -560,9 +571,14 @@ class ResticRunner:
|
|||
for path in paths:
|
||||
cmd += ' {} "{}"'.format(source_parameter, path)
|
||||
else:
|
||||
# make sure path is a list and does not have trailing slashes
|
||||
# make sure path is a list and does not have trailing slashes, unless we're backing up root
|
||||
cmd = "backup {}".format(
|
||||
" ".join(['"{}"'.format(path.rstrip("/\\")) for path in paths])
|
||||
" ".join(
|
||||
[
|
||||
'"{}"'.format(path.rstrip("/\\")) if path != "/" else path
|
||||
for path in paths
|
||||
]
|
||||
)
|
||||
)
|
||||
|
||||
case_ignore_param = ""
|
||||
|
@ -592,8 +608,8 @@ class ResticRunner:
|
|||
if tag:
|
||||
tag = tag.strip()
|
||||
cmd += " --tag {}".format(tag)
|
||||
if additional_parameters:
|
||||
cmd += " {}".format(additional_parameters)
|
||||
if additional_backup_only_parameters:
|
||||
cmd += " {}".format(additional_backup_only_parameters)
|
||||
result, output = self.executor(cmd, live_stream=True)
|
||||
|
||||
if (
|
||||
|
|
|
@ -20,6 +20,7 @@ en:
|
|||
one_per_line: one per line
|
||||
backup_priority: Backup priority
|
||||
additional_parameters: Additional parameters
|
||||
additional_backup_only_parameters: Additional backup only parmas
|
||||
|
||||
backup_destination: Backup destination
|
||||
minimum_backup_age: Minimum delay between two backups
|
||||
|
|
|
@ -20,6 +20,7 @@ fr:
|
|||
one_per_line: un par ligne
|
||||
backup_priority: Priorité de sauvegarde
|
||||
additional_parameters: Paramètres supplémentaires
|
||||
additional_backup_only_parameters: Paramètres supp. sauvegarde
|
||||
|
||||
backup_destination: Destination de sauvegarde
|
||||
minimum_backup_age: Délai minimal entre deux sauvegardes
|
||||
|
|
|
@ -16,7 +16,7 @@ import json
|
|||
import requests
|
||||
|
||||
|
||||
logger = getLogger(__intname__)
|
||||
logger = getLogger()
|
||||
|
||||
|
||||
class Requestor:
|
||||
|
|
|
@ -25,7 +25,7 @@ from npbackup.path_helper import CURRENT_DIR, CURRENT_EXECUTABLE
|
|||
from npbackup.core.nuitka_helper import IS_COMPILED
|
||||
from npbackup.__main__ import __version__ as npbackup_version
|
||||
|
||||
logger = getLogger(__intname__)
|
||||
logger = getLogger()
|
||||
|
||||
UPGRADE_DEFER_TIME = 60 # Wait x seconds before we actually do the upgrade so current program could quit before being erased
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ import tempfile
|
|||
from command_runner import command_runner
|
||||
from npbackup.customization import PROGRAM_NAME
|
||||
|
||||
logger = getLogger(__intname__)
|
||||
logger = getLogger()
|
||||
|
||||
|
||||
# This is the path to a onefile executable binary
|
||||
|
|
|
@ -18,7 +18,7 @@ from logging import getLogger
|
|||
ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
|
||||
config_file = os.path.join(ROOT_DIR, "upgrade_server.conf")
|
||||
|
||||
logger = getLogger(__intname__)
|
||||
logger = getLogger()
|
||||
|
||||
|
||||
def load_config(config_file: str = config_file):
|
||||
|
|
|
@ -39,7 +39,7 @@ else:
|
|||
config_dict = configuration.load_config()
|
||||
|
||||
|
||||
logger = getLogger(__intname__)
|
||||
logger = getLogger()
|
||||
|
||||
|
||||
def sha256sum_data(data):
|
||||
|
|
Loading…
Reference in a new issue