[Bio] / FigKernelScripts / install_rast_batch.pl Repository:
ViewVC logotype

View of /FigKernelScripts/install_rast_batch.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (download) (as text) (annotate)
Mon Nov 5 22:47:56 2007 UTC (12 years ago) by olson
Branch: MAIN
CVS Tags: mgrast_dev_08112011, rast_rel_2009_05_18, mgrast_dev_08022011, rast_rel_2014_0912, rast_rel_2008_06_18, myrast_rel40, rast_rel_2008_06_16, mgrast_dev_05262011, rast_rel_2008_12_18, mgrast_dev_04082011, rast_rel_2008_07_21, rast_rel_2010_0928, rast_2008_0924, mgrast_version_3_2, mgrast_dev_12152011, rast_rel_2008_04_23, mgrast_dev_06072011, rast_rel_2008_09_30, rast_rel_2009_0925, rast_rel_2010_0526, rast_rel_2014_0729, mgrast_dev_02212011, rast_rel_2010_1206, mgrast_release_3_0, mgrast_dev_03252011, rast_rel_2010_0118, mgrast_rel_2008_0924, mgrast_rel_2008_1110_v2, rast_rel_2009_02_05, rast_rel_2011_0119, mgrast_rel_2008_0625, mgrast_release_3_0_4, mgrast_release_3_0_2, mgrast_release_3_0_3, mgrast_release_3_0_1, mgrast_dev_03312011, mgrast_release_3_1_2, mgrast_release_3_1_1, mgrast_release_3_1_0, mgrast_dev_04132011, rast_rel_2008_10_09, mgrast_dev_04012011, rast_release_2008_09_29, mgrast_rel_2008_0806, mgrast_rel_2008_0923, mgrast_rel_2008_0919, rast_rel_2009_07_09, rast_rel_2010_0827, mgrast_rel_2008_1110, myrast_33, rast_rel_2011_0928, rast_rel_2008_09_29, mgrast_rel_2008_0917, rast_rel_2008_10_29, mgrast_dev_04052011, mgrast_dev_02222011, rast_rel_2009_03_26, mgrast_dev_10262011, rast_rel_2008_11_24, rast_rel_2008_08_07, HEAD
Changes since 1.3: +12 -6 lines
more fixes

#
# Install a batch of RAST jobs.
#
# We are given a file containing the pathnames to the job directories. Each is given a
# little bit of sanity checking (does it exist? Does it already exist in the seed?)
#
# If all is OK, then we go ahead and do the actual install.
#

use strict;
use FileHandle;
use POSIX;
use FIG;
use FIG_Config;

my $user = "BobO";

my $usage = "install_rast_batch [-show-replacements] [-install] [-check] [-pchs] jobfile install-log";

my $check_only;
my $pchs_only;
my $install;
my $show_replacements;

$ENV{DBKERNEL_DEFER_VACUUM} = 1;

while ((@ARGV > 0) && ($ARGV[0] =~ /^-/))
{
    my $arg = shift @ARGV;
    if ($arg =~ /^-check/i)
    {
	$check_only++;
    }
    elsif ($arg =~ /^-pchs/i)
    {
	$pchs_only++;
    }
    elsif ($arg =~ /^-show-replacements/i)
    {
	$show_replacements++;
    }
    elsif ($arg =~ /^-install/i)
    {
	$install++;
    }
    else
    {
	die "Invalid argument $arg. Usage: $usage";
    }
}

@ARGV == 2 or die $usage;

my $jobfile = shift;
my $logfile = shift;

open(JF, "<$jobfile") or die "Cannot open $jobfile: $!";

open(LOG, ">>$logfile") or die "Cannot write $logfile: $!";
LOG->autoflush(1);

my @jobs;
my $errs;
while (defined(my $jobdir = <JF>))
{
    chomp $jobdir;

    if (! -d $jobdir)
    {
	warn "Job directory $jobdir is missing\n";
	$errs++;
	next;
    }

    my $genome = &FIG::file_head("$jobdir/GENOME_ID");
    chomp $genome;

    my $genome_name = &FIG::file_head("$jobdir/GENOME");
    chomp $genome_name;

    if ($genome eq '' or $genome_name eq '')
    {
	warn "Missing genome info for $jobdir\n";
	$errs++;
	next;
    }

    my $orgdir = "$jobdir/rp/$genome";

    if (! -d $orgdir)
    {
	warn "Job $jobdir is missing its genome driectory $orgdir\n";
	$errs++;
	next;
    }

    #
    # Check for existing SEED org.
    #

    if (-d "$FIG_Config::organisms/$genome" and not $show_replacements)
    {
	warn "Job $jobdir is already installed in the SEED\n";
	$errs++;
	next;
    }

    push(@jobs, [$jobdir, $orgdir, $genome, $genome_name]);
}

