With the newly added button in the tasklog the implementation for the PMG server needs to be adapted. I saw an opportunity here to clear some redundant code for displaying the tasklog and replace it with a call to dump_logfile(), akin to how this is handled in pve-manager.
The tasklog download functionality now streams the file by invoking the newly created function in pve-common. Tasklog files can become rather large, therefore sent files are compressed if they are bigger than 1500 bytes (The 'Maximum Transfer Unit' for TCP). Smaller files will not benefit from compression here, as they still use one (1) data unit packet to transfer. Please note that the size of 1500 bytes / MTU can vary, but seems to the most common for internet networking. Signed-off-by: Daniel Tschlatscher <d.tschlatsc...@proxmox.com> --- src/PMG/API2/Tasks.pm | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/src/PMG/API2/Tasks.pm b/src/PMG/API2/Tasks.pm index 598fb4d..20f6f96 100644 --- a/src/PMG/API2/Tasks.pm +++ b/src/PMG/API2/Tasks.pm @@ -5,6 +5,7 @@ use warnings; use POSIX; use IO::File; use File::ReadBackwards; +use File::stat; use PVE::Tools; use PVE::SafeSyslog; use PVE::RESTHandler; @@ -272,33 +273,20 @@ __PACKAGE__->register_method({ my $restenv = PMG::RESTEnvironment->get(); - my $fh = IO::File->new($filename, "r"); - raise_param_exc({ upid => "no such task - unable to open file - $!" }) if !$fh; + my $start = $param->{start} // 0; + my $limit = $param->{limit} // 50; - my $start = $param->{start} || 0; - my $limit = $param->{limit} || 50; - my $count = 0; - my $line; - while (defined ($line = <$fh>)) { - next if $count++ < $start; - next if $limit <= 0; - chomp $line; - push @$lines, { n => $count, t => $line}; - $limit--; - } + if ($limit == 0) { + # TCP Max Transfer Unit size is 1500, compression for lower numbers has no effect + my $use_compression = stat($filename)->size > 1500; + return PVE::Tools::stream_logfile($filename, $use_compression, $param->{upid}); + } else { + my ($count, $lines) = PVE::Tools::dump_logfile($filename, $start, $limit); - close($fh); + $restenv->set_result_attrib('total', $count); - # HACK: ExtJS store.guaranteeRange() does not like empty array - # so we add a line - if (!$count) { - $count++; - push @$lines, { n => $count, t => "no content"}; + return $lines; } - - $restenv->set_result_attrib('total', $count); - - return $lines; }}); -- 2.30.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel