Bio-GMOD
view release on metacpan or search on metacpan
GMOD/Admin/Update/WormBase.pm view on Meta::CPAN
sub update {
my ($self,@p) = @_;
my $adaptor = $self->adaptor;
$adaptor->parse_params(@p);
my $version = $adaptor->version;
my $rsync_module = $adaptor->rsync_module;
$self->analyze_logs(-version => $version,
-site => `hostname`);
$self->prepare_tmp_dir();
$self->fetch_acedb(-version => $version);
$self->fetch_elegans_gff(-version => $version);
$self->fetch_briggsae_gff(-version => $version);
$self->fetch_blast_blat(-version => $version);
$self->rsync_software(-module => $rsync_module,
-install_root => '/usr/local/wormbase/');
}
sub fetch_acedb {
my ($self,@p) = @_;
$self->logit(-msg => 'Fetching and installing Acedb',
-emphasis => 1);
my $adaptor = $self->adaptor;
$adaptor->parse_params(@p);
# Version to update to
my $version = $adaptor->version;
# Where to find the database tarballs.
my $databases = $adaptor->database_repository;
# The acedb tarball
my $acedb = sprintf($adaptor->acedb_tarball,$version);
# Local and remote paths
my $remote_path = "$databases/$version/$acedb";
my $local_path = $adaptor->tmp_path . "/$version";
# Make sure there is enough space first
my $disk_space = $adaptor->acedb_disk_space;
$self->check_disk_space(-path => $local_path,
-required => $disk_space,
-component => 'acedb');
$self->mirror(-remote_path => $remote_path,
-local_path => $local_path);
my $acedb_path = $adaptor->acedb_path;
unless ($adaptor->dl_only) {
$self->logit(-msg => "Unpacking and installing $acedb");
chdir($acedb_path);
system("gunzip -c $local_path/$acedb | tar -x --no-same-owner -f -");
unlink($acedb_path . '/elegans');
symlink("elegans_$version",'elegans');
# Adjust permissions
my $command = <<END;
chown -R acedb $acedb_path/elegans*
chgrp -R acedb $acedb_path/elegans*
chmod 2775 $acedb_path/elegans*
##chown acedb $acedb_path/bin/*
##chgrp acedb $acedb_path/bin/*
END
$self->test_for_error(system($command),"Fetching and installing acedb for WormBase");
}
}
sub fetch_elegans_gff {
my ($self,@p) = @_;
$self->logit(-msg=>'Fetching and installing C. elegans GFF database',
-emphasis => 1);
my $adaptor = $self->adaptor;
$adaptor->parse_params(@p);
# Version to update to
my $version = $adaptor->version;
# Where to find the database tarballs.
my $databases = $adaptor->database_repository;
# The gff tarball
my $gff = sprintf($adaptor->elegans_gff_tarball,$version);
# Local and remote paths
my $remote_path = "$databases/$version/$gff";
my $local_path = $adaptor->tmp_path . "/$version";
# Make sure there is enough space first
my $disk_space = $adaptor->elegans_gff_disk_space;
$self->check_disk_space(-path => $local_path,
-required => $disk_space,
-component => 'elegans_gff');
$self->mirror(-remote_path => $remote_path,
-local_path => $local_path);
my $mysql_path = $adaptor->mysql_path;
unless ($adaptor->dl_only) {
$self->logit(-msg => "Unpacking and installing $gff");
my $command = <<END;
cd $mysql_path
mv elegans elegans.bak
mv elegans_pmap elegans_pmap.bak
gunzip -c $local_path/$gff | tar xvf -
rm -rf elegans.bak
rm -rf elegans_pmap.bak
chgrp -R mysql elegans_pmap
chgrp -R mysql elegans
chown -R mysql elegans_pmap
chown -R mysql elegans
END
$self->test_for_error(system($command),"Fetching and installing C. elegans GFF database for WormBase");
}
}
sub fetch_blast_blat {
my ($self,@p) = @_;
$self->logit(-msg=>'Fetching and installing BLAST databases',
-emphasis => 1);
my $adaptor = $self->adaptor;
$adaptor->parse_params(@p);
# Version to update to
my $version = $adaptor->version;
# Where to find the database tarballs.
my $databases = $adaptor->database_repository;
# The gff tarball
my $blast = sprintf($adaptor->blast_tarball,$version);
# Local and remote paths
my $remote_path = "$databases/$version/$blast";
my $local_path = $adaptor->tmp_path . "/$version";
# Make sure there is enough space first
my $disk_space = $adaptor->blast_disk_space;
$self->check_disk_space(-path => $local_path,
-required => $disk_space,
-component => 'blast');
$self->mirror(-remote_path => $remote_path,
-local_path => $local_path);
unless ($adaptor->dl_only) {
$self->logit(-msg => "Unpacking and installing $blast");
my $command = <<END;
cd /usr/local/wormbase
# Deal with blat
rm -rf blat.previous
mkdir blat.previous
mv blat/* blat.previous/.
# Create the blast directory
mkdir blast
gunzip -c $local_path/$blast | tar -x --no-same-owner -f -
mv blast_$version blast/.
rm -f blast/blast
cd blast/
ln -s blast_$version blast
# Fix permissions as necessary
chgrp -R wormbase /usr/local/wormbase/blat
chmod 2775 /usr/local/wormbase/blat
END
$self->test_for_error(system($command),"Fetching and installing blast databases for WormBase");
}
}
sub fetch_briggsae_gff {
my ($self,@p) = @_;
$self->logit(-msg=>'Fetching and installing C. briggsae GFF database',
-emphasis => 1);
my $adaptor = $self->adaptor;
$adaptor->parse_params(@p);
# Version to update to
my $version = $adaptor->version;
# Where to find the database tarballs.
my $databases = $adaptor->database_repository;
# The gff tarball
my $gff = sprintf($adaptor->briggsae_gff_tarball,$version);
# Local and remote paths
my $remote_path = "$databases/$version/$gff";
my $local_path = $adaptor->tmp_path . "/$version";
my $disk_space = $adaptor->briggsae_disk_space;
$self->check_disk_space(-path => $local_path,
-required => $disk_space,
-component => 'briggsae_gff');
my $result = $self->mirror(-remote_path => $remote_path,
-local_path => $local_path);
# If the briggsae GFF isn't present it hasn't been updated
# This is not yet complete! Note that the packaging script also
# needs to be updated.
# unless ($result) {
# # Do we have a briggsae DB installed? If not, fetch the stable version
# unless (-d "$mysql_path/briggsae") {
# my $stable = $adaptor->database_repository_stable;
# my $remote_path = $stable . "/briggsae/$gff";
# }
# }
my $mysql_path = $adaptor->mysql_path;
unless ($adaptor->dl_only) {
$self->logit(-msg => "Unpacking and installing $gff");
my $command = <<END;
cd $mysql_path
mv briggsae briggsae.bak
gunzip -c $local_path/$gff | tar -xf -
rm -rf briggsae.bak
chgrp -R mysql briggsae
chown -R mysql briggsae
END
$self->test_for_error(system($command),"Fetching and installing C. briggsae GFF database for WormBase");
}
}
# THe libraires are not included above
# This really needs to be worked in
# This will only be used for WormBase packages
#sub fetch_libraries {
# my $version = shift;
# my $ftp = "ftp://$ftp_site/$ftp_path/$version";
# chdir("$TMP/$version");
#
# my $ignore_libraries;
# if (! -e "libraries_$version.tgz") {
# $self->logit(-msg => "Downloading libraries_$version.ace.tgz - $version-specific libraries");
# my $lib_path = $ftp_site . FTP_LIBRARIES;
# $ignore_libraries = system("curl -O ftp://$lib_path/libraries_$version.tgz");
# # $ignore_libraries = system("curl -O ftp://$lib_path/libraries_current.tgz");
# $self->logit(-msg => "Couldn't fetch/no new libraries for $version: $!, not rebuilding");
# }
#
# unless ($ignore_libraries) {
# $self->logit(-msg => "Unpacking and installing libraries_$version.tgz");
# system("gunzip -c libraries_$version.tgz | tar xf -");
# chdir("libraries_$version");
# system("cp -r Library /Library");
# system("cp -r usr /usr");
# # Link the current blast databases
# chdir("/usr/local/blast");
# symlink('/usr/local/wormbase/blast/blast','databases');
# }
#}
#########################################################
# Log analysis
#########################################################
sub analyze_logs {
my ($self,@p) = @_;
my ($site,$version) = rearrange(qw/SITE VERSION/,@p);
$site ||= `hostname`;
return unless $version;
$self->logit(-msg => 'Analyzing server logs',
-emphasis => 1);
$version =~ /WS(.*)/;
my $old_version = 'WS' . ($version - 1);
my $result = system("/usr/local/wormbase/util/log_analysis/analyze_logs $old_version $site");
# We've already fired off the log analysis. Restart apache to intialize new logs.
# THIS SHOULD BE PART OF MONITOR
system('sudo /usr/local/apache/bin/apachectl restart');
}
( run in 1.254 second using v1.01-cache-2.11-cpan-71847e10f99 )