diff --git a/borgmatic/commands/borgmatic.py b/borgmatic/commands/borgmatic.py index 40584bec..9f88efa5 100644 --- a/borgmatic/commands/borgmatic.py +++ b/borgmatic/commands/borgmatic.py @@ -36,6 +36,7 @@ import borgmatic.actions.rlist import borgmatic.actions.transfer import borgmatic.commands.completion.bash import borgmatic.commands.completion.fish +from borgmatic.debug_env import log_versions from borgmatic.borg import umount as borg_umount from borgmatic.borg import version as borg_version from borgmatic.commands.arguments import parse_arguments @@ -73,6 +74,7 @@ def run_configuration(config_filename, config, arguments): try: local_borg_version = borg_version.local_borg_version(config, local_path) + yield from log_error_records(f'{config_filename}: Local Borg version: {local_borg_version}', levelno=logging.DEBUG) except (OSError, CalledProcessError, ValueError) as error: yield from log_error_records(f'{config_filename}: Error getting local Borg version', error) return @@ -865,6 +867,8 @@ def main(extra_summary_logs=[]): # pragma: no cover logger.critical(f'Error configuring logging: {error}') exit_with_help_link() + log_versions() + summary_logs = ( extra_summary_logs + parse_logs diff --git a/borgmatic/debug_env.py b/borgmatic/debug_env.py new file mode 100644 index 00000000..2b398122 --- /dev/null +++ b/borgmatic/debug_env.py @@ -0,0 +1,41 @@ +import platform +import logging +import os +from borgmatic.borg import version as borg_version + +try: + import importlib_metadata +except ModuleNotFoundError: # pragma: nocover + import importlib.metadata as importlib_metadata + +logger = logging.Logger(__name__) + +def log_versions(): # pragma: nocover + ''' + Logs the platform and the architecture on debug. Also logs the version of borgmatic and python. + ''' + logging.debug(f'Borgmatic version: {importlib_metadata.version("borgmatic")}') + logging.debug(f'Architecture: {platform.machine()}') + logging.debug(f'Python: {platform.python_implementation()} {platform.python_version()}') + + if platform.system() == 'Linux': + logging.debug('Operating system: Linux') + logging.debug(f'Kernel: {os.uname()[2]}') + try: + os_release = platform.freedesktop_os_release() + if 'PRETTY_NAME' in os_release: + logging.debug(f'Distribution: {os_release["PRETTY_NAME"]}') + elif 'NAME' in os_release: + logging.debug(f'Distribution name: {os_release["NAME"]}') + if 'VERSION' in os_release: + logging.debug(f'Distribution version: {os_release["VERSION"]}') + except OSError: + logging.debug('Cannot determine linux distribution: /etc/os-release and /usr/lib/os-release not accessible') + elif platform.system() == 'Darwin': + logging.debug('Operating system: MacOS') + logging.debug(f'Operating system version: {platform.mac_ver()[0]}') + elif platform.system() == 'Windows': + logging.debug('Operating system: Windows') + logging.debug(f'Operating system version: {platform.win32_edition()[0]}') + else: + logging.debug(f'Operating system: {platform.system()}')