2008-11-25 11:01:42 +00:00
|
|
|
package Hydra::View::TT;
|
2008-10-28 10:19:31 +00:00
|
|
|
|
|
|
|
use strict;
|
2021-08-19 16:36:43 -04:00
|
|
|
use warnings;
|
2008-10-28 10:19:31 +00:00
|
|
|
use base 'Catalyst::View::TT';
|
2021-11-22 13:14:01 -05:00
|
|
|
use Template::Plugin::HTML;
|
2013-01-22 22:48:02 +01:00
|
|
|
use Hydra::Helper::Nix;
|
2021-03-09 18:27:34 +01:00
|
|
|
use Time::Seconds;
|
2008-10-28 10:19:31 +00:00
|
|
|
|
2013-01-22 22:48:02 +01:00
|
|
|
__PACKAGE__->config(
|
|
|
|
TEMPLATE_EXTENSION => '.tt',
|
2014-05-01 16:33:25 +02:00
|
|
|
ENCODING => 'utf-8',
|
2013-02-05 14:00:09 +01:00
|
|
|
PRE_CHOMP => 1,
|
|
|
|
POST_CHOMP => 1,
|
2021-11-22 13:14:01 -05:00
|
|
|
expose_methods => [qw/
|
|
|
|
buildLogExists
|
|
|
|
buildStepLogExists
|
|
|
|
jobExists
|
|
|
|
linkToJob
|
|
|
|
linkToJobset
|
|
|
|
linkToProject
|
|
|
|
makeNameLinksForJob
|
|
|
|
makeNameLinksForJobset
|
|
|
|
makeNameTextForJob
|
|
|
|
makeNameTextForJobset
|
|
|
|
relativeDuration
|
|
|
|
stripSSHUser
|
|
|
|
/]);
|
2008-10-28 10:19:31 +00:00
|
|
|
|
2013-08-30 13:53:25 +00:00
|
|
|
sub buildLogExists {
|
|
|
|
my ($self, $c, $build) = @_;
|
2017-04-05 17:55:56 +02:00
|
|
|
return 1 if defined $c->config->{log_prefix};
|
2013-08-30 13:53:25 +00:00
|
|
|
my @outPaths = map { $_->path } $build->buildoutputs->all;
|
|
|
|
return defined findLog($c, $build->drvpath, @outPaths);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub buildStepLogExists {
|
|
|
|
my ($self, $c, $step) = @_;
|
2017-04-05 17:55:56 +02:00
|
|
|
return 1 if defined $c->config->{log_prefix};
|
2013-08-30 13:53:25 +00:00
|
|
|
my @outPaths = map { $_->path } $step->buildstepoutputs->all;
|
|
|
|
return defined findLog($c, $step->drvpath, @outPaths);
|
2013-04-26 13:23:34 +02:00
|
|
|
}
|
|
|
|
|
2021-03-09 18:27:34 +01:00
|
|
|
=head2 relativeDuration
|
|
|
|
|
|
|
|
Given an integer of seconds, return an English representation of the
|
|
|
|
duration as a string.
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
=over 1
|
|
|
|
|
|
|
|
=item C<$seconds>
|
|
|
|
|
|
|
|
An integer number of seconds
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=cut
|
|
|
|
sub relativeDuration {
|
|
|
|
my ($self, $c, $seconds) = @_;
|
|
|
|
return Time::Seconds->new($seconds)->pretty();
|
|
|
|
}
|
|
|
|
|
2015-06-17 13:49:18 +02:00
|
|
|
sub stripSSHUser {
|
|
|
|
my ($self, $c, $name) = @_;
|
|
|
|
if ($name =~ /^.*@(.*)$/) {
|
|
|
|
return $1;
|
|
|
|
} else {
|
|
|
|
return $name;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-04-08 18:49:10 +02:00
|
|
|
# Check whether the given job is a member of the most recent jobset
|
|
|
|
# evaluation.
|
|
|
|
sub jobExists {
|
2020-05-27 20:09:36 +02:00
|
|
|
my ($self, $c, $jobset, $jobName) = @_;
|
|
|
|
return defined $jobset->builds->search({ job => $jobName, iscurrent => 1 })->single;
|
2014-04-08 18:49:10 +02:00
|
|
|
}
|
|
|
|
|
2021-11-22 13:14:01 -05:00
|
|
|
=head2 linkToProject
|
|
|
|
|
|
|
|
Given a L<Hydra::Schema::Result::Project>, return a link to the project.
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
=over 3
|
|
|
|
|
|
|
|
=item C<$self>
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$c>
|
|
|
|
Catalyst Context
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$project>
|
|
|
|
|
|
|
|
The L<Hydra::Schema::Result::Project> to link to.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=cut
|
|
|
|
sub linkToProject {
|
|
|
|
my ($self, $c, $project) = @_;
|
|
|
|
|
|
|
|
my $html = Template::Plugin::HTML->new();
|
|
|
|
|
|
|
|
my $projectName = $project->name;
|
|
|
|
my $escapedProjectName = $html->escape($projectName);
|
|
|
|
|
|
|
|
return '<a href="' . $c->uri_for('/project', $projectName) . '">' . $escapedProjectName . '</a>';
|
|
|
|
}
|
|
|
|
|
|
|
|
=head2 linkToJobset
|
|
|
|
|
|
|
|
Given a L<Hydra::Schema::Result::Jobset>, return a link to the jobset
|
|
|
|
and its project in project:jobset notation.
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
=over 3
|
|
|
|
|
|
|
|
=item C<$self>
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$c>
|
|
|
|
Catalyst Context
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$jobset>
|
|
|
|
|
|
|
|
The L<Hydra::Schema::Result::Jobset> to link to.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=cut
|
|
|
|
sub linkToJobset {
|
|
|
|
my ($self, $c, $jobset) = @_;
|
|
|
|
|
|
|
|
my $html = Template::Plugin::HTML->new();
|
|
|
|
|
|
|
|
my $jobsetName = $jobset->name;
|
|
|
|
my $escapedJobsetName = $html->escape($jobsetName);
|
|
|
|
|
|
|
|
return linkToProject($self, $c, $jobset->project) .
|
|
|
|
':<a href="' . $c->uri_for('/jobset', $jobset->project->name, $jobsetName) . '">' . $escapedJobsetName . '</a>';
|
|
|
|
}
|
|
|
|
|
|
|
|
=head2 linkToJobset
|
|
|
|
|
|
|
|
Given a L<Hydra::Schema::Result::Jobset> and L<String> Job name, return
|
|
|
|
a link to the job, jobset, and project in project:jobset:job notation.
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item C<$self>
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$c>
|
|
|
|
Catalyst Context
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$jobset>
|
|
|
|
|
|
|
|
The L<Hydra::Schema::Result::Jobset> to link to.
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$jobName>
|
|
|
|
|
|
|
|
The L<String> job name to link to.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=cut
|
|
|
|
sub linkToJob {
|
|
|
|
my ($self, $c, $jobset, $jobName) = @_;
|
|
|
|
|
|
|
|
my $html = Template::Plugin::HTML->new();
|
|
|
|
|
|
|
|
my $escapedJobName = $html->escape($jobName);
|
|
|
|
|
|
|
|
return linkToJobset($self, $c, $jobset) .
|
|
|
|
':<a href="' . $c->uri_for('/job', $jobset->project->name, $jobset->name, $jobName) . '">' . $escapedJobName . '</a>';
|
|
|
|
}
|
|
|
|
|
|
|
|
=head2 makeNameLinksForJobset
|
|
|
|
|
|
|
|
Given a L<Hydra::Schema::Result::Jobset>, return a link to the jobset's
|
|
|
|
project and a non-link to the jobset in project:jobset notation.
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
=over 3
|
|
|
|
|
|
|
|
=item C<$self>
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$c>
|
|
|
|
Catalyst Context
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$jobset>
|
|
|
|
|
|
|
|
The L<Hydra::Schema::Result::Jobset> to link to.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=cut
|
|
|
|
sub makeNameLinksForJobset {
|
|
|
|
my ($self, $c, $jobset) = @_;
|
|
|
|
|
|
|
|
my $html = Template::Plugin::HTML->new();
|
|
|
|
|
|
|
|
my $escapedJobsetName = $html->escape($jobset->name);
|
|
|
|
|
|
|
|
return linkToProject($self, $c, $jobset->project) . ':' . $escapedJobsetName;
|
|
|
|
}
|
|
|
|
|
|
|
|
=head2 makeNameLinksForJob
|
|
|
|
|
|
|
|
Given a L<Hydra::Schema::Result::Jobset> and L<String> Job name, return
|
|
|
|
a link to the jobset and project, and a non-link to the job in
|
|
|
|
project:jobset:job notation.
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item C<$self>
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$c>
|
|
|
|
Catalyst Context
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$jobset>
|
|
|
|
|
|
|
|
The L<Hydra::Schema::Result::Jobset> to link to.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
|
|
|
|
=item C<$jobName>
|
|
|
|
|
|
|
|
The L<String> job name to link to.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=cut
|
|
|
|
sub makeNameLinksForJob {
|
|
|
|
my ($self, $c, $jobset, $jobName) = @_;
|
|
|
|
|
|
|
|
my $html = Template::Plugin::HTML->new();
|
|
|
|
|
|
|
|
my $escapedJobName = $html->escape($jobName);
|
|
|
|
|
|
|
|
return linkToJobset($self, $c, $jobset) . ':' . $escapedJobName;
|
|
|
|
}
|
|
|
|
|
|
|
|
=head2 makeNameTextForJobset
|
|
|
|
|
|
|
|
Given a L<Hydra::Schema::Result::Jobset>, return the project and
|
|
|
|
jobset in project:jobset notation.
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
=over 3
|
|
|
|
|
|
|
|
=item C<$self>
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$c>
|
|
|
|
Catalyst Context
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$jobset>
|
|
|
|
|
|
|
|
The L<Hydra::Schema::Result::Jobset> to link to.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=cut
|
|
|
|
sub makeNameTextForJobset {
|
|
|
|
my ($self, $c, $jobset) = @_;
|
|
|
|
|
|
|
|
return $jobset->project->name . ":" . $jobset->name;
|
|
|
|
}
|
|
|
|
|
|
|
|
=head2 makeNameTextForJob
|
|
|
|
|
|
|
|
Given a L<Hydra::Schema::Result::Jobset> and L<String> Job name, return
|
|
|
|
the job, jobset, and project in project:jobset:job notation.
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item C<$self>
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$c>
|
|
|
|
Catalyst Context
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item C<$jobset>
|
|
|
|
|
|
|
|
The L<Hydra::Schema::Result::Jobset> to link to.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
|
|
|
|
=item C<$jobName>
|
|
|
|
|
|
|
|
The L<String> job name to link to.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=cut
|
|
|
|
sub makeNameTextForJob {
|
|
|
|
my ($self, $c, $jobset, $jobName) = @_;
|
|
|
|
|
|
|
|
return $jobset->project->name . ":" . $jobset->name . ":" . $jobName;
|
|
|
|
}
|
|
|
|
|
2008-10-28 10:19:31 +00:00
|
|
|
1;
|