[pve-devel] [PATCH manager 2/2] Fix #1048: vzdump: include job-* hook logs in email

Wolfgang Bumiller w.bumiller at proxmox.com
Wed Jul 6 13:52:33 CEST 2016


---
 PVE/VZDump.pm | 27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

diff --git a/PVE/VZDump.pm b/PVE/VZDump.pm
index 45baca6..8216ce4 100644
--- a/PVE/VZDump.pm
+++ b/PVE/VZDump.pm
@@ -363,7 +363,7 @@ sub read_vzdump_defaults {
 }
 
 sub sendmail {
-    my ($self, $tasklist, $totaltime, $err) = @_;
+    my ($self, $tasklist, $totaltime, $err, $detail_pre, $detail_post) = @_;
 
     my $opts = $self->{opts};
 
@@ -426,6 +426,7 @@ sub sendmail {
     $text .= "Detailed backup logs:\n\n";
     $text .= "$cmdline\n\n";
 
+    $text .= $detail_pre if defined($detail_pre);
     foreach my $task (@$tasklist) {
 	my $vmid = $task->{vmid};
 	my $log = $task->{tmplog};
@@ -438,6 +439,7 @@ sub sendmail {
 	close (TMP);
 	$text .= "\n";
     }
+    $text .= $detail_post if defined($detail_post);
 
     # html part
     my $html = "<html><body>\n";
@@ -1110,36 +1112,45 @@ sub exec_backup {
 	}
     }
 
+    # Use in-memory files for the outer hook logs to pass them to sendmail.
+    my $job_start_log = '';
+    my $job_end_log = '';
+    open my $job_start_fd, '>', \$job_start_log;
+    open my $job_end_fd, '>', \$job_end_log;
+
     my $starttime = time();
     my $errcount = 0;
     eval {
 
-	$self->run_hook_script ('job-start');
+	$self->run_hook_script ('job-start', undef, $job_start_fd);
 
 	foreach my $task (@$tasklist) {
 	    $self->exec_backup_task ($task);
 	    $errcount += 1 if $task->{state} ne 'ok';
 	}
 
-	$self->run_hook_script ('job-end');    
+	$self->run_hook_script ('job-end', undef, $job_end_fd);
     };
     my $err = $@;
 
-    $self->run_hook_script ('job-abort') if $err;    
+    $self->run_hook_script ('job-abort', undef, $job_end_fd) if $err;
 
     if ($err) {
-	debugmsg ('err', "Backup job failed - $err", undef, 1);
+	debugmsg ('err', "Backup job failed - $err", $job_end_fd, 1);
     } else {
 	if ($errcount) {
-	    debugmsg ('info', "Backup job finished with errors", undef, 1);
+	    debugmsg ('info', "Backup job finished with errors", $job_end_fd, 1);
 	} else {
-	    debugmsg ('info', "Backup job finished successfully", undef, 1);
+	    debugmsg ('info', "Backup job finished successfully", $job_end_fd, 1);
 	}
     }
 
+    close $job_start_fd;
+    close $job_end_fd;
+
     my $totaltime = time() - $starttime;
 
-    eval { $self->sendmail ($tasklist, $totaltime); };
+    eval { $self->sendmail ($tasklist, $totaltime, undef, $job_start_log, $job_end_log); };
     debugmsg ('err', $@) if $@;
 
     die $err if $err;
-- 
2.1.4




More information about the pve-devel mailing list