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

Wolfgang Bumiller w.bumiller at proxmox.com
Thu Jul 7 10:22:25 CEST 2016


---
 Changes since v1:
   * Added html output.
   * More consistent newlines: added one after the job-start hook
     output, since the extra one before the job-end one was intended
     as there's an empty line between each VM's output, too.
   * Not including the 'backup job finished/failed' line in the
     job-end output (as it's already clear from the subject line).
 PVE/VZDump.pm | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/PVE/VZDump.pm b/PVE/VZDump.pm
index 45baca6..dc138bc 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 . "\n" 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";
@@ -475,6 +477,7 @@ sub sendmail {
     $html .= "<pre>\n";
     $html .= escape_html($cmdline) . "\n\n";
 
+    $html .= escape_html($detail_pre) . "\n" if defined($detail_pre);
     foreach my $task (@$tasklist) {
 	my $vmid = $task->{vmid};
 	my $log = $task->{tmplog};
@@ -494,6 +497,7 @@ sub sendmail {
 	close (TMP);
 	$html .= "\n";
     }
+    $html .= escape_html($detail_post) if defined($detail_post);
     $html .= "</pre></body></html>\n";
     # end html part
 
@@ -1110,22 +1114,28 @@ 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);
@@ -1137,9 +1147,12 @@ sub exec_backup {
 	}
     }
 
+    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