HPC-Runner-Command/lib/HPC/Runner/Command/submit_jobs.pm
package HPC::Runner::Command::submit_jobs;
=head1 HPC::Runner::Command::submit_jobs
Call the hpcrunner.pl submit_jobs command
hpcrunner.pl submit_jobs -h
=cut
use MooseX::App::Command;
use Moose::Util qw/apply_all_roles/;
use File::Spec;
use File::Slurp;
use DateTime;
extends 'HPC::Runner::Command';
with 'HPC::Runner::Command::submit_jobs::Utils::Plugin';
with 'HPC::Runner::Command::execute_job::Utils::Plugin';
with 'HPC::Runner::Command::Logger::JSON';
with 'HPC::Runner::Command::Utils::Base';
with 'HPC::Runner::Command::Utils::Log';
with 'BioSAILs::Integrations::Github';
with 'BioSAILs::Utils::CacheUtils';
with 'HPC::Runner::Command::submit_jobs::Utils::Scheduler';
with 'HPC::Runner::Command::submit_jobs::Logger::JSON';
command_short_description 'Submit jobs to the HPC system';
command_long_description 'This job parses your input file and writes out one or
more templates to submit to the scheduler of your choice (SLURM, PBS, etc)';
=head2 Attributes
=head2 Subroutines
=cut
option 'dry_run' => (
is => 'rw',
isa => 'Bool',
default => 0,
documentation => 'Do a dry run - do not submit to the scheduler.',
cmd_aliases => ['dr'],
);
sub BUILD {
my $self = shift;
if ( $self->dry_run ) {
$self->hpc_plugins( ['Dummy'] );
}
$self->gen_load_plugins;
$self->hpc_load_plugins;
if ( $self->use_batches ) {
apply_all_roles( $self,
'HPC::Runner::Command::submit_jobs::Utils::Scheduler::UseBatches' );
}
else {
apply_all_roles( $self,
'HPC::Runner::Command::submit_jobs::Utils::Scheduler::UseArrays' );
}
}
sub execute {
my $self = shift;
$self->write_cache_files;
$self->git_things;
$self->app_log->info('Parsing input file');
$self->parse_file_slurm;
$self->create_json_submission;
$self->app_log->info('Submitting jobs');
$self->iterate_schedule;
$self->update_json_submission;
$self->app_log->info('Your jobs have been submitted.');
##Rolling this back until a future release
$self->app_log->info('Experimental! For status updates please run:');
$self->app_log->info('hpcrunner.pl stats');
$self->app_log->info(
'To get status updates for only this submission please run:');
$self->app_log->info( 'hpcrunner.pl stats --data_dir ' . $self->data_dir );
}
##TODO Combine this with the BioX cache file functions
sub write_cache_files {
my $self = shift;
my $cmd_line_opts = $self->print_cmd_line_opts;
my $config_data = $self->print_config_data;
my $dt = DateTime->now( time_zone => 'local' );
$dt = "$dt";
$dt =~ s/:/-/g;
my $cache_base = $self->infile->basename;
$self->cache_file(
File::Spec->catdir(
$self->cache_dir, '.hpcrunner-cache',
$cache_base . '--' . $dt . '.cache'
)
);
write_file($self->cache_file, $cmd_line_opts);
write_file($self->cache_file, {append => 1}, $config_data);
my $data = read_file($self->infile);
write_file($self->cache_file, {append => 1}, $data);
}
1;