);
# Home directory in which everything resides
-our $bex_home = $ENV{"BEX_HOME"} // ".";
+our $home = $ENV{"BEX_HOME"} // ".";
# Configuration directory
-our $bex_cf_dir = $bex_home . "/BEX";
+our $cf_dir = $home . "/BEX";
# A file whose contents should be prepended before the job. Should start with the "#!" line.
-our $job_prolog = $bex_cf_dir . '/prolog';
+our $job_prolog = $cf_dir . '/prolog';
# A file whose contents should be appended to the job
-our $job_epilog = $bex_cf_dir . '/epilog';
+our $job_epilog = $cf_dir . '/epilog';
# Keep history of successfully completed jobs
our $keep_history = 1;
return $machines{$mach}->{'Host'} // $mach;
}
-require $bex_cf_dir . '/config';
+require $cf_dir . '/config';
42;
sub save($;$) {
my ($job, $fn) = @_;
- -d "tmp" or mkdir "tmp" or die "Cannot create directory tmp: $!";
- $fn //= 'tmp/' . $job->id;
+ my $tmp = $BEX::Config::home . "/tmp";
+ -d $tmp or mkdir $tmp or die "Cannot create directory $tmp: $!";
+ $fn //= $tmp . '/' . $job->id;
open T, '>', $fn or die "Cannot create $fn: $!";
for my $k (sort grep { /^[A-Z]/ } keys %$job) {
print T "$k: ", $job->{$k}, "\n";
sub new($;$) {
my ($class, $name) = @_;
$name //= 'queue';
- -d $name or die "Queue directory $name does not exist\n";
+ my $path = $BEX::Config::home . '/' . $name;
+ -d $path or die "Queue directory $path does not exist\n";
for my $d ("hosts", "jobs") {
- -d "$name/$d" or mkdir "$name/$d" or die "Cannot create directory $name/$d: $!";
+ -d "$path/$d" or mkdir "$path/$d" or die "Cannot create directory $path/$d: $!";
}
my $queue = {
'Name' => $name,
+ 'Path' => $path,
'MetaCache' => {},
};
return bless $queue;
my $m = join(" ", $t, $mach, $jid, $stat);
$m .= " $msg" if defined $msg;
- my $fh = $queue->{'LogFH'} //= new IO::File $queue->{'Name'} . '/log', '>>' or die "Cannot open log: $!";
+ my $fh = $queue->{'LogFH'} //= new IO::File $queue->{'Path'} . '/log', '>>' or die "Cannot open log: $!";
print $fh "$m\n";
# Append to the per-job log file
sub host_dir($$) {
my ($queue, $machine) = @_;
- return $queue->{'Name'} . '/hosts/' . $machine;
+ return $queue->{'Path'} . '/hosts/' . $machine;
}
sub queue_file($$) {
sub job_file($$) {
my ($queue, $jid) = @_;
- return $queue->{'Name'} . '/jobs/' . $jid. '.job';
+ return $queue->{'Path'} . '/jobs/' . $jid. '.job';
}
sub enqueue($$$) {
sub remove($$;$) {
my ($queue, $machine, $jid, $force_remove) = @_;
if ($BEX::Config::keep_history && !$force_remove) {
- my $s = $queue->{'Name'} . '/hosts/' . $machine;
- my $d = $queue->{'Name'} . '/history/' . $machine;
+ my $s = $queue->{'Path'} . '/hosts/' . $machine;
+ my $d = $queue->{'Path'} . '/history/' . $machine;
File::Path::mkpath($d);
for my $suff ('job', 'stat', 'log') {
my $src = "$s/$jid.$suff";
sub lock_name($$$) {
my ($queue, $machine, $jid) = @_;
- my $lock = $queue->{'Name'};
+ my $lock = $queue->{'Path'};
if (defined $jid) {
$lock .= "/hosts/$machine/$jid.lock";
} elsif (defined $machine) {