Parent Directory
|
Revision Log
Revision 1.12 - (view) (download) (as text)
1 : | jared | 1.1 | package MGRASTBackend::MGRASTPipeline; |
2 : | |||
3 : | use ClusterStage; | ||
4 : | use Filesys::DfPortable; | ||
5 : | use Mail::Mailer; | ||
6 : | use Job48; | ||
7 : | use FIG; | ||
8 : | |||
9 : | use strict; | ||
10 : | use warnings; | ||
11 : | |||
12 : | use base qw( Exporter ); | ||
13 : | our @EXPORT = qw ( check_free_space get_jobs get_pipeline_for_job process_upload mark_job_done); | ||
14 : | |||
15 : | 1; | ||
16 : | |||
17 : | |||
18 : | ######################################## | ||
19 : | # | ||
20 : | # Basic methods | ||
21 : | # | ||
22 : | ######################################### | ||
23 : | |||
24 : | sub check_free_space { | ||
25 : | my ($job_spool_dir) = @_; | ||
26 : | my $df = dfportable($job_spool_dir, 1024*1024*1024); | ||
27 : | if (!defined($df)){ | ||
28 : | die "dfportable call failed on $job_spool_dir: $!"; | ||
29 : | } | ||
30 : | if ($df->{bavail} < 10){ | ||
31 : | die sprintf "Not enough free space available (%.1f GB) in $job_spool_dir", $df->{bavail}; | ||
32 : | } | ||
33 : | return; | ||
34 : | } | ||
35 : | |||
36 : | sub get_jobs { | ||
37 : | my ($job_spool_dir) = @_; | ||
38 : | opendir(D, $job_spool_dir) or die "Cannot open job directory $job_spool_dir: $!\n"; | ||
39 : | my @jobs = sort { $a <=> $b } grep { /^\d+$/ and -d "$job_spool_dir/$_" } readdir(D); | ||
40 : | return \@jobs; | ||
41 : | } | ||
42 : | |||
43 : | sub get_pipeline_for_job { | ||
44 : | my ($job_dir) = @_; | ||
45 : | jared | 1.4 | if(! -f "$job_dir/PIPELINE"){ |
46 : | jared | 1.1 | return &{&pipeline("default")}; |
47 : | } else { | ||
48 : | jared | 1.4 | my $pipe = &FIG::file_head("$job_dir/PIPELINE", 1); |
49 : | jared | 1.1 | chomp $pipe; |
50 : | if (ref(&pipeline($pipe)) eq 'CODE'){ | ||
51 : | return &{&pipeline($pipe)}; | ||
52 : | } else { | ||
53 : | return undef; | ||
54 : | } | ||
55 : | } | ||
56 : | } | ||
57 : | |||
58 : | ######################################## | ||
59 : | # | ||
60 : | # Pipelines | ||
61 : | # | ||
62 : | ######################################### | ||
63 : | |||
64 : | sub pipeline { | ||
65 : | my ($name) = @_; | ||
66 : | my %pipelines = ( | ||
67 : | default => \&default_process, | ||
68 : | arodri7 | 1.9 | figfams => \&figfam_process, |
69 : | jared | 1.1 | ); |
70 : | |||
71 : | if(defined $pipelines{$name}){ | ||
72 : | return $pipelines{$name}; | ||
73 : | } else { | ||
74 : | jared | 1.7 | return $pipelines{default}; |
75 : | jared | 1.1 | } |
76 : | } | ||
77 : | |||
78 : | sub default_process { | ||
79 : | return [[uploaded => \&process_upload], | ||
80 : | [preprocess => ClusterStage->new('mg_preprocess', | ||
81 : | sge_flag => "-l mg_preprocess", | ||
82 : | )], | ||
83 : | [sims => ClusterStage->new('mg_sims', | ||
84 : | start_locally => 1, | ||
85 : | )], | ||
86 : | [check_sims => ClusterStage->new('mg_check_sims', | ||
87 : | start_locally => 1, | ||
88 : | )], | ||
89 : | [create_seed_org => ClusterStage->new('mg_create_seed_org', | ||
90 : | sge_flag => "-l mg_postproc_taxa_sims", | ||
91 : | )], | ||
92 : | jared | 1.6 | [export_to_genbank => ClusterStage->new('mg_sims_to_gff_and_gbk', |
93 : | jared | 1.3 | start_locally => 1, |
94 : | jared | 1.1 | )], |
95 : | ]; | ||
96 : | } | ||
97 : | |||
98 : | arodri7 | 1.8 | sub figfam_process { |
99 : | return [[uploaded => \&process_upload], | ||
100 : | [preprocess => ClusterStage->new('mg_preprocess', | ||
101 : | sge_flag => "-l mg_preprocess", | ||
102 : | )], | ||
103 : | [dereplication => ClusterStage->new('mg_check_sequence_distribution', | ||
104 : | start_locally => 1, | ||
105 : | )], | ||
106 : | arodri7 | 1.11 | [figfam_server => ClusterStage->new('mg_ff_server', |
107 : | arodri7 | 1.8 | sge_flag => "-l mg_ff_server", |
108 : | )], | ||
109 : | [figfam_sims => ClusterStage->new('mg_figfam_sims', | ||
110 : | start_locally => 1, | ||
111 : | )], | ||
112 : | [non_figfam_sims => ClusterStage->new('mg_non_figfam_sims', | ||
113 : | start_locally => 1, | ||
114 : | )], | ||
115 : | arodri7 | 1.12 | [non_seed_sims => ClusterStage->new('mg_non_seed_sims', |
116 : | arodri7 | 1.8 | start_locally => 1, |
117 : | )], | ||
118 : | arodri7 | 1.12 | [check_all_sims => ClusterStage->new('mg_check_all_sims', |
119 : | arodri7 | 1.8 | start_locally => 1, |
120 : | )], | ||
121 : | [create_seed_org => ClusterStage->new('mg_create_seed_org', | ||
122 : | sge_flag => "-l mg_postproc_taxa_sims", | ||
123 : | )], | ||
124 : | [export_to_genbank => ClusterStage->new('mg_sims_to_gff_and_gbk', | ||
125 : | start_locally => 1, | ||
126 : | )], | ||
127 : | ]; | ||
128 : | } | ||
129 : | |||
130 : | |||
131 : | jared | 1.1 | ######################################## |
132 : | # | ||
133 : | # Pipeline Stages | ||
134 : | # | ||
135 : | ######################################### | ||
136 : | |||
137 : | sub process_upload | ||
138 : | { | ||
139 : | return; | ||
140 : | } | ||
141 : | |||
142 : | sub mark_job_done | ||
143 : | { | ||
144 : | |||
145 : | print "Attempting to Email user\n"; | ||
146 : | jared | 1.2 | |
147 : | jared | 1.1 | my($job_id, $job_dir, $meta, $req) = @_; |
148 : | |||
149 : | if (open(D, ">$job_dir/DONE")) | ||
150 : | { | ||
151 : | print D time . "\n"; | ||
152 : | close(D); | ||
153 : | } | ||
154 : | else | ||
155 : | { | ||
156 : | warn "Error opening $job_dir/DONE: $!\n"; | ||
157 : | } | ||
158 : | |||
159 : | my $job = new Job48($job_id); | ||
160 : | |||
161 : | my $userobj = $job->getUserObject(); | ||
162 : | |||
163 : | print "setting meta $meta\n"; | ||
164 : | $meta->set_metadata("status.final","complete"); | ||
165 : | print "setting meta $meta .. done\n"; | ||
166 : | |||
167 : | if ($userobj) | ||
168 : | { | ||
169 : | my $email = $userobj->email(); | ||
170 : | my $name = join(" " , $userobj->firstname(), $userobj->lastname()); | ||
171 : | |||
172 : | my $full = $name ? "$name <$email>" : $email; | ||
173 : | print "send email to $full\n"; | ||
174 : | |||
175 : | my $mail = Mail::Mailer->new(); | ||
176 : | $mail->open({ | ||
177 : | To => $full, | ||
178 : | From => 'Metagenome RAST server <mg-rast@mcs.anl.gov>', | ||
179 : | Subject => "MG-RAST job completed" | ||
180 : | }); | ||
181 : | |||
182 : | my $gname = $job->genome_name; | ||
183 : | my $entry = $FIG_Config::fortyeight_home; | ||
184 : | $entry = "http://metagenomics.nmpdr.org/" if $entry eq ''; | ||
185 : | print $mail "The annotation job that you submitted for $gname has completed.\n"; | ||
186 : | print $mail "It is available for browsing at $entry as job number $job_id.\n"; | ||
187 : | $mail->close(); | ||
188 : | } | ||
189 : | } |
MCS Webmaster | ViewVC Help |
Powered by ViewVC 1.0.3 |