Jobs interface stuff.

master
Manager Bot 3 years ago
parent 599df971c0
commit 8cc2a70d40
  1. 5
      Web/lib/MJB/Web/Controller/Admin.pm
  2. 30
      Web/templates/_base/jobs.html.ep
  3. 3
      Web/templates/_base/jobs/_milestones/update_ssl_certs.html.ep
  4. 25
      Web/templates/_base/jobs/active.html.ep
  5. 24
      Web/templates/_base/jobs/failed.html.ep
  6. 21
      Web/templates/_base/jobs/finished.html.ep
  7. 9
      Web/templates/_base/jobs/inactive.html.ep
  8. 15
      Web/templates/_base/jobs/milestone.html.ep
  9. 11
      Web/templates/_base/jobs/view_logs.html.ep
  10. 148
      Web/templates/admin/jobs.html.ep

@ -188,7 +188,10 @@ sub do_domain_remove ( $c ) {
}
sub do_update_ssl ( $c ) {
my $id = $c->minion->enqueue( 'update_ssl_certs', [ ], { queue => 'certbot' } );
my $id = $c->minion->enqueue( 'update_ssl_certs', [ ], {
queue => 'certbot',
notes => { '_bid_0' => 1 },
});
$c->db->admin_jobs->create({ minion_job_id => $id });
$c->flash( confirmation => "Scheduled job to update SSL certs." );

@ -0,0 +1,30 @@
%# Job Panel %
% my $index = 0;
% foreach my $build ( @{$jobs} ) {
% $index++;
% if ( my $build_job = $c->minion->job( $build->minion_job_id ) ) {
% my $job = $build_job->info;
% if ( $job->{state} eq 'finished' ) {
%= include '_base/jobs/finished', job => $job, index => $index, date => $build->created_at->strftime( "%F %T" )
% } elsif ( $job->{state} eq 'inactive' ) {
%= include '_base/jobs/inactive', job => $job, date => $build->created_at->strftime( "%T %F" )
% } elsif ( $job->{state} eq 'failed' ) {
%= include '_base/jobs/failed', job => $job, index => $index, date => $build->created_at->strftime( "%F %T" )
% } elsif ( $job->{state} eq 'active' ) {
%= include '_base/jobs/active', job => $job, index => $index, date => $build->created_at->strftime( "%F %T" )
% } else {
Job in unknown state: <%= $build->{job_id} %>
%= $job->{state}
% }
% } else {
Job not found: <%= $build->{job_id} %>
% }
% }

@ -0,0 +1,3 @@
%= include '_base/jobs/milestone', milestone => { is_complete => $job->{notes}->{is_renew_done}, text => 'Renewing SSL certificates with certbot' };
%= include '_base/jobs/milestone', milestone => { is_complete => $job->{notes}->{is_sync_done}, text => 'Syncing SSL certificates with web servers' };

@ -0,0 +1,25 @@
<div class="card mt-4">
<div class="card-header alert-warning">
<div class="spinner-grow spinner-grow-sm" role="status">
<span class="visually-hidden">Building...</span>
</div>
Building job <%= $job->{id} %>/<%= $job->{task} %>... (Queued: <%= $date %>)
</div>
<div id="job_window_<%= $job->{id} %>" class="card-body">
%= include '_base/jobs/_milestones/' . $job->{notes}->{_mds_template}, job => $job
<hr />
<div id="job_log_window_<%= $job->{id} %>" class="card-body">
<hr />
<pre>
% for my $line ( @{$job->{notes}{logs}} ) {
<%= "$line\n" =%>
% }
</pre>
</div>
</div>
</div>

@ -0,0 +1,24 @@
<div class="card mt-4">
<div class="card-header alert-warning">
%= include '_svg/failed'
Job <%= $job->{id} %>/<%= $job->{task} %> failed. (Queued: <%= $date %>)
<button class="btn" data-bs-toggle="collapse" data-bs-target="#job_window_<%= $job->{id} %>">
%= include '_svg/chevron'
</button>
</div>
<div id="job_window_<%= $job->{id} %>" class="card-body <%= $index == 1 ? '' : 'collapse' %>">
%= include '_base/jobs/_milestones/' . $job->{notes}->{_mds_template}, job => $job
<hr />
% if ( ! ref $job->{result} ) {
<p class="text-danger"><strong>System Error: <%= $job->{result} %></strong></p>
% } else {
<p class="text-danger"><strong>Error: <%= $job->{result}{error} %></strong></p>
% }
%= include '_base/jobs/view_logs', job => $job
</div>
</div>

@ -0,0 +1,21 @@
<div class="card mt-4">
<div class="card-header alert-success">
%= include '_svg/checkmark'
Job <%= $job->{id} %>/<%= $job->{task} %> completed successfully. (Queued: <%= $date %>)
<button class="btn" data-bs-toggle="collapse" data-bs-target="#job_window_<%= $job->{id} %>">
%= include '_svg/chevron'
</button>
</div>
<div id="job_window_<%= $job->{id} %>" class="card-body <%= $index == 1 ? '' : 'collapse' %>">
%= include '_base/jobs/_milestones/' . $job->{notes}->{_mds_template}, job => $job
<hr />
%= include '_base/jobs/view_logs', job => $job
</div>
</div>

@ -0,0 +1,9 @@
<div class="card mb-4 alert-warning">
<div class="card-header">
<div class="spinner-grow spinner-grow-sm" role="status">
<span class="visually-hidden">Waiting...</span>
</div>
Job <%= $job->{id} %>/<%= $job->{task} %> pending build. (Queued: <%= $date %>)
</div>
</div>

@ -0,0 +1,15 @@
<!-- Begin dashboard/_website/milestone -->
<div class="card mb-4">
<div class="card-header">
% if ( $milestone->{is_complete} && $milestone->{is_complete} == 1 ) {
<span class="text-success" >
%= include '_svg/checkmark'
</span>
% } else {
%= include '_svg/loading'
% }
<%= $milestone->{text} %>
</div>
</div>
<!-- End dashboard/_website/milestone -->

@ -0,0 +1,11 @@
<button class="btn btn-sm btn-primary" data-bs-toggle="collapse" data-bs-target="#job_log_window_<%= $job->{id} %>">View Logs</button>
<div id="job_log_window_<%= $job->{id} %>" class="card-body collapse">
<hr />
<pre>
% for my $line ( @{$job->{notes}{logs}} ) {
<%= "$line\n" =%>
% }
</pre>
</div>

@ -1,152 +1,12 @@
% layout 'standard', title => 'Dashboard', sb_active => 'admin';
%# if ( $c->minion->jobs({ states => [ 'inactive', 'active' ], notes => [ '_bid_' . $blog->id ] } )->total >= 1 ) {
%# $c->stash->{http_refresh} = 5;
%# }
% if ( $c->minion->jobs({ states => [ 'inactive', 'active' ], notes => [ '_bid_0' ] } )->total >= 1 ) {
% $c->stash->{http_refresh} = 5;
% }
%= include 'admin/_nav', page => 'jobs'
%= include '_base/status_window';
% if ( $c->stash->{success} ) {
<div style="margin-top: 2em" class="alert alert-success" role="alert">
<%= $c->stash->{success_message} %>
</div>
% }
% if ( $c->stash->{errors} ) {
<div style="margin-top: 2em" class="alert alert-danger" role="alert">
There were errors with your request that could not be resolved:
<ul>
% for my $error ( @{$c->stash->{errors}} ) {
<li><%= $error %></li>
% }
</ul>
</div>
% }
%# Job Panel %
% my $index = 0;
% foreach my $build ( $c->db->admin_jobs->all ) {
% $index++;
% if ( my $build_job = $c->minion->job( $build->minion_job_id ) ) {
% my $job = $build_job->info;
% if ( $job->{state} eq 'finished' ) {
<div class="card mt-4">
<div class="card-header alert-success">
%= include '_svg/checkmark'
Build job <%= $build->{id} %>/<%= $job->{task} %> completed successfully. (Queued: <%= $build->{date} %>)
<button class="btn" data-bs-toggle="collapse" data-bs-target="#job_window_<%= $job->{id} %>">
%= include '_svg/chevron'
</button>
</div>
<div id="job_window_<%= $job->{id} %>" class="card-body <%= $index == 1 ? '' : 'collapse' %>">
%= include 'dashboard/_milestone', milestone => { is_complete => $job->{notes}->{is_deploy_complete}, text => 'Deploy to Webserver' };
%= include 'dashboard/_milestone', milestone => { is_complete => $job->{notes}->{is_build_complete}, text => 'Build Website' };
%= include 'dashboard/_milestone', milestone => { is_complete => $job->{notes}->{is_clone_complete}, text => 'Clone Repo & Check Settings' };
<hr />
<button class="btn btn-sm btn-primary" data-bs-toggle="collapse" data-bs-target="#job_log_window_<%= $job->{id} %>">View Logs</button>
<div id="job_log_window_<%= $job->{id} %>" class="card-body collapse">
<hr />
<pre>
% for my $line ( @{$job->{notes}{logs}} ) {
<%= "$line\n" =%>
% }
</pre>
</div>
</div>
</div>
% } elsif ( $job->{state} eq 'inactive' ) {
<div class="card mb-4 alert-warning">
<div class="card-header">
<div class="spinner-grow spinner-grow-sm" role="status">
<span class="visually-hidden">Waiting...</span>
</div>
Build <%= $build->{id} %> pending build. (Queued: <%= $build->{date} %>)
</div>
</div>
% } elsif ( $job->{state} eq 'failed' ) {
<div class="card mt-4">
<div class="card-header alert-warning">
%= include '_svg/failed'
Build <%= $build->{id} %> failed. (Queued: <%= $build->{date} %>)
<button class="btn" data-bs-toggle="collapse" data-bs-target="#job_window_<%= $job->{id} %>">
%= include '_svg/chevron'
</button>
</div>
<div id="job_window_<%= $job->{id} %>" class="card-body <%= $index == 1 ? '' : 'collapse' %>">
%= include 'dashboard/_website/milestone', milestone => { is_complete => $job->{notes}->{is_deploy_complete}, text => 'Deploy to Webserver' };
%= include 'dashboard/_website/milestone', milestone => { is_complete => $job->{notes}->{is_build_complete}, text => 'Build Website' };
%= include 'dashboard/_website/milestone', milestone => { is_complete => $job->{notes}->{is_clone_complete}, text => 'Clone Repo & Check Settings' };
%= include '_base/jobs', jobs => [ $c->db->admin_jobs( { }, { order_by => { -desc => 'created_at' } } )->all ]
<hr />
% if ( ! ref $job->{result} ) {
<p class="text-danger"><strong>System Error: <%= $job->{result} %></strong></p>
% } else {
<p class="text-danger"><strong>Error: <%= $job->{result}{error} %></strong></p>
% }
<button class="btn" data-bs-toggle="collapse" data-bs-target="#job_log_window_<%= $job->{id} %>">View Logs</button>
<div id="job_log_window_<%= $job->{id} %>" class="card-body collapse">
<hr />
<pre>
% for my $line ( @{$job->{notes}{logs}} ) {
<%= "$line\n" =%>
% }
</pre>
</div>
</div>
</div>
% } elsif ( $job->{state} eq 'active' ) {
<div class="card mt-4">
<div class="card-header alert-warning">
<div class="spinner-grow spinner-grow-sm" role="status">
<span class="visually-hidden">Building...</span>
</div>
Building job <%= $build->{id} %>/<%= $job->{task} %>... (Queued: <%= $build->{date} %>)
</div>
<div id="job_window_<%= $job->{id} %>" class="card-body">
%= include 'dashboard/_milestone', milestone => { is_complete => $job->{notes}->{is_deploy_complete}, text => 'Deploy to Webserver' };
%= include 'dashboard/_milestone', milestone => { is_complete => $job->{notes}->{is_build_complete}, text => 'Build Website' };
%= include 'dashboard/_milestone', milestone => { is_complete => $job->{notes}->{is_clone_complete}, text => 'Clone Repo & Check Settings' };
<hr />
<div id="job_log_window_<%= $job->{id} %>" class="card-body">
<hr />
<pre>
% for my $line ( @{$job->{notes}{logs}} ) {
<%= "$line\n" =%>
% }
</pre>
</div>
</div>
</div>
% } else {
Job in unknown state: <%= $build->{job_id} %>
%= $job->{state}
% }
% } else {
Job not found: <%= $build->{job_id} %>
% }
% }

Loading…
Cancel
Save