From 9326bae6a271a5794381d0a7ed2a349faa2be628 Mon Sep 17 00:00:00 2001
From: Kyle M Hall <kyle@bywatersolutions.com>
Date: Thu, 11 Aug 2022 15:43:15 -0400
Subject: [PATCH] Bug 31345: Add ability to exit process_message_queue.pl early
 if any plugin before_send_messages hook fails

Sometimes it would be better for process_message_queue.pl to stop if a plugin hook fails rather than continue processing. It would be nice if that was a command line option.

Test Plan:
1) Install any plugin with a before_send_messages hook
2) Modify the plugin, add a 'die;' statement at the start of the
   before_send_messages method of the plugin.
3) Run process_message_queue.pl as usual
4) Note the exit code is 0
5) Run it again with the new -e setting
6) Note the exit code is 1

Signed-off-by: Brendan Lawlor <blawlor@clamsnet.org>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
---
 misc/cronjobs/process_message_queue.pl | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/misc/cronjobs/process_message_queue.pl b/misc/cronjobs/process_message_queue.pl
index 316e5bae1a..0662b4f636 100755
--- a/misc/cronjobs/process_message_queue.pl
+++ b/misc/cronjobs/process_message_queue.pl
@@ -35,6 +35,7 @@ my $verbose = 0;
 my $where;
 my @type;
 my @letter_code;
+my $exit_on_plugin_failure = 0;
 
 my $command_line_options = join(" ",@ARGV);
 
@@ -48,6 +49,7 @@ GetOptions(
     't|type:s'          => \@type,
     'c|code:s'          => \@letter_code,
     'w|where:s'         => \$where,
+    'e|exit-on-plugin-failure' => \$exit_on_plugin_failure,
 );
 my $usage = << 'ENDUSAGE';
 
@@ -67,6 +69,7 @@ This script has the following parameters :
     -h --help: this message
     -v --verbose: provides verbose output to STDOUT
     -w --where: filter messages to send with additional conditions in the where clause
+    -e --exit-on-plugin-failure: if enabled, script will exit prematurely if any plugin before_send_messages hook fails
 ENDUSAGE
 
 die $usage if $help;
@@ -106,6 +109,7 @@ if ( C4::Context->config("enable_plugins") ) {
             }
             catch {
                 warn "$_";
+                exit 1 if $exit_on_plugin_failure;
             };
         }
     }
-- 
2.44.0