annotate data_nfs/gcpd.pl @ 0:9974ff5df008 default tip

Uploaded
author edward-kirton
date Thu, 01 Dec 2011 20:41:36 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
1 #!/usr/bin/perl
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
2
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
3 # SET UP A CRON JOB THAT RUNS FREQUENTLY (EG. EVERY 2 MIN)
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
4
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
5 use warnings;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
6 use strict;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
7 use File::Copy;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
8 use File::Which;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
9 use File::Basename;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
10
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
11 ## SETTINGS
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
12 my $queue_file = '/some/world/accessible/nfs/import_queue.txt';
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
13 my $ftp_dir = '/your/galaxy/ftp';
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
14 my $admin_email = 'admin@yoursite.gov';
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
15
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
16 # INPUT
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
17 die("No args expected\n") if @ARGV;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
18 die("Queue file does not exist: $queue_file\n") unless -f $queue_file;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
19 die("FTP folder does not exist: $ftp_dir\n") unless -d $ftp_dir;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
20
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
21 # EXIT IF EMPTY
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
22 exit unless -s $queue_file;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
23
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
24 # CHECK IF SENDMAIL AVAILABLE
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
25 our $sendmail=which('sendmail'); # undef if not found
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
26
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
27 # MOVE QUEUE, CREATE NEW EMPTY FILE
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
28 my $current_queue_file="$queue_file.$$";
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
29 move($queue_file,$current_queue_file);
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
30 open(Q, ">$queue_file") or die($!);
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
31 close(Q) or die($!);
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
32 chmod 0666, $queue_file or die("Unable to chmod queue file: $!\n");
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
33
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
34 # LOAD QUEUE
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
35 my @queue=();
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
36 open(Q, "<$current_queue_file") or die($!);
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
37 while (<Q>) {
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
38 chomp;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
39 my @row=split(/\t/);
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
40 push @queue, \@row;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
41 }
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
42 close Q;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
43 unlink($current_queue_file);
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
44
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
45 # COPY FILES
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
46 my %notify=();
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
47 while (@queue) {
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
48 my $row=shift @queue;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
49 my ($email,$path)=@$row;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
50 copypath($path,"$ftp_dir/$email");
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
51 if ($sendmail) {
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
52 $notify{$email}=[] unless exists($notify{$email});
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
53 push @{$notify{$email}}, $path;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
54 }
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
55 }
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
56
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
57 # SEND NOTIFICATION EMAILS
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
58 foreach my $email (keys %notify) {
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
59 my $msg="The following files are available in your FTP folder; use the Upload tool to import them.\n\n"
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
60 . join("\n", @{$notify{$email}})."\n";
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
61 email($sendmail,$admin_email,'Galaxy import complete',$email,$msg);
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
62 }
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
63
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
64 ## SUBROUTINES
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
65
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
66 # COPY FILE/FOLDER TO DEST FOLDER
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
67 sub copypath {
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
68 my ($src,$destdir)=@_;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
69 return unless $src and $destdir;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
70 $src = $1 if $src =~ /^(.+)\/$/;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
71 $destdir = $1 if $destdir =~ /^(.+)\/$/;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
72 # make dest if not exist
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
73 unless (-d $destdir) {
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
74 mkdir($destdir) or warn("Unable to mkdir $destdir: $!\n");
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
75 chmod 0775, $destdir or warn("Unable to chmod dir, $destdir: $!\n");
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
76 }
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
77 if (-d $src) {
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
78 #print "Recursively copy folder $src to $destdir\n";
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
79 my ($subdir,$parentdir)=fileparse($src);
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
80 $destdir .= "/$subdir";
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
81 # make dest if not exist
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
82 unless (-d $destdir) {
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
83 mkdir($destdir) or warn("Unable to mkdir $destdir: $!\n");
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
84 chmod 0775, $destdir or warn("Unable to chmod dir, $destdir: $!\n");
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
85 }
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
86 # process src folder
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
87 unless (opendir(DIR, $src)) {
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
88 warn("Unable to open dir, $src\n");
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
89 return;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
90 }
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
91 my @files= grep { $_ !~ /^\./ } readdir DIR or warn("Unable to readdir, $src: $!\n");
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
92 closedir(DIR);
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
93 #print "Folder, $src, contains ", scalar(@files), " files\n";
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
94 foreach my $file (@files) {
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
95 copypath("$src/$file",$destdir);
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
96 }
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
97 } elsif (-f $src) {
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
98 my ($file,$dir)=fileparse($src);
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
99 my $destfile="$destdir/$file";
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
100 #print "Copy file, $src to $destfile\n";
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
101 copy($src,$destdir) or warn("Unable to copy $src: $!\n");
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
102 chmod 0664, $destfile or warn("Unable to chmod file, $destfile: $!\n");
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
103 } else {
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
104 warn("Invalid path, $src\n");
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
105 }
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
106 }
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
107
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
108 sub email {
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
109 my ($sendmail, $from, $subj, $to, $msg)=@_;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
110 return unless defined($sendmail);
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
111 die("From email not defined\n") unless $from;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
112 die("Subj not defined\n") unless $subj;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
113 die("Receipient email not defined\n") unless $to;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
114 die("Message not defined\n") unless $msg;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
115 my $email=
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
116 "Reply-to: $from\n".
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
117 "Subject: $subj\n".
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
118 "To: $to\n".
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
119 "Content-type: text/plain\n\n".
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
120 $msg;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
121 open(SENDMAIL, "|$sendmail -t") or die "Cannot open $sendmail: $!";
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
122 print SENDMAIL $email;
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
123 close(SENDMAIL);
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
124 }
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
125
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
126 __END__
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
127 Copyright(c) 2011 US DOE Joint Genome Institute.
9974ff5df008 Uploaded
edward-kirton
parents:
diff changeset
128 Use freely under the same license as Galaxy itself.