]> git.donarmstrong.com Git - biopieces.git/blobdiff - code_perl/Maasha/Biopieces.pm
added missing files
[biopieces.git] / code_perl / Maasha / Biopieces.pm
index 566664c9316a9049a5f4ccfe351bc5dfaaefef45..434cdad8cf738328478eba8a4d6a3e154a2824a2 100644 (file)
@@ -56,6 +56,9 @@ $SIG{ 'INT' }     = \&sig_handler;
 $SIG{ 'TERM' }    = \&sig_handler;
 
 
+# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SUBROUTINES <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+
+
 sub status_set
 {
     my ( $time_stamp, $script, $user, $pid, $file, $fh );
@@ -65,8 +68,9 @@ sub status_set
     $script     = Maasha::Common::get_scriptname();
     $pid        = Maasha::Common::get_processid();
 
-    $file = "$ENV{ 'BP_TMP' }/" . join( ".", $user, $script, $pid ) . ".status";
+    $file = bp_tmp() . "/" . join( ".", $user, $script, $pid ) . ".status";
     $fh   = Maasha::Filesys::file_write_open( $file );
+    flock($fh, 2);
 
     print $fh join( ";", $time_stamp, join( " ", @ARGV ) ) . "\n";
 
@@ -95,11 +99,12 @@ sub status_log
     $script     = Maasha::Common::get_scriptname();
     $pid        = Maasha::Common::get_processid();
 
-    $file = "$ENV{ 'BP_TMP' }/" . join( ".", $user, $script, $pid ) . ".status";
+    $file = bp_tmp() . "/" . join( ".", $user, $script, $pid ) . ".status";
 
     return if not -f $file;
 
     $fh   = Maasha::Filesys::file_read_open( $file );
+    flock($fh, 1);
     $line = <$fh>;
     chomp $line;
     close $fh;
@@ -113,7 +118,9 @@ sub status_log
     $elap = Maasha::Common::time_stamp_diff( $time0, $time1 );
 
     $fh_global = Maasha::Filesys::file_append_open( "$ENV{ 'BP_LOG' }/biopieces.log" );
+    flock($fh_global, 2);
     $fh_local  = Maasha::Filesys::file_append_open( "$ENV{ 'HOME' }/.biopieces.log" );
+    flock($fh_local, 2);
 
     print $fh_global join( "\t", $time0, $time1, $elap, $user, $status, "$script $args" ) . "\n";
     print $fh_local  join( "\t", $time0, $time1, $elap, $user, $status, "$script $args" ) . "\n";
@@ -134,23 +141,20 @@ sub log_biopiece
 
     # Returns nothing.
 
-    my ( $time_stamp, $user, $script, $fh_global, $fh_local );
+    my ( $time_stamp, $user, $script, $fh );
 
     $time_stamp = Maasha::Common::time_stamp();
     $user       = Maasha::Common::get_user();
     $script     = Maasha::Common::get_scriptname();
 
-    $fh_global  = Maasha::Filesys::file_append_open( "$ENV{ 'BP_LOG' }/biopieces.log" );
-    $fh_local   = Maasha::Filesys::file_append_open( "$ENV{ 'HOME' }/.biopieces.log" );
+    $fh = Maasha::Filesys::file_append_open( "$ENV{ 'BP_LOG' }/biopieces.log" );
+    flock($fh, 2);
 
-    print $fh_global "$time_stamp\t$user\t$script ", join( " ", @ARGV ), "\n";
-    print $fh_local  "$time_stamp\t$user\t$script ", join( " ", @ARGV ), "\n";
+    print $fh "$time_stamp\t$user\t$script ", join( " ", @ARGV ), "\n";
 
-    $fh_global->autoflush( 1 );
-    $fh_local->autoflush( 1 );
+    $fh->autoflush( 1 );
 
-    close $fh_global;
-    close $fh_local;
+    close $fh;
 }
 
 
@@ -397,21 +401,25 @@ sub check_print_usage
 
     # Returns nothing.
 