if ($errs)
{
    die "Aborting, $errs errors encountered\n";
}

if ($check_only)
{
    print "Sanity check suceeeds\n";
    print "Would install:\n";
    
    for my $job (@jobs)
    {
	my($jobdir, $orgdir, $genome, $genome_name) = @$job;
	
	print "$genome $genome_name from $orgdir\n";
    }
    exit 0;
}

#
# Go ahead and start installs.
#

if ($show_replacements)
{
    show_replacements(\@jobs, $show_replacements > 1);
}


if ($pchs_only)
{
    install_pchs(\@jobs);
}
elsif ($install)
{
    install_genomes(\@jobs);
}
exit;

sub show_replacements
{
    my($jobs, $show_cmd) = @_;
    
    for my $job (@$jobs)
    {
	my($jobdir, $orgdir, $genome, $genome_name) = @$job;

	my $repl = &FIG::file_head("$orgdir/REPLACES", 1);

	if ($repl)
	{
	    chomp $repl;
	    if ($show_cmd)
	    {
		print "fig mark_deleted_genomes $user $repl\n";
	    }
	    else
	    {
		print "$repl replaced by $genome $genome_name\n";
	    }
	}
    }
}
	    
	
sub install_genomes
{
    my($jobs) = @_;
    
    log_output("beginning installation\n");
    
    for my $job (@$jobs)
    {
	my($jobdir, $orgdir, $genome, $genome_name) = @$job;
	
	log_output("Installing $genome $genome_name from $orgdir\n");
	
	my $cmd = "fig add_genome $user $orgdir";
	
	log_output("$cmd\n");
	
	if (!open(P, "$cmd 2>&1 |"))
	{
	    log_output("Cannot open pipe from $cmd: $!\n");
	    die "Cannot open pipe from $cmd: $!";
	}
	while (<P>)
	{
	    log_output($_);
	}
	
	my $res = close(P);
	if (!$res)
	{
	    if ($!)
	    {
		my $er = $!;
		log_output("Error closing pipe: $er\n");
		die "Error closing pipe: $er\n";
	    }
	    
	    my($exitcode, $signal, $msg) = &FIG::interpret_error_code($?);
	    log_output("Error exit, exitcode=$exitcode, signal_$signal, msg=$msg\n");
	    die "Error exit, exitcode=$exitcode, signal_$signal, msg=$msg\n";
	}
	
	log_output("Successfully installed $genome $genome_name from $orgdir\n");
    }
}

sub install_pchs
{
    my($jobs) = @_;
    
    log_output("beginning installation of pchs\n");

    for my $job (@$jobs)
    {
	my($jobdir, $orgdir, $genome, $genome_name) = @$job;

	log_output("Installing pchs for $genome $genome_name from $orgdir\n");

	my $cmd = "install_new_coupling_data -jobdir $jobdir";
	
	log_output("$cmd\n");
	
	if (!open(P, "$cmd 2>&1 |"))
	{
	    log_output("Cannot open pipe from $cmd: $!\n");
	    die "Cannot open pipe from $cmd: $!";
	}
	while (<P>)
	{
	    log_output($_);
	}
	
	my $res = close(P);
	if (!$res)
	{
	    if ($!)
	    {
		my $er = $!;
		log_output("Error closing pipe: $er\n");
		die "Error closing pipe: $er\n";
	    }
	    
	    my($exitcode, $signal, $msg) = &FIG::interpret_error_code($?);
	    log_output("Error exit, exitcode=$exitcode, signal_$signal, msg=$msg\n");
	    die "Error exit, exitcode=$exitcode, signal_$signal, msg=$msg\n";
	}
	
	log_output("Successfully installed pchs for $genome $genome_name from $orgdir\n");
	my $cmd = "load_coupling $genome";
	
	log_output("$cmd\n");
	
	if (!open(P, "$cmd 2>&1 |"))
	{
	    log_output("Cannot open pipe from $cmd: $!\n");
	    die "Cannot open pipe from $cmd: $!";
	}
	while (<P>)
	{
	    log_output($_);
	}
	
	my $res = close(P);
	if (!$res)
	{
	    if ($!)
	    {
		my $er = $!;
		log_output("Error closing pipe: $er\n");
		die "Error closing pipe: $er\n";
	    }
	    
	    my($exitcode, $signal, $msg) = &FIG::interpret_error_code($?);
	    log_output("Error exit, exitcode=$exitcode, signal_$signal, msg=$msg\n");
	    die "Error exit, exitcode=$exitcode, signal_$signal, msg=$msg\n";
	}
	
	log_output("loaded coupling data for $genome $genome_name from $orgdir\n");
    }
    
}
    
sub log_output
{
    my $msg = join(" ", @_);

    my $ts = strftime("%Y-%m-%d %H:%M:%S", localtime);

    $msg = "$ts $msg";
    print $msg;
    print LOG $msg;
}

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3