Mercurial > repos > edward-kirton > data_nfs
view data_nfs/gcpd.pl @ 0:9974ff5df008 default tip
Uploaded
author | edward-kirton |
---|---|
date | Thu, 01 Dec 2011 20:41:36 -0500 |
parents | |
children |
line wrap: on
line source
#!/usr/bin/perl # SET UP A CRON JOB THAT RUNS FREQUENTLY (EG. EVERY 2 MIN) use warnings; use strict; use File::Copy; use File::Which; use File::Basename; ## SETTINGS my $queue_file = '/some/world/accessible/nfs/import_queue.txt'; my $ftp_dir = '/your/galaxy/ftp'; my $admin_email = 'admin@yoursite.gov'; # INPUT die("No args expected\n") if @ARGV; die("Queue file does not exist: $queue_file\n") unless -f $queue_file; die("FTP folder does not exist: $ftp_dir\n") unless -d $ftp_dir; # EXIT IF EMPTY exit unless -s $queue_file; # CHECK IF SENDMAIL AVAILABLE our $sendmail=which('sendmail'); # undef if not found # MOVE QUEUE, CREATE NEW EMPTY FILE my $current_queue_file="$queue_file.$$"; move($queue_file,$current_queue_file); open(Q, ">$queue_file") or die($!); close(Q) or die($!); chmod 0666, $queue_file or die("Unable to chmod queue file: $!\n"); # LOAD QUEUE my @queue=(); open(Q, "<$current_queue_file") or die($!); while (<Q>) { chomp; my @row=split(/\t/); push @queue, \@row; } close Q; unlink($current_queue_file); # COPY FILES my %notify=(); while (@queue) { my $row=shift @queue; my ($email,$path)=@$row; copypath($path,"$ftp_dir/$email"); if ($sendmail) { $notify{$email}=[] unless exists($notify{$email}); push @{$notify{$email}}, $path; } } # SEND NOTIFICATION EMAILS foreach my $email (keys %notify) { my $msg="The following files are available in your FTP folder; use the Upload tool to import them.\n\n" . join("\n", @{$notify{$email}})."\n"; email($sendmail,$admin_email,'Galaxy import complete',$email,$msg); } ## SUBROUTINES # COPY FILE/FOLDER TO DEST FOLDER sub copypath { my ($src,$destdir)=@_; return unless $src and $destdir; $src = $1 if $src =~ /^(.+)\/$/; $destdir = $1 if $destdir =~ /^(.+)\/$/; # make dest if not exist unless (-d $destdir) { mkdir($destdir) or warn("Unable to mkdir $destdir: $!\n"); chmod 0775, $destdir or warn("Unable to chmod dir, $destdir: $!\n"); } if (-d $src) { #print "Recursively copy folder $src to $destdir\n"; my ($subdir,$parentdir)=fileparse($src); $destdir .= "/$subdir"; # make dest if not exist unless (-d $destdir) { mkdir($destdir) or warn("Unable to mkdir $destdir: $!\n"); chmod 0775, $destdir or warn("Unable to chmod dir, $destdir: $!\n"); } # process src folder unless (opendir(DIR, $src)) { warn("Unable to open dir, $src\n"); return; } my @files= grep { $_ !~ /^\./ } readdir DIR or warn("Unable to readdir, $src: $!\n"); closedir(DIR); #print "Folder, $src, contains ", scalar(@files), " files\n"; foreach my $file (@files) { copypath("$src/$file",$destdir); } } elsif (-f $src) { my ($file,$dir)=fileparse($src); my $destfile="$destdir/$file"; #print "Copy file, $src to $destfile\n"; copy($src,$destdir) or warn("Unable to copy $src: $!\n"); chmod 0664, $destfile or warn("Unable to chmod file, $destfile: $!\n"); } else { warn("Invalid path, $src\n"); } } sub email { my ($sendmail, $from, $subj, $to, $msg)=@_; return unless defined($sendmail); die("From email not defined\n") unless $from; die("Subj not defined\n") unless $subj; die("Receipient email not defined\n") unless $to; die("Message not defined\n") unless $msg; my $email= "Reply-to: $from\n". "Subject: $subj\n". "To: $to\n". "Content-type: text/plain\n\n". $msg; open(SENDMAIL, "|$sendmail -t") or die "Cannot open $sendmail: $!"; print SENDMAIL $email; close(SENDMAIL); } __END__ Copyright(c) 2011 US DOE Joint Genome Institute. Use freely under the same license as Galaxy itself.