Skip to content

Commit

Permalink
improve progess bar for long running jobs
Browse files Browse the repository at this point in the history
  • Loading branch information
sni committed Jun 20, 2023
1 parent 322cca0 commit 8f7ba80
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 12 deletions.
11 changes: 11 additions & 0 deletions lib/Thruk/Controller/error.pm
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,8 @@ sub index {
$arg1 = 9 if $all_down;
}

my $skip_stack_trace = 0;

my $errors = {
'99' => {
'mess' => '',
Expand Down Expand Up @@ -248,6 +250,12 @@ sub index {
'dscr' => 'When authenticating by the secret key via X-Thruk-Auth-Key header, you need to set the X-Thruk-Auth-User header as well.',
'code' => 400, # bad request
},
'29' => {
'mess' => 'Background Job Canceled',
'dscr' => 'Background Job has been canceled',
'code' => 410, # gone
'skip_stack_trace' => 1,
},
};

$arg1 = 0 unless defined $errors->{$arg1}->{'mess'};
Expand All @@ -256,6 +264,7 @@ sub index {
$c->stash->{errorDescription} = $errors->{$arg1}->{'dscr'};
$c->stash->{errorDetails} .= $errors->{$arg1}->{'details'} if defined $errors->{$arg1}->{'details'};
$code = $errors->{$arg1}->{'code'} if defined $errors->{$arg1}->{'code'};
$skip_stack_trace = $errors->{$arg1}->{'skip_stack_trace'} if defined $errors->{$arg1}->{'skip_stack_trace'};
}

my $errorDetails = join("\n", @{$c->error});
Expand Down Expand Up @@ -356,6 +365,8 @@ sub index {
return $c->render(json => $json);
}

$c->stash->{stacktrace} = "" if $skip_stack_trace;

if(Thruk::Base->mode_cli() && (!defined $log_req || $log_req)) {
_error($c->stash->{'raw_error_data'}->{'msg'} // $c->stash->{errorMessage});
_error($c->stash->{'raw_error_data'}->{'descr'} // $c->stash->{errorDescription});
Expand Down
12 changes: 9 additions & 3 deletions lib/Thruk/Utils/External.pm
Original file line number Diff line number Diff line change
Expand Up @@ -502,6 +502,7 @@ sub get_result {

my $out = Thruk::Utils::IO::saferead($dir."/stdout") // '';
my $err = Thruk::Utils::IO::saferead($dir."/stderr") // '';
my $killed = "";

# remove known harmless errors
$err =~ s|Warning:.*?during\ global\ destruction\.\n||gmx;
Expand All @@ -514,7 +515,10 @@ sub get_result {
my @end;
my $retries = 10;
while($retries > 0) {
if(-f $dir."/stdout") {
if(-f $dir."/killed") {
@end = Time::HiRes::stat($dir."/killed");
$killed = "job has been killed";
} elsif(-f $dir."/stdout") {
@end = Time::HiRes::stat($dir."/stdout");
} elsif(-f $dir."/stderr") {
@end = Time::HiRes::stat($dir."/stderr");
Expand Down Expand Up @@ -565,7 +569,7 @@ sub get_result {
}
}

return($out,$err,$time,$dir,$stash,$rc,$profiles,$start[9],$end[9],$perl_res);
return($out,$err,$time,$dir,$stash,$rc,$profiles,$start[9],$end[9],$perl_res,$killed);
}

##############################################
Expand Down Expand Up @@ -635,7 +639,7 @@ sub job_page {
$c->stash->{template} = 'waiting_for_job.tt';
} else {
# job finished, display result
my($out,$err,$time,$dir,$stash,$rc,$profile) = get_result($c, $job);
my($out,$err,$time,$dir,$stash,$rc,$profile,$start,$end,$perl_res,$killed) = get_result($c, $job);
return $c->detach('/error/index/22') unless defined $dir;
$c->add_profile($profile) if $profile;
if(defined $stash and defined $stash->{'original_url'}) { $c->stash->{'original_url'} = $stash->{'original_url'} }
Expand All @@ -645,6 +649,8 @@ sub job_page {
return($c->detach_error($c->stash->{'raw_error_data'}//$stash->{'error_data'}));
}

return $c->detach('/error/index/29') if $killed;

# other errors
if((defined $err && $err ne '') && (!defined $rc || $rc != 0 || (!$out && !$stash))) {
if($c->req->parameters->{'modal'}) {
Expand Down
29 changes: 20 additions & 9 deletions templates/_progressbar.tt
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,15 @@
[% END %]
<script>
<!--
var last_time_[% pb_options.id %] = 0;
var last_message_[% pb_options.id %] = '';
var last_remaining_[% pb_options.id %] = '';
var last_overmsg_[% pb_options.id %] = '';
var is_loading_[% pb_options.id %] = false;
var is_killed_[% pb_options.id %] = false;
var data_percent_[% pb_options.id %] = Number([% pb_options.percent %]);
var last_time_[% pb_options.id %] = 0;
var last_message_[% pb_options.id %] = '';
var last_remaining_[% pb_options.id %] = '';
var last_overmsg_[% pb_options.id %] = '';
var is_loading_[% pb_options.id %] = false;
var is_killed_[% pb_options.id %] = false;
var data_percent_[% pb_options.id %] = Number([% pb_options.percent %]);
var percent_per_second_[% pb_options.id %] = Number([% pb_options.percent_per_second %]);
var cur_pps_[% pb_options.id %] = percent_per_second_[% pb_options.id %];

// register kill handler if page unloads
jQuery(window).on("beforeunload unload", function() {
Expand Down Expand Up @@ -113,7 +115,7 @@
// update every 2 seconds
if(last_time_[% pb_options.id %] != 0 && datestr%2 != 0 && val < 100) {
last_time_[% pb_options.id %] = last_time_[% pb_options.id %] + 1;
jQuery("#bar_[% pb_options.id %]" ).css("width", ""+(val + [% pb_options.percent_per_second %])+"%");
jQuery("#bar_[% pb_options.id %]" ).css("width", ""+(val + cur_pps_[% pb_options.id %])+"%");
jQuery("#[% pb_options.id %] DIV.job_time").html(Math.round(last_time_[% pb_options.id %]) + "s" + last_message_[% pb_options.id %]);
return;
}
Expand Down Expand Up @@ -167,7 +169,16 @@
[% END %]
return;
} else {
val = val + [% pb_options.percent_per_second %];
var pps = percent_per_second_[% pb_options.id %];
if(val >= 90) {
pps = pps / 10;
} else if(val >= 70) {
pps = pps / 5;
} else if(val >= 50) {
pps = pps / 2;
}
val = val + pps;
cur_pps_[% pb_options.id %] = pps;
jQuery("#bar_[% pb_options.id %]").css("width", ""+val+"%");
data_percent_[% pb_options.id %] = val;
}
Expand Down

0 comments on commit 8f7ba80

Please sign in to comment.