-    my ( $script, $wiki );
+    my ( %options, $help, $script, $wiki );
+
+    %options = %{ $options };
+    $help    = $options{ 'help' };
+    delete $options{ 'help' };
 
     $script = Maasha::Common::get_scriptname();
 
     if ( $script ne 'print_wiki' )
     {
-        if ( exists $options->{ 'help' } or -t STDIN )
+        if ( $help or -t STDIN )
         {
-            if ( not ( exists $options->{ 'stream_in' } or $options->{ 'data_in' } ) )
+            if ( not ( exists $options{ 'stream_in' } or $options{ 'data_in' } ) )
             {
-                if ( scalar keys %{ $options } <= 1 ) 
+                if ( scalar keys %options == 0 ) 
                 {
                     $wiki = $ENV{ 'BP_DIR' } . "/bp_usage/$script.wiki";
                
-                    if ( exists $options->{ 'help' } ) {
+                    if ( $help ) {
                         `print_wiki --data_in=$wiki --help`;
                     } elsif ( $script =~ /^(list_biopieces|list_genomes|list_mysql_databases|biostat)$/ ) {
                         return;
@@ -747,7 +755,7 @@ sub sig_handler
     elsif ( $sig eq "INT" )
     {
         print STDERR "\nProgram '$script' interrupted (ctrl-c was pressed)" . "  -  Please wait for temporary data to be removed\n";
-        status_log( "INTERUPTED" );
+        status_log( "INTERRUPTED" );
     }
     elsif ( $sig eq "TERM" )
     {
@@ -776,7 +784,7 @@ sub clean_tmp
 
     my ( $tmpdir, @dirs, $curr_pid, $dir, $user, $sid, $pid );
 
-    $tmpdir = $ENV{ 'BP_TMP' } || Maasha::Common::error( 'No BP_TMP variable in environment.' );
+    $tmpdir = bp_tmp();
 
     $curr_pid = Maasha::Common::get_processid();
 
@@ -822,22 +830,22 @@ sub get_tmpdir
 
     my ( $user, $sid, $pid, $script, $path, $file, $fh, $line );
 
-    Maasha::Common::error( qq(no BP_TMP set in %ENV) ) if not -d $ENV{ 'BP_TMP' };
-
     $user   = Maasha::Common::get_user();
     $sid    = Maasha::Common::get_sessionid();
     $pid    = Maasha::Common::get_processid();
     $script = Maasha::Common::get_scriptname();
 
-    $path = "$ENV{ 'BP_TMP' }/" . join( "_", $user, $sid, $pid, "bp_tmp" );
-    $file = "$ENV{ 'BP_TMP' }/" . join( ".", $user, $script, $pid ) . ".status";
+    $path = bp_tmp() . "/" . join( "_", $user, $sid, $pid, "bp_tmp" );
+    $file = bp_tmp() . "/" . join( ".", $user, $script, $pid ) . ".status";
     
     $fh   = Maasha::Filesys::file_read_open( $file );
+    flock($fh, 1);
     $line = <$fh>;
     chomp $line;
     close $fh;
 
     $fh   = Maasha::Filesys::file_write_open( $file );
+    flock($fh, 2);
     print $fh "$line;$path\n";
     close $fh;
 
@@ -866,6 +874,7 @@ sub biopiecesrc
     return undef if not -f $file;
 
     $fh     = Maasha::Filesys::file_read_open( $file );
+    flock($fh, 1);
     $record = get_record( $fh );
     close $fh;
 
@@ -876,6 +885,26 @@ sub biopiecesrc
     }
 }
 
+sub bp_tmp
+{
+    # Martin A. Hansen, March 2013.
+
+    # Returns the BP_TMP path.
+    # Errs if no BP_TMP in ENV and
+    # creates BP_TMP if it doesn't exists.
+
+    my ( $path );
+
+    Maasha::Common::error( qq(no BP_TMP set in %ENV) ) if not -d $ENV{ 'BP_TMP' };
+
+    $path = $ENV{ 'BP_TMP' };
+
+    unless ( -d $path ) { # No BP_TMP so we create it
+        mkdir $path or die qq(failed to create dir "$path": $!);
+    }   
+
+    return $path;
+}
 
 END
 {