diff --git a/borgmatic/commands/borgmatic.py b/borgmatic/commands/borgmatic.py index a6f56925..c2e7b656 100644 --- a/borgmatic/commands/borgmatic.py +++ b/borgmatic/commands/borgmatic.py @@ -66,13 +66,10 @@ def run_configuration(config_filename, config, arguments): error_repository = '' using_primary_action = {'create', 'prune', 'compact', 'check'}.intersection(arguments) monitoring_log_level = verbosity_to_log_level(global_arguments.monitoring_verbosity) - action_name = next(iter(arguments)) - skip_monitoring = global_arguments.skip_monitoring - - # action_names = [action for action in arguments.keys() if action != 'global' and isinstance(action, str)] - - # print (action_names) - # return + skip_monitoring = getattr(global_arguments, 'skip_monitoring', False) + action_names = [ + action for action in arguments.keys() if action != 'global' and isinstance(action, str) + ] try: local_borg_version = borg_version.local_borg_version(storage, local_path) @@ -90,17 +87,18 @@ def run_configuration(config_filename, config, arguments): monitoring_log_level, global_arguments.dry_run, ) - if using_primary_action and not skip_monitoring: - dispatch.call_hooks( - 'ping_monitor', - hooks, - config_filename, - monitor.MONITOR_HOOK_NAMES, - monitor.State.START, - monitoring_log_level, - global_arguments.dry_run, - action_name, - ) + + for action_name in action_names: + dispatch.call_hooks( + 'ping_monitor', + hooks, + config_filename, + monitor.MONITOR_HOOK_NAMES, + monitor.State.START, + monitoring_log_level, + global_arguments.dry_run, + action_name, + ) except (OSError, CalledProcessError) as error: if command.considered_soft_failure(config_filename, error): return @@ -111,7 +109,9 @@ def run_configuration(config_filename, config, arguments): if not encountered_error: repo_queue = Queue() for repo in location['repositories']: - repo_queue.put((repo, 0),) + repo_queue.put( + (repo, 0), + ) while not repo_queue.empty(): repository_path, retry_num = repo_queue.get() @@ -135,7 +135,9 @@ def run_configuration(config_filename, config, arguments): ) except (OSError, CalledProcessError, ValueError) as error: if retry_num < retries: - repo_queue.put((repository_path, retry_num + 1),) + repo_queue.put( + (repository_path, retry_num + 1), + ) tuple( # Consume the generator so as to trigger logging. log_error_records( f'{repository_path}: Error running actions for repository', @@ -161,16 +163,17 @@ def run_configuration(config_filename, config, arguments): try: if using_primary_action and not skip_monitoring: # send logs irrespective of error - dispatch.call_hooks( - 'ping_monitor', - hooks, - config_filename, - monitor.MONITOR_HOOK_NAMES, - monitor.State.LOG, - monitoring_log_level, - global_arguments.dry_run, - action_name, - ) + for action_name in action_names: + dispatch.call_hooks( + 'ping_monitor', + hooks, + config_filename, + monitor.MONITOR_HOOK_NAMES, + monitor.State.LOG, + monitoring_log_level, + global_arguments.dry_run, + action_name, + ) except (OSError, CalledProcessError) as error: if command.considered_soft_failure(config_filename, error): return @@ -181,16 +184,17 @@ def run_configuration(config_filename, config, arguments): if not encountered_error: try: if using_primary_action and not skip_monitoring: - dispatch.call_hooks( - 'ping_monitor', - hooks, - config_filename, - monitor.MONITOR_HOOK_NAMES, - monitor.State.FINISH, - monitoring_log_level, - global_arguments.dry_run, - action_name, - ) + for action_name in action_names: + dispatch.call_hooks( + 'ping_monitor', + hooks, + config_filename, + monitor.MONITOR_HOOK_NAMES, + monitor.State.FINISH, + monitoring_log_level, + global_arguments.dry_run, + action_name, + ) dispatch.call_hooks( 'destroy_monitor', hooks, @@ -218,16 +222,17 @@ def run_configuration(config_filename, config, arguments): error=encountered_error, output=getattr(encountered_error, 'output', ''), ) - dispatch.call_hooks( - 'ping_monitor', - hooks, - config_filename, - monitor.MONITOR_HOOK_NAMES, - monitor.State.FAIL, - monitoring_log_level, - global_arguments.dry_run, - action_name, - ) + for action_name in action_names: + dispatch.call_hooks( + 'ping_monitor', + hooks, + config_filename, + monitor.MONITOR_HOOK_NAMES, + monitor.State.FAIL, + monitoring_log_level, + global_arguments.dry_run, + action_name, + ) dispatch.call_hooks( 'destroy_monitor', hooks, @@ -417,19 +422,39 @@ def run_actions( ) elif action_name == 'rlist': yield from borgmatic.actions.rlist.run_rlist( - repository, storage, local_borg_version, action_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + action_arguments, + local_path, + remote_path, ) elif action_name == 'list': yield from borgmatic.actions.list.run_list( - repository, storage, local_borg_version, action_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + action_arguments, + local_path, + remote_path, ) elif action_name == 'rinfo': yield from borgmatic.actions.rinfo.run_rinfo( - repository, storage, local_borg_version, action_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + action_arguments, + local_path, + remote_path, ) elif action_name == 'info': yield from borgmatic.actions.info.run_info( - repository, storage, local_borg_version, action_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + action_arguments, + local_path, + remote_path, ) elif action_name == 'break-lock': borgmatic.actions.break_lock.run_break_lock( @@ -442,7 +467,12 @@ def run_actions( ) elif action_name == 'borg': borgmatic.actions.borg.run_borg( - repository, storage, local_borg_version, action_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + action_arguments, + local_path, + remote_path, ) command.execute_hook( @@ -635,7 +665,8 @@ def collect_configuration_run_summary_logs(configs, arguments): logger.info(f"Unmounting mount point {arguments['umount'].mount_point}") try: borg_umount.unmount_archive( - mount_point=arguments['umount'].mount_point, local_path=get_local_path(configs), + mount_point=arguments['umount'].mount_point, + local_path=get_local_path(configs), ) except (CalledProcessError, OSError) as error: yield from log_error_records('Error unmounting mount point', error) diff --git a/borgmatic/hooks/cronitor.py b/borgmatic/hooks/cronitor.py index 5fc7c5f3..f514103d 100644 --- a/borgmatic/hooks/cronitor.py +++ b/borgmatic/hooks/cronitor.py @@ -35,9 +35,11 @@ def ping_monitor(hook_config, config_filename, state, monitoring_log_level, dry_ dry_run_label = ' (dry run; not actually pinging)' if dry_run else '' try: - ping_url = f"{hook_config['sss']}/{MONITOR_STATE_TO_CRONITOR[state]}" + ping_url = f"{hook_config[action_name]}/{MONITOR_STATE_TO_CRONITOR[state]}" except KeyError: - logger.debug(f'{config_filename}: Skipping Cronitor {state.name.lower()} ping due to unconfigured action: {action_name}') + logger.debug( + f'{config_filename}: Skipping Cronitor {state.name.lower()} ping due to unconfigured action: {action_name}' + ) return logger.info(f'{config_filename}: Pinging Cronitor {state.name.lower()}{dry_run_label}')