Skip to content

Commit

Permalink
Merge pull request #1400 from SuperSandro2000/feat/buildlogs-zstd
Browse files Browse the repository at this point in the history
CompressLog: Add zstd compression
  • Loading branch information
Mic92 committed Aug 21, 2024
2 parents 4bb2f08 + b2b2d6e commit 9ee3c6a
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 8 deletions.
10 changes: 9 additions & 1 deletion doc/manual/src/plugins/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,22 @@ Sets CircleCI status.

## Compress build logs

Compresses build logs after a build with bzip2.
Compresses build logs after a build with bzip2 or zstd.

### Configuration options

- `compress_build_logs`

Enable log compression

- `compress_build_logs_compression`

Which compression format to use. Valid values are bzip2 (default) and zstd.

- `compress_build_logs_silent`

Whether to compress logs silently.

### Example

```xml
Expand Down
10 changes: 8 additions & 2 deletions nixos-modules/hydra.nix
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,7 @@ in
requires = [ "hydra-init.service" ];
after = [ "hydra-init.service" ];
restartTriggers = [ hydraConf ];
path = [ pkgs.zstd ];
environment = env // {
PGPASSFILE = "${baseDir}/pgpass-queue-runner"; # grrr
HYDRA_DBI = "${env.HYDRA_DBI};application_name=hydra-notify";
Expand Down Expand Up @@ -458,10 +459,15 @@ in
# logs automatically after a step finishes, but this doesn't work
# if the queue runner is stopped prematurely.
systemd.services.hydra-compress-logs =
{ path = [ pkgs.bzip2 ];
{ path = [ pkgs.bzip2 pkgs.zstd ];
script =
''
find ${baseDir}/build-logs -type f -name "*.drv" -mtime +3 -size +0c | xargs -r bzip2 -v -f
set -eou pipefail
compression=$(sed -nr 's/compress_build_logs_compression = ()/\1/p' ${baseDir}/hydra.conf)
if [[ $compression == zstd ]]; then
compression="zstd --rm"
fi
find ${baseDir}/build-logs -type f -name "*.drv" -mtime +3 -size +0c | xargs -r $compression --force --quiet
'';
startAt = "Sun 01:45";
};
Expand Down
3 changes: 3 additions & 0 deletions src/lib/Hydra/Helper/Nix.pm
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,9 @@ sub getDrvLogPath {
for ($fn . $bucketed, $fn . $bucketed . ".bz2") {
return $_ if -f $_;
}
for ($fn . $bucketed, $fn . $bucketed . ".zst") {
return $_ if -f $_;
}
return undef;
}

Expand Down
21 changes: 17 additions & 4 deletions src/lib/Hydra/Plugin/CompressLog.pm
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,24 @@ use Hydra::Helper::CatalystUtils;
sub stepFinished {
my ($self, $step, $logPath) = @_;

my $doCompress = $self->{config}->{'compress_build_logs'} // "1";
my $doCompress = $self->{config}->{'compress_build_logs'} // '1';
my $silent = $self->{config}->{'compress_build_logs_silent'} // '0';
my $compression = $self->{config}->{'compress_build_logs_compression'} // 'bzip2';

if ($doCompress eq "1" && -e $logPath) {
print STDERR "compressing ‘$logPath’...\n";
system("bzip2", "--force", $logPath);
if (not -e $logPath or $doCompress ne "1") {
return;
}

if ($silent ne '1') {
print STDERR "compressing '$logPath' with $compression...\n";
}

if ($compression eq 'bzip2') {
system('bzip2', '--force', $logPath);
} elsif ($compression eq 'zstd') {
system('zstd', '--rm', '--quiet', '-T0', $logPath);
} else {
print STDERR "unknown compression type '$compression'\n";
}
}

Expand Down
5 changes: 4 additions & 1 deletion src/lib/Hydra/View/NixLog.pm
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ sub process {

my $tail = int($c->stash->{tail} // "0");

if ($logPath =~ /\.bz2$/) {
if ($logPath =~ /\.zst$/) {
my $doTail = $tail ? "| tail -n '$tail'" : "";
open($fh, "-|", "zstd -dc < '$logPath' $doTail") or die;
} elsif ($logPath =~ /\.bz2$/) {
my $doTail = $tail ? "| tail -n '$tail'" : "";
open($fh, "-|", "bzip2 -dc < '$logPath' $doTail") or die;
} else {
Expand Down

0 comments on commit 9ee3c6a

Please sign in to comment.