forked from lix-project/hydra
Stream logs if possible and remove size limit
This commit is contained in:
parent
f5548dc225
commit
0da08df4eb
|
@ -136,9 +136,12 @@ sub showLog {
|
||||||
|
|
||||||
notFound($c, "The build log of derivation ‘$drvPath’ is not available.") unless defined $logPath;
|
notFound($c, "The build log of derivation ‘$drvPath’ is not available.") unless defined $logPath;
|
||||||
|
|
||||||
my $size = stat($logPath)->size;
|
# Don't send logs that we can't stream.
|
||||||
error($c, "This build log is too big to display ($size bytes).")
|
my $size = stat($logPath)->size; # FIXME: not so meaningful for compressed logs
|
||||||
if $size >= 64 * 1024 * 1024;
|
error($c, "This build log is too big to display ($size bytes).") unless
|
||||||
|
$mode eq "raw"
|
||||||
|
|| (($mode eq "tail" || $mode eq "tail-reload") && $logPath !~ /\.bz2$/)
|
||||||
|
|| $size < 64 * 1024 * 1024;
|
||||||
|
|
||||||
if (!$mode) {
|
if (!$mode) {
|
||||||
# !!! quick hack
|
# !!! quick hack
|
||||||
|
@ -150,12 +153,9 @@ sub showLog {
|
||||||
}
|
}
|
||||||
|
|
||||||
elsif ($mode eq "raw") {
|
elsif ($mode eq "raw") {
|
||||||
if ($logPath !~ /.bz2$/) {
|
$c->stash->{logPath} = $logPath;
|
||||||
$c->serve_static_file($logPath);
|
$c->forward('Hydra::View::NixLog');
|
||||||
} else {
|
return;
|
||||||
$c->stash->{'plain'} = { data => (scalar logContents($logPath)) || " " };
|
|
||||||
$c->forward('Hydra::View::Plain');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
elsif ($mode eq "tail-reload") {
|
elsif ($mode eq "tail-reload") {
|
||||||
|
|
|
@ -352,8 +352,8 @@ sub log :Local :Args(1) {
|
||||||
my $logPath = findLog($c, $path, @outpaths);
|
my $logPath = findLog($c, $path, @outpaths);
|
||||||
notFound($c, "The build log of $path is not available.") unless defined $logPath;
|
notFound($c, "The build log of $path is not available.") unless defined $logPath;
|
||||||
|
|
||||||
$c->stash->{'plain'} = { data => (scalar logContents($logPath)) || " " };
|
$c->stash->{logPath} = $logPath;
|
||||||
$c->forward('Hydra::View::Plain');
|
$c->forward('Hydra::View::NixLog');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
30
src/lib/Hydra/View/NixLog.pm
Normal file
30
src/lib/Hydra/View/NixLog.pm
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
package Hydra::View::NixLog;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use base qw/Catalyst::View/;
|
||||||
|
use Hydra::Helper::CatalystUtils;
|
||||||
|
|
||||||
|
sub process {
|
||||||
|
my ($self, $c) = @_;
|
||||||
|
|
||||||
|
my $logPath = $c->stash->{logPath};
|
||||||
|
|
||||||
|
$c->response->content_type('text/plain');
|
||||||
|
|
||||||
|
my $fh = new IO::Handle;
|
||||||
|
|
||||||
|
if ($logPath =~ /\.bz2$/) {
|
||||||
|
open $fh, "bzip2 -dc < '$logPath' |" or die;
|
||||||
|
} else {
|
||||||
|
open $fh, "<$logPath" or die;
|
||||||
|
}
|
||||||
|
binmode($fh);
|
||||||
|
|
||||||
|
setCacheHeaders($c, 365 * 24 * 60 * 60);
|
||||||
|
|
||||||
|
$c->response->body($fh);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
Loading…
Reference in a new issue